Autor Tema: Pido Ayuda para desarrollar un nuevo proyecto con leds  (Leído 4982 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado inventable

  • PIC10
  • *
  • Mensajes: 13
Pido Ayuda para desarrollar un nuevo proyecto con leds
« en: 31 de Enero de 2012, 05:43:56 »
Hola a toda la gente del forum. Soy Gabriel (inventable) y quiero hacerles una propuesta de desarrollo colectivo de un proyecto con la comunidad de TodoPic. El proyecto yo lo he llamado provisoriamente RGBledDot.


Hace un tiempo, encontré en Internet información técnica del circuito integrado LPD8803/LPD8806 que permite de hacer tiras de leds RGB donde cada led puede ser controlado separadamente. Los efectos que se pueden hacer son impresionantes porque cada led puede tener su color independientemente de los otros. Estas tiras las vende  www.adafruit.com, sitio web preferido por los fanáticos de arduino. El circuito integrado suelto es imposible de encontrar en ningún lado.


Hasta los mismos vendedores de estas tiras no logran conseguir el DATASHEET de este circuito integrado en inglés, en internet se encuentra solo una versión en chino. Todo es muy nuevo. Para controlar estas tiras, se han hecho algunas librerías para arduino usando la técnica del "Reverse Engineering".

El protocolo de comunicación no se encuentra a disposición, parece ser que una tarjeta master transmite una serie de byte en sucesión (como con el protocolo DMX512) y que cada chip de la tira, conectado en cascada, filtra los byte que le interesan dejando pasar los restantes. Por lo tanto no es necesario conectar dip-switch para configurar la dirección de cada chip de la tira, esto ocurre automáticamente (tipo shift register). La idea me parece muy buena.



Mi idea es la de desarrollar un sistema (hardware y software) con nuestros amados pics que hagan lo mismo que este chip. Como se puede ver en las fotografías, el circuito es re-simple, la clave de todo está en el firmware. Mi idea es la de hacer dos versiones: una con un pic a 8 pin (tipo 12F629) que controle tres leds (o 1 RGB) y otra versión con un PIC tipo PIC16F628 que controle 12 leds (o 4 RGB). Les muestro un ejemplo que he pensado.


Cada led controlado podría tener un nivel de luminosidad desde 0 a 255. Yo me imagino mensajes generados desde el master largos 512 bytes o 1024 bytes que serían la cantidad máxima de leds que podríamos controlar. La velocidad de transmisión podría ser variable gracias a la línea de clock que sincroniza todo.   


La ventaja de este proyecto es que no dependeríamos de un chip particular y podríamos desarrollar efectos luminosos espectaculares usando solo pics y leds. Otra vantaja es que, haciendo una versión que tenga driver de transistores podríamos controlar leds de potencia y por lo tanto construir hasta carteles animados.

Tendríamos que desarrollar el circuito, el pcb, el protocolo, el firmware (probablemente en assambler por cuestiones de velocidad) y un software (library) para una tarjeta de control. Propongo de hacer todo el proyecto Open Source y como autores todos los que quieran participar.

¿Que opinan? ¿Me ayudan?
   :)



Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: Pido Ayuda para desarrollar un nuevo proyecto con leds
« Respuesta #1 en: 31 de Enero de 2012, 19:26:42 »
Saludos inventable me parece un buen proyecto me apunto.

Es una forma de aportar algo a este excelente foro.
Revise lo que comentas con el chip LPD8803 y efectivamente va a hacer muy difícil conseguir el datasheet, pues es un integrado a la medida específicamente para esa tarea, es muy común que esos chinitos hagan eso.

Actualmente estoy revisando unos módulos full color de una compañía china, pero necesitaba hacer una prueba de barrido para poder repararlos, y sorpresa tienen un chip que por mas que busque no encontré información en la red, y solo conseguí el datasheet con el proveedor de los módulos. finalmente ya los estoy reparando y efectivamente es un protocolo muy propio del fabricante.

pero regresando al tema con que te puedo ayudar??

