Autor Tema: Libreria CCS para controlar LEDs WS2811/WS2812  (Leído 39138 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado Axel

  • PIC10
  • *
  • Mensajes: 10
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #60 en: 03 de Diciembre de 2016, 20:01:30 »
Hola, sigo sin poder corregir los del SetBrightness, pero aqui hago un pequeño aporte, la función de Wheel dice que asiga un color de 0 a 255 en el orden R-G-B-R pero lo que en realidad hace es G-R-B-G, asi que aqui les dejo el que ya es para R-G-B-R:
Código: C
  1. int32 Wheel(int WheelPos) {
  2. // Input a value 0 to 255 to get a color value.
  3. // The colours are a transition r - g - b - back to r.
  4.         if(WheelPos < 85){
  5.                 return Color32(255-WheelPos*3,WheelPos*3,0);
  6.         }else if(WheelPos < 170){
  7.         WheelPos -= 85;
  8.                 return Color32(0,255-WheelPos*3,WheelPos*3);
  9.         }else{
  10.         WheelPos -= 170;
  11.                 return Color32(WheelPos*3,0,255-WheelPos*3);
  12.         }
  13. }

utilicé esta imagen para guiarme en el código:


Saludos.

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #61 en: 23 de Enero de 2017, 17:32:13 »
Estuve trabajando con la libreria esta tarde y he hecho algunas modificaciones, a la vez que comprobaciones de que todo estuviera en orden.
La libreria no es directamente compatible con la anterior, pero es muy similar.
En el .h viene una explicacion extensa de como usarla.

PS: no puedo modificar el primer post para poner el archivo nuevo. Es una pena, ya que quedaria mejor que la ultima version de la libreria estuviese al principio, y no tener que andar buscando entre los posts....

PS2: Axel, tienes razon con la funcion Wheel, mañana pruebo tu modificacion
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado joseluislo12

  • PIC10
  • *
  • Mensajes: 20
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #62 en: 15 de Febrero de 2017, 13:47:52 »
Buenos días

He descargado la última versión de la librería (V3) y la he utilizado con este código:

Código: C
  1. #include <16F1827.h>
  2. #FUSES INTRC_IO,
  3.  
  4. #use delay(clock=32M)
  5. #use fast_io(a)
  6.  
  7. #define PIX_PIN   PIN_A1
  8. #define PIX_NUM_LEDS   2
  9.  
  10. #include <led_pixels.c>
  11.  
  12. void main(){
  13.    InitPixels();
  14.    
  15.    while(true){
  16.       SetPixelColor(0,Color32(100,0,0));
  17.       SetPixelColor(1,Color32(0,0,100));
  18.       CambiarBrillo(255);
  19.       MostrarPixels();
  20.       delay_ms(50);
  21.    }
  22. }

Pero no me funciona, ya que los LED jamás prenden

El esquema que tengo es

PIC -> PIN A1 -> Resistencia 470 -> DIN LED 1 -> DOUT LED 1 -> DIN LED 2

No sé si estoy haciendo algo mal, ojalá pudieran ayudarme con esto

He probado el circuito con una librería para arduino y los LED funcionan correctamente.

Desconectado Axel

  • PIC10
  • *
  • Mensajes: 10
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #63 en: 16 de Febrero de 2017, 03:57:07 »
Buenos días

He descargado la última versión de la librería (V3) y la he utilizado con este código:

Código: C
  1. #include <16F1827.h>
  2. #FUSES INTRC_IO,
  3.  
  4. #use delay(clock=32M)
  5. #use fast_io(a)
  6.  
  7. #define PIX_PIN   PIN_A1
  8. #define PIX_NUM_LEDS   2
  9.  
  10. #include <led_pixels.c>
  11.  
  12. void main(){
  13.    InitPixels();
  14.    
  15.    while(true){
  16.       SetPixelColor(0,Color32(100,0,0));
  17.       SetPixelColor(1,Color32(0,0,100));
  18.       CambiarBrillo(255);
  19.       MostrarPixels();
  20.       delay_ms(50);
  21.    }
  22. }

Pero no me funciona, ya que los LED jamás prenden

El esquema que tengo es

PIC -> PIN A1 -> Resistencia 470 -> DIN LED 1 -> DOUT LED 1 -> DIN LED 2

No sé si estoy haciendo algo mal, ojalá pudieran ayudarme con esto

He probado el circuito con una librería para arduino y los LED funcionan correctamente.

Intenta eliminando esta línea:       CambiarBrillo(255);

Desconectado horatio1989

  • PIC10
  • *
  • Mensajes: 3
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #64 en: 11 de Mayo de 2017, 19:15:45 »
Buenas! disculpen que moleste, pero ya estoy quemado! no logro encontrar el error en mi código.

Estoy usando la librería "led_pixels_v0.3.h" de Martín (está genial por cierto) y me da error en la frecuencia de mi clock.

Acá muestro la configuración de fuses:

#include <18F2550.h>
#include <led_pixels_v0.3.h>

#fuses NOWDT,NOPROTECT,NOLVP,NODEBUG,PUT
#fuses HSPLL   // High-Speed Crystal/Resonator with PLL Enabled
#fuses PLL5      // Divide por 5 la freq del crystal y la inyecta al PLL que requiere 4MHz para sacar 96MHZ
#fuses CPUDIV2   // Divide los 96MHz del PLL en 3, logrando 32MHz para el PIC
#use delay (clock=32000000)
#use fast_io(c)

Estoy seguro que el PLL está bien configurado, pero me digue dando error la librería diciendo que la velocidad del PIC debe ser de 32 MHz.

Alguna idea de qué estoy haciendo mal?

El resto del programa es lo mismo que el comentario de arriba


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #65 en: 11 de Mayo de 2017, 19:33:24 »
Si pones el include  luego de los fuses cambia en algo ? Asi:

Código: C
  1. #include <18F2550.h>
  2.  
  3. #fuses NOWDT,NOPROTECT,NOLVP,NODEBUG,PUT
  4. #fuses HSPLL   // High-Speed Crystal/Resonator with PLL Enabled
  5. #fuses PLL5      // Divide por 5 la freq del crystal y la inyecta al PLL que requiere 4MHz para sacar 96MHZ
  6. #fuses CPUDIV2   // Divide los 96MHz del PLL en 3, logrando 32MHz para el PIC
  7. #use delay (clock=32000000)
  8. #use fast_io(c)
  9.  
  10. #include <led_pixels_v0.3.h>

Sino si estas MUY pero MUY seguro que esta a 32Mhz, simplemente comenta esto del .h

Código: C
  1. #if getenv("CLOCK") != 32000000
  2.         //Necesitamos que el PIC corra a 32MHZ
  3.         #ERROR "La velocidad del PIC debe ser de 32Mhz"
  4. #endif

La otra es que por algun lado tengas que definir aparte que va a 32Mhz para que no salga esto.

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #66 en: 12 de Mayo de 2017, 04:27:07 »
Hola!
Como dice Killer, el error diria que esta en que incluyes la libraria ANTES de decir a que velocidad funciona el PIC.
La libreria comprueba la velocidad del PIC en esta instruccion:
Código: [Seleccionar]
#if getenv("CLOCK") != 32000000Y getenv("CLOCK") obtiene su valor de la ULTIMA declaracion que hayas hecho de #use delay.
Incluyendo la libreria despues deberia solventar el problema.
Como tambien dice Killer, si estas seguro de que tu PIC corre a 32Mhz, elimina/comenta esa linea y te dejara compilar.
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #67 en: 12 de Mayo de 2017, 04:30:43 »
Si quereis la ultima version del codigo, esta siempre disponible en Github. Ademas, si utilizais Git, podeis colaborar para hacer la libreria mejor (y otras que tambien he subido):

https://github.com/ideaalab/led_pixels_library
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado horatio1989

  • PIC10
  • *
  • Mensajes: 3
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #68 en: 12 de Mayo de 2017, 10:12:56 »
Hola a todos! Muchas gracias por sus respuestas, paso a comentarles:

Había probado cambiando de lugar el #include <led_pixels_v0.3.h> , sin embargo la cosa sigue sin funcionar.

Probé también comentar la verificación de velocidad, pero me sigue dando otros errores (dice que no defino PIX_PIN, PIX_NUM_LEDS que en realidad sí están definidas)

Les copio todos los errores:

"La velocidad del PIC debe ser de 32Mhz"
"PIX_NUM_LEDS no definido"
"PIX_PIN no definido"
led_pixels_v0.3.h Line 144(2,6): A #DEVICE required before this line
led_pixels_v0.3.h Line 144(32,33): Expecting an identifier  Bad SFR name
led_pixels_v0.3.h Line 145(2,6): Undefined identifier

Estoy seguro que el pic está a 32MHz, ya que probé sacar todo y usar un delay para ver que el temporizado esté como corresponde, y efectivamente me da el delay que quiero.

Copié el código que probó joseluislo12, y me da todos eses errores! la verdad no sé qué estoy haciendo mal.  Copio mi código completo

Código: [Seleccionar]
#include <18F2550.h>

#fuses NOWDT,NOPROTECT,NOLVP,NODEBUG,PUT
#fuses HSPLL // High-Speed Crystal/Resonator with PLL Enabled
#fuses PLL5 // Divide por 5 la freq del crystal y la inyecta al PLL que requiere 4MHz para sacar 96MHZ
#fuses CPUDIV2 // Divide los 96MHz del PLL en 3, logrando 32MHz para el PIC
#use delay (clock=32000000)
#use fast_io(c)

#define PIX_PIN   PIN_C2
#define PIX_NUM_LEDS   3
#define PIX_DELAY_TIMER2
#include <led_pixels_v0.3.h>
#include <led_pixels_v0.3.c>

void main(){
   InitPixels();
   
   while(1){
      SetPixelColor(0,Color32(100,0,0));
      SetPixelColor(1,Color32(0,0,100));
      //CambiarBrillo(255);
      MostrarPixels();
      delay_ms(50);
}
}

Por otro lado, estoy usando MP Lab (de Microchip) para compilar y un pickkit2 para programar. Incluí en mi proyecto, en los header files el led_pixels_v0.3.h y dentro de las sources led_pixels_v0.3.c

Espero alguien tenga idea en qué me estoy equivocando! Muchas gracias de ante mano por la paciencia y la ayuda.


Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #69 en: 14 de Mayo de 2017, 06:33:24 »
Me parece que estas incluyendo la libreria como "source file", mientras que deberias incluirla como "important file".
La diferencia es que si la incluyes en source file, intentara compilar la libreria, y en CCS nunca lo he conseguido... Pero si la incluyes en important files, lo que hara es "tenerla a mano" dentro de tu proyecto, pero solo para tu referencia (no la incluye en el codigo).
La referencia a la libreria la tienes que hacer con el #include.
A ver si hay suerte, pero el error no es de la libreria, sino de la configuracion del proyecto.
Un saludo!
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado horatio1989

  • PIC10
  • *
  • Mensajes: 3
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #70 en: 15 de Mayo de 2017, 11:19:16 »
Mil Gracias Marttyn! era eso que decías... tenía mal configurado el proyecto.

Ahora surge algo nuevo. Ya no tira errores, sin embargo, no hace nada. Estoy viendo la salida del pin con el osciloscopio y no hay nada. Probé muchas cosas, y recién al comentar la línea del #use fast_io(c) y desconectando el pin de GND de la tira de leds, estos se comportan como los programo.

La verdad ya no sé que es! no es problema de corriente, porque solo estoy probando con 3 leds y alimentado desde el USB.

La librería está fabulosa!

Si a alguien se le ocurre qué puede ser será muy valioso el aporte!

Gracias de todas formas!

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #71 en: 15 de Mayo de 2017, 12:17:06 »
Hola Horatio!
Acabo de crear un codigo "demo" de como usar la libreria.
Puedes descargarlo, junto con la ultima version de la libreria en Github: https://github.com/ideaalab/led_pixels_library
Funciona tal cual, incluso la funcion de ajustar el brillo. En caso de que no te funcione comprueba la version del compilador, yo tengo la v5.064. Me ha ocurrido que de una version para otra hay cosas que me dejan de funcionar :(
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #72 en: 26 de Mayo de 2017, 08:26:03 »
[...] aqui hago un pequeño aporte, la función de Wheel dice que asiga un color de 0 a 255 en el orden R-G-B-R pero lo que en realidad hace es G-R-B-G, asi que aqui les dejo el que ya es para R-G-B-R [...]

Por cierto, no habia probado hasta ahora esto que decias, y (por supuesto) tienes razon. He añadido la funcion Wheel a la libreria con tu correcion.
Gracias!
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #73 en: 26 de Mayo de 2017, 10:31:47 »
Tengo un par de tiras de estos Leds, a ver si hago un poco de tiempo y me pongo a jugar con tu librería, Marttyn, que por cierto: muchas gracias por compartir con todos nosotros  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado proteus7

  • PIC10
  • *
  • Mensajes: 11
Re:Libreria CCS para controlar LEDs WS2811/WS2812
« Respuesta #74 en: 29 de Noviembre de 2017, 13:05:39 »
Hola,  tengo una pergunta,  veo que en el pic usan una frecuencia de 32Mhz para controlar las tiras, pero en el arduino uno  usan 16Mhz, como es posible hacerlo con 16Mhzen  arduino uno?