Toda esa tremenda complejidad, se queda en nada, si usas leds digitales, solo necesitas el micro y los leds, eso es todo, ni chips controladores, ni transistores, ni mosfet.
Yo antes también usaba chips de ese tipo, en concreto el TLC5940, pero ya hace tiempo que rediseñé todas mis placas, y son unas cuantas, para usar leds digitales, lo simples que se me han quedado todos los diseños es espectacular, además con los leds digitales puedes controlar individualmente cada led tanto su brillo como su color (más de 16 millones de colores), sin necesidad de refrescar constantemente todos los leds, salvo que alguno cambie su estado.
Lo interesante es que no hace falta ninguna electrónica de potencia, y todo se controla con un solo hilo para datos, más masa y positivo. Si necesitas añadir más leds, simplemente los conectas en cadena al último y a funcionar.
Supongo que el problema será la dificultad para conseguir este tipo de leds en Argentina, creo que ya lo comentaste una vez, pero si los puedes conseguir vale la pena, yo hace ya tiempo que dejé de usar la configuración típica de TLC + transistores de potencia, para controlar leds en matriz, y te ahorras mucho tiempo en los diseños, ensamblaje y programación.
Una pregunta que me causa curiosidad y viene de mi ignorancia, el otro dia estaba viendo estos integrados TLC, y me encontre con que exactamente eran 8 canales RGB o 16 canales on/off o habia mas y me ponia a pensar la cantidad inmensa de esos necesario para hacer algo, ahora veo y creo que lo multiplexa linea a linea. No baja demasiado el brillo del led ?, Ya que el controlador lo hace a traves de un PWM + el barrido de filas debe quedar bajito :/.
Y a los leds digitales te referis a estos ?
http://www.mikrocontroller.net/attachment/180459/WS2812B_preliminary.pdf
Son 24 bits por led en el caso ese , en esos 24 bits estan los 8bit de cada color.
Para tus 256 leds = 6144 bits
7.68mS por fila ( 6144 bits / 800000 bits/s ). Taza de refrezco (1/7.68mS ) = 130.2Hz por fila
o
0.12s (7.68mS * 16) todo el cartel. Taza de refrezco (1/0.12s) 8.1Hz ?
Ahora si se quema un solo led te deja toda la linea sin leds ? xD
Ahora si se quema un solo led te deja toda la linea sin leds ? xD
ese es el talon de aquiles, se quema un chip y fuiste, a no ser que sean chips de marca no sé si los pondría en un producto final.
Abría que ver que resultados les dio a Planeta99999999999 y en que ambiente los usó....
Saludos!
A mi me han funcionado bien, no he tenido ningún problema, solo es recomendable conectar una resistencia de 1K entre el PIC y el primer led, y colocar los condensadores de desacoplo, al menos uno cada 3-4 leds, no es necesario conectar uno por led, salvo que estuvieran muy alejados entre si.
A mi me han funcionado bien, no he tenido ningún problema, solo es recomendable conectar una resistencia de 1K entre el PIC y el primer led, y colocar los condensadores de desacoplo, al menos uno cada 3-4 leds, no es necesario conectar uno por led, salvo que estuvieran muy alejados entre si.
Y con el tema del resfrezco de los leds ? es aceptable ?
Al menos veo que con el micro que tengo si uso las 4 salidas de cada uno de los 4 modulos SPI, estaria refrescandolos a 130Hz el tablero, pero si voy a un solo SPI de los que tienen 1 salida ya cae a 8.1Hz :/
A mi me han funcionado bien, no he tenido ningún problema, solo es recomendable conectar una resistencia de 1K entre el PIC y el primer led, y colocar los condensadores de desacoplo, al menos uno cada 3-4 leds, no es necesario conectar uno por led, salvo que estuvieran muy alejados entre si.
Y con el tema del resfrezco de los leds ? es aceptable ?
Al menos veo que con el micro que tengo si uso las 4 salidas de cada uno de los 4 modulos SPI, estaria refrescandolos a 130Hz el tablero, pero si voy a un solo SPI de los que tienen 1 salida ya cae a 8.1Hz :/
No se bien como hace para sacar diferentes datos por los 4 pines del SPI... abría que ver qué se puede hacer con pines comunes. Porque fijate que no son datos de SPI (clock + dato) son datos series de 1 wire, habria que ver si el micro se puede configurar para tener varias salidas con ese protocolo...
Quien sabe planeta como los ha manejado y que cantidad ha puesto...
Saludos!
Si entiendo. Lo que no me queda claro por que todavia no me puse a jugar nunca con DMA es si vos, lees la SD esa lectura queda en tu RAM y de alli va cargando el DMA. Al menos creo que asi funcionaria. DMA vs yo , no nos llevamos muy bien xD por que nunca me maneje con eso :/
Si vi que algunos hacen lo contrario, por ejemplo del ADC a una posicion de memoria.
Depende del micro. Hay micros que permite DMA entre periféricos, sin pasar por RAM (LPC1769, um10360.pdf, p588, s 34.1.1)
Saludos!
Depende del micro. Hay micros que permite DMA entre periféricos, sin pasar por RAM (LPC1769, um10360.pdf, p588, s 34.1.1)
Saludos!
Vi el datasheet, lo que si:
The DMA controller allows peripheral-to memory, memory-to-peripheral, and memory-to-memory transactions.
el peripheral-to peripheral , imagino que lo hace peripheral-to memory y memory-to-peripheral como en un solo paso :P
Una pregunta que me causa curiosidad y viene de mi ignorancia, el otro dia estaba viendo estos integrados TLC, y me encontre con que exactamente eran 8 canales RGB o 16 canales on/off o habia mas y me ponia a pensar la cantidad inmensa de esos necesario para hacer algo, ahora veo y creo que lo multiplexa linea a linea. No baja demasiado el brillo del led ?, Ya que el controlador lo hace a traves de un PWM + el barrido de filas debe quedar bajito :/.
Y a los leds digitales te referis a estos ?
http://www.mikrocontroller.net/attachment/180459/WS2812B_preliminary.pdf
Esa parte no la pense demaciado aún. Lo del latch lo pense por que al dar energía no sé si el estado de los registros de deslpazamiento estan bien determinados o pueden tomar cualquier valor. Si al arrancar son siempre 0, entonces podría dejar activada LATCH. Tambien podría dejarla activada y lo más rápido posible llenar de 0's los registros. Luego meto un 1 en data, doy un clk y ahi ya solo manejo la señal de clk 16 veces... El LATCH me da un poco más de seguridad al manejarlo yo.
Toda duda, crítica y aporte es bien venida, ya que es el primer cartel que diseño.
Saludos!
Por eso se "castiga"al LED y se usa un voltaje superior al que el LED normalmente soportaría. Yo uso 12V con LEDs que son de 2V. Si el refresco es rápido, y se tiene en cuenta algunas medidas de seguridad (WatchDog Timer, etc) para que no quede nunca encendido siempre un LED, podés castigarlo ya que el LED enciende por sólo un breve instante de tiempo, y luego tiene tiempo de enfriarse durante el encendido de las otras filas. Esto se puede realizar especialmente cuando el controlador es por corriente, como los TLC.
Como el cartel es de 2.5 mts y la señal de del SPI rondará los 1.5MHz, .... (...)
No logro entender por qué el SPI rondará los 1.5 MHz. Según las especificaciones de la LPC11U6x: "SPI master (in SPI mode) Tcy(clk) when only transmitting = 40 ns". Eso nos daria un SPI de 25 MHz, ¿no? Aquí hay algo que se me escapa.
Saludos!
Hola! Vengo leyendo con mucha atención este post.
Por eso se "castiga"al LED y se usa un voltaje superior al que el LED normalmente soportaría. Yo uso 12V con LEDs que son de 2V. Si el refresco es rápido, y se tiene en cuenta algunas medidas de seguridad (WatchDog Timer, etc) para que no quede nunca encendido siempre un LED, podés castigarlo ya que el LED enciende por sólo un breve instante de tiempo, y luego tiene tiempo de enfriarse durante el encendido de las otras filas. Esto se puede realizar especialmente cuando el controlador es por corriente, como los TLC.
La pregunta que me surge es, ¿cómo saber en cuánto se incrementa la luminosidad del led aplicando más tensión? En las hojas de datos de los leds (al menos los que he mirado) no viene cómo calcularlo...
ahora, no logro imaginarme la mejor forma de implementar esta parte del proyecto....
Saludos!
ahora, no logro imaginarme la mejor forma de implementar esta parte del proyecto....
Saludos!
Un zócalo para tarjetas micro SD.
A mi gusto iria con USB y estaria en la misma que vos. Todo depende a donde apuntas
Si es para vender creo que seria mejor por USB, conectar un pendrive que cargue el programa y listo. Que sea simple para el cliente.
Las veo media fragiles a las SD xD y mas una micro SD donde cada ves que quieras cambiar el programa tenes que sacarla y volverla a poner(demasiado chiquitas para tanto manejo).
Pero bueno eso siguiendo tu logica de cargarlo a una EEPROM, pero si fueras a cargarlo directamente desde la SD entonces no queda otra xD.
ahora, no logro imaginarme la mejor forma de implementar esta parte del proyecto....
Saludos!
Un zócalo para tarjetas micro SD.
aunque el archivo a levantar/leer pese 200kb?
sds!
mmm... para USB y ese micro veo poca info, esto capaz sirva: http://www.lpcware.com/content/nxpfile/lpc-usb-serial-io-library.
Nosotros utilizamos los de ST, y en esos hay más info. Además ChibiOS los tiene portados y es más sencillo encarar alguna aplicación :mrgreen:
Saludos.
Hola! Lo mas sencillo es colocar una EEPROM que mediante la conexión USB (puede ser CDC o HID) y una aplicación de PC se pueda configurar el mensaje y los efectos, y luego almacenarlo en la memoria para su posterior utilización.
USB no es como una UART, que tenes interrupción para capturar los datos, generalmente se detecta cuando se conecta el equipo a la PC, y a partir de ahí se detecta cuando hay datos para leer y trabajar con ellos. USB device generalmente no resulta complicado de resolver.
Y ya que estas en fase de diseño podes usar una memoria SPI, así también de forma paralela agregas el zócalo para una uSD para una posible utilización. Generalmente es más sencillo usar uSD que USB Host, por ejemplo.
La uSD termina siendo muy útil, como dice planeta999, pero yo no la usaría en un ambiente industrial. Pero como la misma placa la podes utilizar para otras cosas lo agregaría. Sirve para las configuraciones y también puede servir para actualizar el firmware. Para resolver la implementación de archivos tienes FatFs by ChaN (http://elm-chan.org/fsw/ff/00index_e.html), solo tienes que implementar algunas funciones especificas de acceso al hardware que seguramente puedes encontrar algo hecho para el micro en particular que uses.
Saludos
La EEPROM donde se almacenará el texto y la configuracion a mostrar aun estoy en duda, pero evidentemente lo ideal sería una SPI en el mismo bus que la uSD, no? en ese caso, se elijen distintos pines GPIO para cada CS de cada dispositivo en el bus, verdad?
Gente, me parece a mi o entender el USB aunque sea CDC es para meses de lectura?
Si es para cargar unos pocos datos de vez en cuando (un par de lineas de texto que va a mostrar el cartel), también puedes usar el ESP8266 por WIFI, y con un App en el móvil puedes cargar el texto, es una opción más chula todavía, seguro que a tu cliente le gusta más, sobre todo si el cartel va a estar ubicado en una zona de difícil acceso o acceso incómodo.
El ESP8266, se conecta al PIC por la UART, y se gestiona con comandos AT, no creo que sea complicado hacer algo en Java bajo Android para el móvil, puede incluso que ya exista algún aplicativo estandar para cosas básicas o algún generador de App que te cree el programa sin saber Java (algo creo haber visto).
Aquí lo que llevo recopilado y probado del ESP8266 http://www.todopic.com.ar/foros/index.php?topic=43690.0
la verdad que ese módulo es una joyita! el problema es que vivo en Argentina.... conseguir ese módulo a un precio razonable me demora 3 meses :(... igual voy a hacer un intento de conseguir algunos... quizá si nos ponemos de acuerdo varios en argentina podemos traerlos por fedex a algun curier.... ya veré....
Saudos!
la verdad que ese módulo es una joyita! el problema es que vivo en Argentina.... conseguir ese módulo a un precio razonable me demora 3 meses :(... igual voy a hacer un intento de conseguir algunos... quizá si nos ponemos de acuerdo varios en argentina podemos traerlos por fedex a algun curier.... ya veré....
Saudos!
Fedex te llegar rapido pero cuesta el envio y pasa por aduana si o si por que ellos presentan todos los papeles. Si el origen es chino entonces puede que pase como si nada pero tardaria 1 mes. Al menos es lo que me tarda lo que compro a "china" y marcado como Gift
Hola, generalmente no es complicado sacar andando USB device, como mucho en un día tendría que salir. Salvo que haya muy poca información, pero siempre hay un ejemplito. Son cosas que hay que tener en cuenta cuando se elige un microcontrolador, así son menores los dolores de cabeza después ;-)
Saludos
while (1) {
/* Check if host has connected and opened the VCOM port */
if ((vcom_connected() != 0) && (prompt == 0)) {
vcom_write((unsigned char *)"Hello World!!\r\n", 15);
prompt = 1;
}
/* If VCOM port is opened echo whatever we receive back to host. */
if (prompt) {
rdCnt = vcom_bread(&g_rxBuff[0], 256);
if (rdCnt) {
vcom_write(&g_rxBuff[0], rdCnt);
}
}
/* Sleep until next IRQ happens */
__WFI();
}
void USB_IRQHandler(void)
{
uint32_t *addr = (uint32_t *) LPC_USB->EPLISTSTART;
/* WORKAROUND for artf32289 ROM driver BUG:
As part of USB specification the device should respond
with STALL condition for any unsupported setup packet. The host will send
new setup packet/request on seeing STALL condition for EP0 instead of sending
a clear STALL request. Current driver in ROM doesn't clear the STALL
condition on new setup packet which should be fixed.
*/
if ( LPC_USB->DEVCMDSTAT & _BIT(8) ) { /* if setup packet is received */
addr[0] &= ~(_BIT(29)); /* clear EP0_OUT stall */
addr[2] &= ~(_BIT(29)); /* clear EP0_IN stall */
}
USBD_API->hw->ISR(g_hUsb);
}
.
Ya hay hoy en día soluciones infinitamente mejores y mucho más baratas para hacer carteles, que diseñarlo uno mismo desde cero. Yo en concreto ahora mismo estoy trabajando con estos paneles chinos de 64x32 RGB. Incorporan TODA la electrónica para gestionar el panel con señales que alimentan un shift register para las columnas y un código binario de 4 bits para las filas. Son sencillisimos de usar con cualquier microcontrolador.
Hasta incluyen el bastidor totalmente mecanizado para usar tornillería estandar de métrica M4 para anclarlo donde quieras. Tienen un conector de datos de entrada y otro de salida, para poder encadenar varios paneles y montar un cartel de la resolución y tamaño que quieras.
Este en concreto es de paso 2.5 y cuesta tan solo 23 dólares, una auténtica ganga, también los tienes de muchos otros pasos (P3, P6, P10, etc...) y de 64x64 pixels. Todos estos módulos se usan para montar pantallones gigantes de TV para los estadios y eventos varios, y los tienes en los chinos a precio de baratija, además listos para usar, sin necesidad de ensuciarte las manos. Seguro que cualquier cosa que puedas montar por ti mismo, te va a salir mucho más cara.
(http://i1322.photobucket.com/albums/u573/planeta9999/LED_panel_chino_zpsonaknall.jpg)
mi idea es fabricar ese tipo de modulos ;-)
Por cierto, la solucion del cartel que estoy diseñando, estoy seguro que es mucho mejor que la solucion implementada en ese módulo chino.
en cuanto a que sea más caro podemos discutirlo un buen rato, por lo menos acá en Argentina....
Saludos!
me pasarías el link de ese módulo.
PD: nunca dije que podía fabricar ese mismo módulo a ese mismo precio.
me pasarías el link de ese módulo.
PD: nunca dije que podía fabricar ese mismo módulo a ese mismo precio.
Jejeje, era una ironía, dudo que incluso puedas fabricarlo al doble o incluso al triple de ese precio. Ni siquiera en España se podría fabricar al triple de lo que piden los chinos. Estamos hablando de un panel Led RGB de 2048 leds de paso 2.5, más toda la electrónica de control, más un bastidor de plástico rígido mecanizado con tornillería, listo para ensamblar en rack con otros paneles para montar pantallas gigantes de TV.
En Aliexpress tienes infinidad de distribuidores chinos, que venden paneles de este tipo con varios pasos desde P2.5 hasta P10 ó más. También puedes encontrar información detallada de como controlarlos en la web de Adafruit, seguramente ellos importan de China los paneles que venden, lo bueno es que dan muchisima más información técnica que los chinos, en ese aspecto los chinos son muy parcos, apenas te cuentan nada, solo te dan el pinout del conector y búscate la vida.
Afortunadamente, para cualquiera que conozca como funcionan los paneles led, se ve de inmediato como están controlados por un registro de desplazamiento para las columnas y con un código binario de 4 bits para seleccionar la fila, aunque tienen un particularidad muy curiosa, las lineas se barren de DOS en DOS.
Si me pasas un link del módulo que usas te digo los defectos que tiene vs el diseño que estoy tratando de implementar. Hay muchos modelos y de muy diversa funcionalidad, hay un montón de
cuestiones que desconoces de los paneles led evidentemente.
Eso de barrer de a dos filas, no es una curiosidad es simplemente que con 32 filas tendrías una multiplexación 1/32 que con los driver berretas que traen no verías nada.
Le tenes que ingresar de a dos datos para conseguir multiplexación 1/16 o por eso 4 líneas para direccionar 16 filas.. Con 4 bits no podes direccionar 32 filas...
Recuerdo que tu primera respuesta en este proyecto fue que se podía resolver lo que estaba haciendo con led digitales.... Otro error...
Hola leo,
¿Cuantos colores queres por Led? No me quedo claro si son 8 colores por salida o por led RGB.
Hola Leo,
Lamentablemente tus cálculos son correctos. Con esas características de panel necesitarías un clock de 125 Mhz. Muy por encima del máximo de 33mhz.
Hmm...
Ese Datasheet tiene problemas de coherencia.
En el punto 3.6.2 te presenta al TLC5958 como un dispositivo diseñado para displays multiplexados, y te muestra los dos posibles modos ES PWM asociados: (8+8) y (9+7):
"TLC5958 is designed mainly for multiplexed display system. It uses an innovative Multiplexed ES PWM method to improve the visual refresh rate while maintain the best grayscale performance."
Luego, en la descripción de ambos modos dice:
"This is a good method for static display system, but not good for multiplexed (dynamic) display system. If one finished all the XXX segments of one scan line, then change to display another scan line, the refresh rate will be very low."
Lo que va completamente en contra de lo enunciado inicialmente. Describen ambos modos ES PWM como "malos" para displays multiplexados.
Más allá de eso, lo bueno del integrado es la capacidad nativa de trabajar multiplexando y tener memoria propia para almacenar todos los valores, incluso con double buffering. Lo malo es que como bien calcula el ponja en en el último link que pusiste, los Hertz son muy bajos, aún usando el modo 8 + 6 (no llega a 60Hz). La clara limitante es la velocidad máxima del GCLK. Aunque en los displays de este tipo 33Mhz es el valor más común (al menos lo era, no sé ahora). Si querés más Hertz, vas a tener que sacrificar grises, o bien agregar más integrados (aumentando el costo del producto).
Tengo por costumbre desactivar el "remove dead copper" porque nunca supe si era mejor dejarlo o sacarlo. hay algún motivo para eliminarlo?
tiene muy buena pinta, ¿han encajado bien los conectores? ¿o has tenido algún problema por las torsiones por el calor?
tengo ganas de verla en funcionando, ¿lo has soldado tu al horno? ¿o lo has mandando montar?
un saludo
Estoy con poco tiempo de escritorio así que las pruebas tendrán que esperar 1 semana más
((:-)) ((:-)) muy bien leonardo.
parece que esto va para delante, por cierto he visto que no algunas veces no se encienden algunos colores como por ejemplo en el minuto 0,17 que hay un par de led que no se encienden en azul por ejemplo.
¿esto son los problemas de hardware a los que te refieres?
¿cuanto consume?
un saludo
Ahora viene un poco de desafio de software. Estoy pensando en hacer un buffer de video en la RAM y luego usando el SPI y DMA ir scando los datos.
Como que me perdi completamente. Estuve leyendo y por mas que lo lei despacio a los ultimos 2 post me perdi feo.
Hasta ahora lo que entendi fue:
- Crear un buffer de [16][98] El cual tenga todos los bits incorporados. Asi con el DMA enviarlo por el SPI. Y da justo el tamaño en bits.
- Al tema de las filas las activas con 2 74HC138, 3-to-8 decoder Necesitas 16 filas, asi que son 2, o tal ves estes usando uno solo y activas 2 filas a las ves.
- Las filas estan activadas por un temporizador, el cual dispararia el DMA para que envie todos los datos, tal ves con acceso a una memoria Externa. Sino son 1.6Kb de unicamente el buffer de video. ( Puede entrar tranquilamente tal ves en el micro y no necesitar esa memoria externa ).
Lo que no me quedo claro es... que intentas hacer con el buffer, queres cambiarlo "on-the-fly"? Creo haber leido que decias que eran 2 textos nomas. Queres generarlos cuando comienza el micro? o va a estar guardado en algun lugar? Solo es texto ? o imagen ?.
Por todo esto me encuentro muy perdido xD.
Si Eso pensaba yo, la libreria grafica que hagas debe hacer ese "buffer" de [16][96]. Seria lo mas facil de crear, pero luego incorporarle el 0 a todo ese array es EL dolor de cabeza. Yo no entiendo al tipo que se le ocurrio hacerlo de esa forma... de usar 49 bits siendo que un SPI envia de a 8. Entonces tenes que crear una funcion que transforme 48 bytes en 49bytes (2 de estos y tenes tus 98 bytes) Y esa parte es el dolor de cabeza y mas consumidor de tiempo del core. Obviamente todos punteros :P Por ahi estoy pensando en comenzar de atras, es decir desde el byte 49, un contador el cual su AND va a servir para ambos bytes trabajados, el que esta y el que le sigue,. Fiero fiero muy fiero por que feo es poco, muchos AND :P, Pero va a ser un loop pequeño, eso es lo bueno :P
oye leonardo y ¿si el color se lo pones en una matriz de 3 dimensiones? la 3 dimensión seria el color.
un saludo
En principio ayudaría un poco poder hacer una estructura de datos de 13 bytes que me permita hacer desplazamientos de bits entre ellos. es posible?
Muchas gracias leonardo, no creas que estoy intentando sacar fallos ni nada de eso :D :D solo intento comprenderlo para aprender.Tendrías para entreterte mucho buscando fallos por que esta lleno de fallos. Lo pude hacer andar a fuerza de software, porque el hardware me quedo bastante mal. Mas que nada un conector invertido y un error con la alimentacion del drive de TI.
PD: no me ha llegado nada al correo.
Mas que nada un conector invertido y un error con la alimentacion del drive de TI.
haha no no me corre prisa, es que pensaba que ya lo habías enviado y no se si tendrás el correo que uso ahora por que sigue sin llegarme nada :D :D
no te preocupes pasamelo cuando puedas no hay problema, el correo lo he comprobado y es el que tengo el perfil, si tiene algun adjunto lo mismo tarda bastante.CitarMas que nada un conector invertido y un error con la alimentacion del drive de TI.
Los tipicos fallos tontos que tenemos todos y nos da ganas de tirarnos de los pelos :D :D
un saludo y gracias.
Si no colocas el zener y dejas las resistencias de 100 pasarían unos 5/100 = 50mA (despreciando la caida del zener) eso quiere decir que las resistencias deberian de ser de 1/2 watios para que vayan sobradas (0,25W de consumo) si queremos bajar la intensidad debemos subir la resistencias a 250 que daria una intensidad de 20mA y una potencia consumida de 0,1W que esta demasiado cerca del estándar 1/8 Watio, así que tienes dos opciones, o colocar resistencia de 250oh 1/4 de watio (no es una estandar asi que sera 255) o poner un Zener de 3V y resistencias de 100oh lo cual daría la misma intensidad que con la de 250 ohm (el efecto fantasma se reduciría de la misma manera)