Saludos Cordiales




 

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Pido Ayuda para desarrollar un nuevo proyecto con leds
« Respuesta #2 en: 31 de Enero de 2012, 22:27:21 »
Hola Gabriel. Buena iniciativa!

Calculaste la velocidad de clock mínima que necesitarías para poder controlar 1024 LEDs a X Hertz(Hertz de refresco de información, no de PWM)?
Asumiendo 30Hz, para 1024 LEDs necesitarías transferir:

1024 * 3 * 8 * 30 bits = 737280 bits = 92160 Bytes

Lo que es casi 100kB, por lo que necesitás un clock de mínimo 800Khz = período de 1.25uS. En tus esquemas utilizas el oscilador interno(4Mhz) por lo que cada instrucción demora 1uS. Me resulta imposible realizarlo bajo dichos parámetros, incluso para 512 LEDS(2.5uS de clock - 1.25uS en alto y 1.25uS en bajo). no olvidemos también que al compartir el CLK, los uC deberían respetar de manera muy precisa los tiempos para inyectar el bit en la cascada.

Nuevamente, lo más complicado que veo es la parte de realizar la cascada de bits. Es realmente complicado a esa frecuencia con un uC de bajos MIPS lograr estar constantemente leyendo y escribiendo en la cascada.

Tal vez siendo menos ambicioso con la cantidad de LEDs, bajando los Hertz, elevando la frecuencia del uC o bien con un uC de mayor potencia podría intentarse, en ASM, claro.

La subrutina más rápida que he logrado para generar 3 PWM por software en un 12/16F es de 20 instrucciones.
Si la frecuencia de los PWM es de 100Hz, a 8 bits de profundidad, tenemos un período de refresco de:
1s / 100 / 255 =  0,000039s = 39uS.
Con un cristal de 4Mhz obtenés 1 MIPS en un 12F629/16F628A. Por ende, 1 instrucción = 1uS. Significa que el uC ya tiene mínimamente el 50% del tiempo asignado al refresco de los PWM. Habría que ver cuál es la frecuencia máxima que puede lograrse de clock en la cascada sin que el uC pierda bits o los inyecte mal en la cascada...

Personalmente, tal vez lo encararía con registros de desplazamiento triple B(Bueno, Bonitos y Baratos): 74HC595 que realizarían automáticamente la inyección de bits en la cascada, soportan clocks de hasta 100Mhz y 25mA por salida drain/source.
Sólo haría falta un uC cada cierta cantidad de registros, que posea o bien dos puertos SPI o bien un puerto SPI y otro puerto(UART/PSP/I2C/USB/etc). El 16F628A puede ser un buen candidato o bien si pudiese elegir libremente, creo que el LPC1114 de NXP, al tener 2 SPI y hasta 50 MIPS, es una buena bestia para la tarea.




"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado inventable

  • PIC10
  • *
  • Mensajes: 13
Re: Pido Ayuda para desarrollar un nuevo proyecto con leds
« Respuesta #3 en: 01 de Febrero de 2012, 05:14:59 »
Muchas gracias Chipcon por tu disponibilidad y también a BrunoF por el análisis detallado y preciso.
Para la parte del control PWM yo propongo el código que hice en el cambiador RGB:


#define p_rojo    GPIO,0      ; pin del canal rojo
#define p_verde   GPIO,1      ; pin del canal verde
#define p_azul    GPIO,2      ; pin del canal azul

intensidad_verde  RES 1       ; registro intensidad canal verde       
intensidad_rojo   RES 1       ; registro intensidad canal rojo       
intensidad_azul   RES 1       ; registro intensidad canal azul     

RegPwm            RES 1       ; registro PWM para regular la intensidad de los tres canales

