Paso 4: Software
El truco
Sí, como todo, hay un truco. El truco es que nunca hay más de 8 LED ' s iluminados a la vez.
Para que funcione bien, es necesario un poco de programación astuto. El concepto que he elegido es utilizar una interrupción de temporizador. Aquí funciona la interrupción pantalla en Inglés:
- Temporizador cuenta hasta cierto punto, cuando la rutina de servicio de interrupción se ejecuta.
- Esta rutina decide qué fila es el próximo que se muestre.
- La información para la siguiente fila se levantó de un búfer y cambió de puesto en el controlador de columna (esta información está "trabada" por lo que no aún no aparece).
- El conductor de la fila se apaga, no LEDs se encienden en la actualidad.
- El conductor de la columna es "trabado" en la información que cambió de puesto en dos pasos hace la información actual para mostrar.
- El conductor de la fila entonces proporciona corriente a la nueva fila que estamos viendo.
- El programa y termina rutina de servicio de interrupción vuelve al flujo normal hasta la siguiente interrupción.
Esto sucede muy rápidamente. La interrupción se produce cada 1 mseg. Esto significa que estamos refrescante toda la visualización de una vez cada 8 mseg. Esto significa una tarifa de la exhibición de alrededor de 125Hz. Hay cierta preocupación en cuanto a brillo ya que esencialmente estamos corriendo los LEDs en un ciclo de trabajo de 1/8 (son 7/8 del tiempo). En mi caso me sale una pantalla adecuadamente brillante con ningún parpadeo visible.
Completo pantalla LED está trazada en una matriz. Entre interrupciones se puede cambiar el arreglo de discos (ser consciente de la atomicidad) y aparecerán en la pantalla durante la siguiente interrupción.
Las características de la escritura de código para el Microcontrolador AVR y de cómo escribir código para hablar a los registros de cambio está fuera del alcance de este instructable. He incluido el código fuente (escrito en C y compilado con AVR-GCC) así como el archivo hexadecimal para directamente programar. He comentado todo el código para que usted debe ser capaz de usar esto para aclarar cualquier duda sobre cómo obtener datos en el registro de desplazamiento y cómo está trabajando la actualización de fila.
Tenga en cuenta que estoy usando un archivo de fuente que viene con la biblioteca de C universal ks0108. Esa biblioteca se puede encontrar aquí: http://en.radzio.dxp.pl/ks0108/
Actualización:
Registros de desplazamiento: Cómo
He decidido agregar un poco acerca de cómo al programa con registros de desplazamiento. Espero que esto borra cosas para aquellos que no han trabajado con ellos antes.
Lo que hacen
Registros de cambio toman una señal de un cable y salida de información a muchos pernos diferentes. En este caso, es un cable de datos que tiene en los datos y 8 pernos controladas dependiendo de qué datos ha sido recibido. Para hacer las cosas mejor, hay un outpin para cada registro de desplazamiento que puede ser conectado a la clavija de entrada de otro registro de desplazamiento. Esto se llama cascada y hace que la expansión potencial una posibilidad casi ilimitada.
Los pines de Control
Registros de cambio tienen 4 pines de control:
- Cierre - este pin indica el registro de desplazamiento cuando sea el momento para cambiar a datos recién introducidos
- Datos - 0 y el 1 que dice el registro de desplazamiento qué pins para activar se reciben en este pin.
- Reloj - se trata de un pulso en el microcontrolador que indica el registro de desplazamiento para tomar una lectura de datos y moverse al siguiente paso en el proceso de comunicación
- Habilitar salida - se trata de un interruptor on/off, alto = en, bajo = Off
Lo que es hacer su hacer una oferta:
Este es un curso intensivo en el funcionamiento de los pines de control anterior:
Paso 1: Sistema de cierre, datos y reloj bajo
- Ajuste el pestillo baja dice el registro de desplazamiento que están a punto de escribir en él.
Paso 2: Pin de datos del sistema para el valor de la lógica que desea enviar para el registro de cambio
Paso 3: Pin de reloj alta, contando el cambio de registro en el valor actual del pin de datos
- Todos los demás valores en el registro de desplazamiento se mueven por 1 lugar, haciendo espacio para el valor actual de la lógica del pin de datos.
Paso 4: Configurar el pin de reloj baja y repita los pasos 2 y 3 hasta que todos los datos ha sido enviado para el registro de desplazamiento.
- El pin de reloj debe establecerse bajo antes de cambiar el siguiente valor de datos. Alternar este pin entre alta y baja es lo que crea el "pulso de reloj" el cambio de registro necesita saber cuándo pasar al siguiente paso en el proceso.
Paso 5: Cierre sistema alta
- Esto dice el registro de desplazamiento para tomar todos los datos que ha cambiado de puesto en y utilizarlo para activar los pines de salida. Esto significa que usted no verá datos como está cambiando ningún cambio en la salida pins ocurrirá hasta el pestillo se encuentra alta.
Paso 6: Ajuste activar salida alta
- No habrá ninguna salida de polos hasta que la salida que está establecida en alto, no importa lo que está sucediendo con la otra tres pines de control.
- Este pin se puede siempre dejar alta si lo desea
En cascada
Hay dos pines que se puede utilizar para en cascada, sistema operativo y Os1. Os es para relojes levantamiento rápidos y Os1 es para relojes aumento lento. Este pin al pin de datos del siguiente registro de desplazamiento del gancho y el desbordamiento de este chip se incorporarán a la siguiente.
Final de la actualización de
Hacer frente a la pantalla
En el programa de ejemplo he creado un array de 8 bytes llamado [row_buffer]. Cada byte corresponde a una fila de la pantalla de 8 x 8, fila 0 siendo la parte inferior y fila 7, siendo la parte superior. El bit menos significativo de cada fila está a la derecha, el bit más significativo a la izquierda. Cambiar la pantalla es tan fácil como escribir un nuevo valor a dicha matriz de datos, la rutina de servicio de interrupción se encarga de refrescar la pantalla.
Programación
Programación no se discutirá en detalle aquí. Quisiera advertir que no use un cable de programación de DAPA, como creo que usted no podrá programar el chip una vez está funcionando a 12MHz. Todos los programadores estándar deberían funcionar (STK500, MKII, dragón, programadores paralelo/serie, etc..).
Fusibles:
Asegúrese de programar los fusibles a utilizar el cristal de 12MHz
hfuse: 0xC9
LFusible: 0xEF
En acción
Una vez que se programa el chip de la pantalla debe desplazarse un "¡ Hola mundo!". Aquí hay un video de la matriz de LED en acciones. La calidad del video es bastante baja como esta hecho con función de video de mi cámara digital y no un video apropiado o webcam.