viernes, 18 de mayo de 2012

Técnica Charlieplexing para controlar Múltiples LEDs con pocos pines.

¿Que es Charlieplexing?

Charlieplexing es una técnica propuesta a principios de 1995 por Charlie Allen de Maxim Integrated Products, para el control de una pantalla multiplexada en la que los pines de I/O, son relativamente escasos. Un microcontrolador se utiliza para accionar una serie de LEDs. El método utiliza las capacidades de lógica tri-estado de microcontroladores con el fin de ganar eficiencia sobre multiplexación tradicional. A pesar de que es más eficiente en el uso de I/O, hay cuestiones que hacen que sea más complicado para diseñar y hacer que sea imposible su implantación para pantallas muy grandes. debido a el actual ciclo de trabajo y las tensiones directas de los LEDs.

Multiplexación tradicional.

La multiplexación de leds es muy diferente de multiplexación utilizada en la transmisión de datos, aunque tiene los mismos principios básicos. En multiplexación de display, las líneas de datos de las pantallas están conectadas entre sí en paralelo a un bus común en el microcontrolador. Luego, las pantallas se encienden y se dirigen de forma individual. Esto le permite usar un menor número de pines I/O de los que normalmente se utilizarían para controlar el mismo número de display directamente.



Cuando se utiliza charlieplexing, $n$ pines de control puede manejar $n$ dígitos con $n-1$ segmentos. Cuando se simplifica, $n$ pines pueden controlar $n^2-n$ segmentos o LEDs. La multiplexación tradicional necesita muchos más pines para controlar el mismo número de LEDs; $2n$ pines debe ser utilizados para manejar $n^2$ LEDs (aunque se puede usar un chip decodificador de 1 en $m$ para reducir el número de pines I/O del microcontrolador $ n+log_2 n$).

Si el número de LEDs es conocido, entonces la ecuación anterior se puede trabajar hacia atrás para determinar el número de pines requeridos, es decir, los $L$ LEDs puede ser manejados por $n$ pines. 
$$Pines = \frac{1+\sqrt{1+4L}}{2}$$
Si en un numero no entero se utilizara el entero superior mas cercano.
LEDs02612203042567290$n^2-n$
PINES12345678910$n$


Control por complemento

Charlieplexing, en su forma más simple, funciona con una matriz de pares complementarios de los LEDs. La matriz charlieplexed más simple posible sería el siguiente:



Mediante la aplicación de una carga positiva al pin 1 y puesta a tierra el pin 2, el LED 1 se encenderá. Como la corriente no puede fluir a través de LEDs en polarización inversa, 2 LED permanecerá apagado. Si las cargas en los polos 1 y 2 se invierten, el LED 2 se enciende y el LED 1 se apagará.

La técnica Charlieplexing en realidad se utiliza en una matriz más grande que sólo con dos pines, debido a que dos LEDs pueden ser manejados por dos pines sin ningún tipo de conexiones en forma de matriz, y sin siquiera usar el modo de tri-estado. Sin embargo, el circuito de 2 pines sirve como un ejemplo simple para mostrar los conceptos básicos antes de pasar a los grandes circuitos donde, charlieplexing en realidad, muestra una ventaja evidente.

Ampliación: tri-estado lógico

Si tuviéramos que ampliar la cantidad para dar cabida a este circuito de 3 pines y 6 LEDs, se vería así:



Esto presenta un problema, sin embargo. Para que este circuito funcione como el anterior, debemos desconectar uno de los pines antes de aplicar la carga a los dos restantes. Esto se puede resolver mediante la utilización de las propiedades lógicas, la de tres estados de pines del microcontrolador. Los pines del microcontrolador por lo general tienen tres estados, 5V, 0V y entrada. El modo de entrada pone el pin en un estado de alta impedancia que, eléctricamente hablando, "desconecta" que el pin del circuito de multiplexado, es decir, poco o ningúna corriente fluirá a través de él. Esto permite a el circuito seleccionar cualquier número de pines conectados en cualquier momento, simplemente cambiando el estado de la patilla. Con el fin de controlar la matriz de 6 LEDs mostrada, los dos pines correspondientes al LED deseamos activar deben estar conectadas a 5V y 0V respectivamente, mientras que el tercer pin se encuentra en su estado de entrada (alta impedancia). Al hacerlo así, evita la fuga de corriente fuera del tercer pin, asegurando que el LED se desea a la encender es el único iluminado.

Mediante el uso del tri-estado lógico, la matriz teóricamente puede ampliarse a cualquier tamaño, siempre que los pins están disponibles. Para $n$ pines, se puede tener hasta $n(n-1)$ LEDs en la matriz. Cualquier LED se puede encender mediante la aplicación de 5V y 0V a los pines correspondientes y el establecimiento de todos los otros pines conectados a la matriz a modo de entrada.

Aquí un vídeo simulando la aplicación de esta técnica.



En la próxima entrada pondremos en practica esta técnica para hacer un reloj muy simpatico con solo un microcontroldador y pocos pines.

Hasta la proxima...

4 comentarios:

  1. Buen post! quiero hacer una matriz RGB 16x128, basandome en esto(http://g33k.blogspot.com.es/2010/02/arduino-56x8-scrolling-led-matrix.html) Creo qu e no utiliza la tecnoca que tu explicas.Una pregunta.

    1- no he visto ninguna explicacion-tutorial de matrices tan grandes controlados con arduino y controladores auxiliares¿es posible?¿alguna orientacion?

    ResponderEliminar
    Respuestas
    1. Hola tonyc, Gracias por leernos, en cuanto a la técnica charlieplexing para matrices MUY GRANDES, como la tuya, existen algunas consideraciones, dado que esta técnica enciende uno y solo un led a la vez, el tiempo de pulso (duty cycle) para cada led seria muy pequeño por lo que la energía entregada seria tal vez insuficiente para lograr encenderlo, una solución sera aumentar el voltaje-(corriente) para lograr entregar mas energía a cada led pero estarías tocando la posibilidad de dañarlos, para ese caso que usas RGB necesitarías controlar 3 matrices de 16x128, una para cada color, en esta suposición creo que la multiplexacion tradicional es una mejor opción, podrías usar 74595 que es un shift register serial con latch de 8 bits, para arduino hay una librería que hace el trabajo, para otro micro tendrías que diseñar la rutina. si por otra parte ademas quieres controlar brillo para obtener una paleta mas elaborada de color, puedes usar un TLC5940 que maneja 16 canales PWM de forma serial y usar tiempos convenientes de multiplexación.
      espero que la informacion te sea de utilidad
      AngelX

      Eliminar
  2. Excelente post amigo
    Gracias por compartir

    ResponderEliminar