;-----------------------------------------------------------------------------------------------------------
;         Actualiza la intensidad de los 3 canales (rojo, verde y azul)
;         en base a los registros de intensidad
;-----------------------------------------------------------------------------------------------------------
PwmRefresh
         incf    RegPwm,f               ; actualiza la intensidad
         movf    intensidad_verde,W     ; del canal verde
         subwf   RegPwm,W
         btfss   STATUS,C
         bsf     p_verde
         btfsc   STATUS,C
         bcf     p_verde   

         movf    intensidad_rojo,W      ; actualiza la intensidad
         subwf   RegPwm,W               ; del canal rojo
         btfss   STATUS,C
         bsf     p_rojo
         btfsc   STATUS,C
         bcf     p_rojo   

         movf    intensidad_azul,W      ; actualiza la intensidad
         subwf   RegPwm,W               ; del canal azul
         btfss   STATUS,C
         bsf     p_azul
         btfsc   STATUS,C
         bcf     p_azul   
         retlw   0
;-----------------------------------------------------------------------------------------------------------

¿Segùn ustedes se puede mejorar?



Desconectado Chipcon

  • PIC12
  • **
  • Mensajes: 63
Re: Pido Ayuda para desarrollar un nuevo proyecto con leds
« Respuesta #4 en: 01 de Febrero de 2012, 12:12:45 »
yo también he pensado y comparto la opinión de Bruno, pues es diferente la velocidad de pwm que veo la tienes hecha para ASM con la velocidad de refresh de los datos es decir; la encargada de generar los efectos en la LEDSTRIP del video.

Yo también creo que utilizando drivers de corriente constante de 8 bits como el AE6275 de allegro o el TLC5916 de texas que son baratos y se consiguen fácilmente se puede manejar este proyecto.
Ahora bien cual es el problema definitivamente la velocidad del pic pues incluso con cristal de 20MHZ solo tienes 5Mhz reales.

Pero ahí que probar si funciona algún protocolo sencillo para cargar los datos a fin de evitar mucho procesamiento en los pic´s que van a hacer la función de drivers.
y creo que lo mas fácil es la comunicación sincronía con 3 bits DATA,CLOCK, LATCH por que??

Ya que el valor del brillo es de 0 a 255 se requiere un byte, y sus 8 pulsos de reloj para sincronizarlo x 3 colores se requieren 24 clocks y 3 bytes para cargar un pic.
El pic desplaza los datos al siguiente mientras no reciba la señal de latch.

por que no utilizar otro byte como comando de carga?? y así ahorrar un pin?? pues bien el valor del brillo es de 0 a 255.

Otra opción es utilizar un tiempo de espera o sincronía como el protocolo DMX512, pero es cuestión de opciones
saludos

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Pido Ayuda para desarrollar un nuevo proyecto con leds
« Respuesta #5 en: 01 de Febrero de 2012, 12:22:33 »
Yo propongo hacerlo en C. Ya que asi podemos programar una libreria, desde sus primitivas hasta los efectos especiales. Podemos indicarle a la libreria cuantos modulos hay disponibles y en base a eso hacer los efectos.
Hay q pensar bien como se va a implementar, de que forma le vamos a indicar la cantidad de leds, como se van a llamar a las funciones, etc..
Saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Pido Ayuda para desarrollar un nuevo proyecto con leds
« Respuesta #6 en: 01 de Febrero de 2012, 14:27:13 »
Hola, he visto esas tiras en Biel, y creo que no requieren de tanta velocidad de comunicación..., ya que si miran el video, simplemente la informacion del primer modulo, es retardada, y retransmitida al modulo siguiente... para producir un efecto de ola o cascada...
Creo que Bruno estás pensando a lo grande, para generar carteles o imagenes  ;-) (o yo me perdí en alguna parte je je)
yo emplearía una "comunicación serie", para enviar el color, con solo 10 bits, 2 para el color, y 8 para el valor... y una patita para ir sincronizando la velocidad de transferencia o actualización de de la cascada...

Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Pido Ayuda para desarrollar un nuevo proyecto con leds
« Respuesta #7 en: 04 de Febrero de 2012, 00:18:59 »
encontré esto en mercado libre..

 datasheet A6281
Power Connections

The V+ and GND pins power both the LED and the control chip. ShiftBrites require up to 60mA per module when all LEDs are active. The supply voltage should be kept between 5.5 and 9 volts. I have had good results with 6V and 7.5V power supplies.

