Paso 4: El Charliegrid... diseño y programación
Para aquellos no familiarizados con esto, es una forma de control un montón de LEDs con solo unos pasadores aprovechando la naturaleza tri-state de un pins de microcontroladores y la tensión de los LEDs. Hay numerosas explicaciones de la charliegrid y sus aplicaciones en la red así que no doy más que una explicación rápida.
Nota la configuración de LEDs en el charliegrid.
Usted puede poner un + ve tensión en línea de un control y puede poner un 0V en otra línea. Deje las otras líneas de control desconectado a cualquier cosa. Imagine tener la charligrid en un protoboard y conectar dos líneas de control a una batería. En el caso del microcontrolador, estos dos pines que salidas del programa y configurar un pin a una lógica '1' y el otro a una lógica '0'.
Deje las otras líneas de control desconectado, o en el caso de un micrcontroller establece estos pines como entradas.
Se encenderá el LED con la conexión más directa a esta conexión. Aunque existen varias rutas a través de estos pines a través de otros LEDs, sólo una se encenderá porque cuando lo hace, la tensión de paso de LED siempre será menor que cualquier combinación de los otros LEDs.
Cuando se invierte la posición de la lógica '1' y '0', y las mismas líneas de control se seleccionan, se ilumina el LED en la posición inversa. Puede ver en el diagrama del circuito como pares de LEDs entre cada combinación de entradas de control. Así las líneas de control 6 pueden operar 30 LEDs individualmente... no al mismo tiempo por supuesto!
Para encender un LED es simplemente una cuestión de programar el microcontrolador para enviar una lógica '1' o una '0' lógica de líneas de dos control que correspondieron a ese LED y las otras entradas.
Brevemente iluminando cada LED deseado a su vez, puede crear una pantalla como un monitor debido a la persistencia del efecto de la visión. Porque sólo un LED se puede encender en un momento, esto siempre es necesario en una charliegrid.
En el código se registra la salida del porta/portb y los registros tris están cargados de valores pre-calculados para iluminar un LED. Tomó un tiempo para el cálculo de todos ellos. Aquí está un fragmento:
LED1 LED2 LED3 LED4
unsigned char LEDS_TRISA [31] = {0xfd, 0xee, 0xf7, 0xfd,
unsigned char LEDS_PORTA [31] = {0 x 02, 0 x 01, 0x08, 0 x 00, 0
unsigned char LEDS_TRISB [31] = {0xfb, 0xff, 0xfb, 0xfb, 0
unsigned char LEDS_PORTB [31] = {0 x 00, 0 x 00, 0 x 00, 0 x 04, 0 x
Si alguien sabe de un algoritmo de charliegrid generalizada, voy a ser muy interesado.
Pero primero la red tuvo que ser apoyado hacia fuera. Para el microdot fue un gran desafío debido a la falta de espacio. La imagen principal muestra cómo esto llegó a ser manejable.
Inicialmente puse los LEDs en pares en la red y los componentes de la parte inferior de así donde yo quería. Esto era muy confuso al tratar de resolver la mejor conectividad más eficiente de lo complejo charliegrid. Moviendo los LEDs de los componentes de la parte inferior, el ratsnest llegó a ser más fácil de leer. Después de eso fue simple mover la cuadrícula en los componentes del lado inferior y hacer el diseño de fondo con un mínimo de capa a capa vias y cruce las pistas. Se puede ver el impacto de mover y girar los LEDs para obtener el mejor arreglo en el loco nombre secuencia de la charliegrid esquema renumeración LEDs en el tablero.