Controlar leds con datos en serie.

Antes que nada les comento lo que quiero hacer. Seguramente habrán visto los cubos de leds que hay en muchos videos de youtube. Como me gusta mucho trabajar con el puerto paralelo tenía pensado hacer uno de esos.

Como por el puerto puedo tener solo 12 salidas, necesito de alguna manera multiplicarlas, o bien hacer algo más inteligente. Lo primero que pensé fue usar demultiplexores es cascada, pero lo descarté rápidamente porque son muchísimos (quiero hacer un cubo como mínimo de 7x7x7).

Entonces pensé en usar algún integrado que me permita controlar una gran cantidad de salidas de acuerdo a pulsos en serie que le mande a la entrada. Mi primer problema es que jamás use nada de esto y en las hojas de datos hay mucha terminología y notación que se me escapa.

¿Alguna ayuda?
Muchas gracias.
 
Pensando muy ligeramente, se me ocurriría hacer 7 capas de 7x7. Cada capa estaría formada por 7 hileras y 7 filas donde cada hilera comparte los ánodos y cada fila comparte los cátodos (por ejemplo). Luego encendería una fila de a una capa a la vez y, haciendo barridos muy rápidos, el ojo no lo notaría y parecería que todas los leds encienden simultaneamente.
De esa manera podrías controlar todo el cubo con 7+7+7=21 líneas de control. Suponiendo que con 30 barridos por segundo es suficiente, deberías encender una fila distinta cada 1/(7*7*30)s=680us, lo cual significa transmitir a una tasa de 14700bps por el puerto serie.
Parece perfectamente realizable...

De todas maneras lo tiré casi sin pensarlo, quizás haya algún problema que no haya visto y, seguramente, exista alguna mejor manera, jeje.

PD: no los había visto, están muy lindos, dan ganas de armar uno!
PD2: olvidé decir que utilizaría un microcontrolador (un PIC, por ejemplo) para transmitir los datos desde el puerto serie de la PC y controlar el cubo.
 
Última edición:
Muchas gracias por tu ayuda Sigma.

Quiero que se entienda bien que lo que quiero hacer es con puerto paralelo SIN PICS. Es decir, mi problema pasa por convertir 12 salidas en las que necesite.

Si bien habia pensado algo similar a lo que decís, se me presentan dos problemas: el primer y más sencillo es transformar 12 salidas en 21 salidas (como decias vos); y el segundo es conmutar, es decir, controlar una capa o la otra.

Gracias por las sugerencias.
 
Ah, el problema principal es multiplexar... Bueno, aprovechando las 12 salidas de la PC se me ocurren dos posibilidades:
1. Con 16 latches de 8 bits y un demux de 4 bits te pueden dar 128 salidas. De las 12 salidas, 8 se conectan en paralelo con todos los inputs de los latches y las otras 4 se conectan a las 4 entradas del demux. Las 16 salidas del demux se deberían conectar a los CS de cada latch.
2. Con 10 registros de desplazamiento. De las 12 salidas de la PC conectás 10 a la entrada de los 10 registros, 1 salida para el clock y otra para activar los latches internos de los registros. Esto te daría 40 salidas si los registros son de 4 bits; 80 salidas si son de 8 bits (74HC595, por ejemplo).

El tema de las capas, se me ocurre que habría que usar un transistor por cada fila en cada capa, o sea 49 transistores. No es muy bonita la solución. Sino, ya que multiplexando tenés muchas salidas, se puede conectar de la siguiente manera:

1. Los cátodos de cada capa se conectan todos juntos, quedando 7 cátodos (7 líneas). Con ésto habilitás o deshabilitás cada capa completa por separado.
2. Los ánodos de cada columna de leds, todos juntos. Es decir, cada led comparte ánodo con el que tiene arriba y/o abajo. Con esto te quedarían 49 ánodos (49 líneas).

En total necesitás 49+7=56 líneas para controlar todo el cubo. Con la solución 1 de arriba necesitás 7 latches de 8 bits c/u y un demux de 3 bits y controlás todo con 8+3=11 líneas del puerto paralelo.

Me parece que eso tiene mejor pinta, no?

Saludos...
 
Última edición:
Podrias usar shifters (74HC595) para obtener los puertos que necesitas.

Alternativas para un cubo de 7x7x7:

1- 7^3=343 => generar 343 puertos usando 43 shifters. Alternativa cara y poco util de hacer :D

2- 7^2=49 + 7 puerto multiplexados en el tiempo => generar 49 puertos usando 7 shifter y 1 shifter mas para los puertos multiplexado en el tiempo. Sigue siendo una alternativa cara y poco util de hacer (pero estamos mejor que antes :D ).

3- 7 puertos + 7 puertos multiplexados en el tiempo + 7 puertos multiplexados en el tiempo, se necesitarian 3 shifters, seria la opcion mas barata y facil de hacer.

De la opcion 3, el funcionamiento seria este:

- Matriz de 7x7multiplexados (2D): los 7 puertos controlan las filas a encender en la matriz, y los otros 7 puertos van rotando con el tiempo habilitando las distintas columnas (obviamente cambiando los estados de sus filas correspondientes) hasta llegar a la ultima y volver a empezar.

- Ahora agrega el "3D", los otros 7 puertos multiplexan en el tiempo las 7 matrices en 2D que deberan habilitar con el tiempo, rotando de la misma forma que lo harian los puertos de las columnas.

Si hasta aca no te perdiste, solo faltaria ver un pequeño detalle, ¿el tiempo del puerto paralelo dara para generar semejante multiplexacion en el tiempo :confused: ?

Partiendo que el ojo humano tiene un tiempo de persistencia visual de 20mSeg (50Hz) a 33mSeg (30Hz), tus tiempos de multiplexacion deberan ser estos:

- Multiplexacion de matrices: entre 2,8mSeg a 4,7mSeg.
- Multiplexacion en columnas: 400uSeg a 670uSeg

Tu puerto paralelo debera ser capaz de al menos ir a 1500kbit/Seg como minimo y no estoy teniendo en cuenta los clocks de los shifters.

¿Podra ir el puerto paralelo a esa velocidad?
 
Bueno, explico un poco el punto 1 (7 latches y 1 demux de 16 líneas), que comenté más arriba. No termino de entender cómo funciona el multiplexado que explica cosmefulanito04, así que sigo con el que propuse anteriormente.

Por un lado se necesitan 7 latches; son unos integrados que memorizan el dato en su entrada al cambiar de estado una de las patas, y lo retienen en su salida. El 74HCT373 (http://www.datasheetcatalog.com/datasheets_pdf/7/4/H/C/74HCT373.shtml) tiene 8 entradas (Dn) y 8 salidas (Qn). Tiene además un OE (Ouput Enable) que se debe mantener en 0v para que las salidas estén activas y un LE (Latch Enable) que mientras esté a 0v copia en las salidas lo que tiene en la entrada; luego, cuando se lo pone a 5v simplemente mantiene los Qn sin importar lo que tienen los Dn.

Luego el demux (74HC154 - http://www.datasheetcatalog.com/datasheets_pdf/7/4/H/C/74HC154BQ.shtml) tiene dos patas de enable, E0 y E1, que deben mantenerse en 0v. Tiene 4 líneas de entrada A0, A1, A2 y A3 que, según el valor binario que tengan, habilitan una de las 16 líneas de salida (Yn). Por ejemplo, si las An se ponen en 0011 (3 en binario), la línea Y2 se pone en estado low (0v) y el resto en high (5v). Si las An se ponen en 0000, la línea Y0 se pone en low y el resto en high. Es importante notar que se activan en low!!

Bien, con estos integrados se puede hacer todo. Primero se conectan 7 líneas del puerto paralelo a 7 líneas de los latches (D0-D6, la D7 la dejamos a tierra y la salida Q7 no va a ser usada, se deja sin conexión). Los D0 de los 7 latches se conectan todos juntos, los D1 juntos, los D2 juntos, y así los 7.
Las patas de salida de los latches (Q0-Q6, que son 7x7=49 patas en total) se conectan a los 49 terminales positivos de las 49 columnas verticales de leds, como dijimos arriba.
Luego se conectan 4 líneas del puerto paralelo a las 4 entradas (A0-A3) del demux. De las 16 líneas de salida del demux vamos a usar 14 (Y0-Y6 y Y7-Y13). Las primeras 7 se conectan a las 7 entradas LE de los latchs; con esto vamos a elegir qué latch memoriza en cada momento (una fila a la vez). Las otras 7 se conectan a los 7 terminales negativos que quedaron de las 7 capas de leds.

De esta manera usamos 11 líneas del puerto paralelo y direccionamos todos los leds, de a una fila de cada capa por vez.

Obviamente un diagrama dice más que mil palabras. Si no se termina de entender bien, en un ratito posteo un dibujito... es que no tengo nada con qué hacerlo prolijo! Pero vamos a ver qué sale, jeje.

Espero que sirva. Saludos...

-------------------------------------------------
-------------------------------------------------
-------------------------------------------------

Bueno, he aquí el diagrama prometido. No sé si aclara u oscurece, jeje, esperemos que aclare. Vale aclarar que, siguiendo la idea y extendiendola, utilizando la línea del puerto paralelo que sobra se puede hacer un cubo de 8x8x8.

También vale aclarar que la opción de los registros de desplazamiento NO incluía el uso de ningún PIC.

Quedan algunos temas por verse y tienen que ver con la temporización, la luminosidad lograda de los leds y la corriente consumida. La corriente que puede entregar cada pata de los latches es de 25mA, según especificación de la familia lógica, por lo que cada led no va a poder ser alimentado con más de esa corriente. Por otro lado, todos los leds de una capa (7x7=49) se concentran en una sola pata del demux, la cual puede soportar como máximo 25mA, por lo que, dividido en los 49 leds, cada uno podrá alimentarse por un máximo de 500uA. Para eso habrá que intercalar una resistencia de 4.7k a cada una de las salidas de los latches (49 resistencias), según el led utilizado.
Bien, esto no es todo, sino que además se alimenta de a una capa de leds por vez, por lo que van a recibir un ciclo útil de, como máximo, un 15%.

Estas dos cuestiones bajan mucho el brillo de los leds. Para mejorar esto yo intercalaría 7 transistores entre las salidas de los demux y las capas de led, de manera que cada led pueda ser alimentado por 25mA. Para esto cada transistor debe resistir una corriente de 1.23A... creo que un TIP31C andaría bien. Así, las 49 resistencias de 4.7k podrían ser removidas y los leds brillarían mucho más. No sé qué pasaría si se arma sin transistores y sin resistencias a la vez, pero no brillarían tanto como con los transistores, eso seguro.

Bueno, creo que no me queda mucho por decir más que ojalá que lo armes, que ande y que subas un video para que todos veamos el resultado!!!

Cualquier consulta, espero poder seguir ayudando. Saludos...

PD: Olvidé decir que, en el diagrama, los terminales indicados con un circulito blanco son los que se conectan a las salidas del puerto paralelo.
 

Adjuntos

  • cuboLED.jpg
    cuboLED.jpg
    73.3 KB · Visitas: 58
Última edición:
Muchas gracias muchachos!
Sigma, hoy justamente estuve varias horas buscando y tratando de entender como funciona todo esto, y creo que lo logré. Ahora me queda ponerme a probar.

Voy a empezar con un cubo de 4x4x4 para ver que resulta. Cuando lo termine subo un video y se los muestro.

Si me surge alguna duda en el medio les pregunto. Cualquier aporte o sugerencia siempre es bienvenida.

Saludos!
Ω
 
Espero que el 4x4 vaya bien... aprovecho esta discusión para preguntarles algo relacionado con el puerto serie. Tengo un problema en el cual necesito transmitir los datos de un puerto serial de un instrumento de medición de temperatura hacia 2 PC´s, es decir las mismas tramas y simultaneamente a las dos PC´s. Estaba pensando en colocar buffers de alta velocidad de tal manera que el puerto serie este en "paralelo" a ambas PC. Un saludo y espero sus comentarios.

Respecto al mensaje anterior envío un esquema para un posible circuito.
Espero sus comentarios.
Un saludo

https://www.forosdeelectronica.com/attachment.php?attachmentid=52494&d=1303981769
 
Última edición:
Atrás
Arriba