As is true of most digital electronics, if you connect power backwards or short contacts with metal objects or other modules on the chain, you WILL destroy the logic chip. Please triple-check all cables and make sure the modules are not in contact with anything conductive BEFORE applying power.

Data In / Data Out

The DI (Data In) pin carries the actual control information into the ShiftBrite. It is the input to an internal 32-bit shift register. Every time data is shifted into the controller, the binary value on the DI pin is placed in Bit 0 of the shift register, and the value in Bit 31 overflows out the DO (Data Out) pin to the next ShiftBrite in the chain. Data is shifted in using MSB (most significant bit first).

Clock In / Clock Out

The CI (Clock In) pin controls the shifting process. Each time the CI pin is sent to logic high and low, data is shifted into the DI pin and out of the DO pin. The CI signal is passed through the ShiftBrite to the CO (Clock Output) pin, so the next ShiftBrite can receive the bits from the DO line.

Latch In / Latch Out

The LI (Latch Input) pin causes the ShiftBrite to accept whatever is in its shift register as a new command. If you send the LI pin high and then low after 32 clocks, the first ShiftBrite in the chain has all new data from the DI pin. The second ShiftBrite contains whatever was already in the first ShiftBrite, and so on. To command all ShiftBrites in a chain, you must toggle the LI pin after you have shifted data to all ShiftBrites; 32 clock cycles times the number of ShiftBrites in the chain. The LI pin passes through to the LO (Latch Output) pin.

Enable In / Enable Out

The EI (Enable Input) turns the entire chain on and off. If it is sent to logic high, then it will blank all ShiftBrites. When EI is low, all ShiftBrites will display the colors specified previously. The EI pin passes through to the EO pin.


0   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31
PWM Counter 0   PWM Counter 1   PWM Counter 2   0   X
Dot Correction 0   Clock
Mode   X   Dot Correction 1   X   X   X   Dot Correction 2   X   ATB   ATB   1   X

Each color has 10 bits of the 32 bit command word, as shown in the above diagram. The 10 bits allow PWM (pulse width modulation) control of LED brightness to 1024 possible levels. This is only true if the remaining 2 bits are set to zero. Otherwise, the ShiftBrite enters a command mode that allows current control and other parameters. This should always be set as shown in the code below, unless you have a specific reason to do otherwise. Additional information is available at the bottom of page 7 in the A6281 datasheet.

Essentially, when Bit 30 is 1 the ShiftBrite enters command mode, the last row of the table above. You can set a 7-bit current control value for each LED, 0 to 127 corresponds to about 33% to 100% power. The Clock Mode setting lets you change the PWM frequency or use an external source; it is normally set to 00 which is an 800KHz internal PWM (please refer to the A6281 datasheet for other settings if needed). The bits marked "X" have no effect on the device. The bits marked "ATV" are for Allegro internal testing, but have the side effect of stopping the output buffers. That means if you accidentally write an ATB due to noise, you must write to each ShiftBrite's command register to be able to rewrite the next one.

Since the control mode can set the ShiftBrite to unusable modes, it is a good idea to write the control register often. Most of my code writes it each time the color values are written.

pagina de mercado libre


« Última modificación: 04 de Febrero de 2012, 00:23:07 por todopic »
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Pido Ayuda para desarrollar un nuevo proyecto con leds
« Respuesta #8 en: 04 de Febrero de 2012, 12:54:29 »
Esta buenisimo Norberto! Pero U$S 20 la unidad? :S creo q como mucho haremos una tira de 3 modulos jaja.
Tal vez con un pic 12f de 8 pines y un led RGB podamos hacer un modulito al estilo. Tenemos 2 pines de alimentacion, nos quedan 3 para PWM, y 3 para comunicacion (enable, clock, data) ;-)
Los LEDs RGB se consiguen a U$S 1 aproximadamente, y un pic 12F sale como U$S 10.
Que les parece??
« Última modificación: 04 de Febrero de 2012, 12:58:41 por gera »

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein