Continuacion...
Programación:
La parte del software es la que seguramente nos costara mas trabajo, pero los resultados bien valen la pena.
Mas adelante adjunto el listado correspondiente al programa que genera el texto “POWER” para que sirva de ejemplo, pero la idea es que cada uno realice su propio software utilizando como punto de partida las ideas y datos que expondremos a continuación.
Como dijimos antes, la pantalla esta formada por una serie de filas y columnas. La intersección entre ambas contiene un LED. Para que este encienda, tiene que recibir simultáneamente un “0” en la fila, y un “0” en la columna.
La forma de generar un mensaje sobre el display es relativamente sencilla, si nos atenemos al siguiente algoritmo:
1) Apagar todas las filas, escribiendo un “1” en PORTB.0 y PORTB.2 al 7
2) Escribir los valores correspondientes a la primer fila en el registro de desplazamiento, teniendo en cuenta que el primer digito binario colocado corresponde al ultimo LED de la fila, y el ultimo en poner al de la primer columna.
3) Poner un “0” en la primer fila (PORTB.0 = 0), esperar un tiempo, y volver a apagarla con PORTB.0 = 1.
4) Repetir los pasos para las filas 2 a 7.
Los tiempos de demora que utilizamos en el programa de ejemplo permiten una visualización correcta, sin molestos parpadeos y con los LEDS brillantes. Hay que tener en cuenta que si utilizamos tiempos mayores para el encendido de cada fila, el brillo de los LEDS será mayor, pero también aumentara el parpadeo.
No utilizamos vectores ni otras alternativas que hubieran servido para crear un codigo mas compacto, buscando la claridad del programa, para que pueda servir como base a otros mas completos/complejos.
El registro de desplazamiento:
Vamos a detenernos un momento para explicar como se introducen los datos en el registro de desplazamiento. Lo primero a tener en cuenta es que los datos deben entrar de izquierda a derecha, es decir, el primer dato que introduzcamos sera “empujado” por los que vienen detrás hasta llegar a la ultima columna. En segundo lugar, hay que saber (recomendamos la lectura de la hoja de datos del 74LS164N) que el dato ingresa al registro en el momento que se produce la transición de “0” a “1” del pulso de CLOCK, por lo que se deberán seguir los siguientes pasos para ingresar cada uno de los 32 valores correspondientes a cada fila:
1) Fijar el valor del dato a escribir ( si DATA es 1, hacer PORTA.1 = 1, si no PORTA.1 = 0)
2) Esperar un par de microsegundos (WaitUs 2)
3) Poner la línea de CLOCK en estado bajo (PORTA.0 = 0).
4) Esperar un par de microsegundos (WaitUs 2)
5) Poner la línea de CLOCK en estado alto (PORTA.0 = 1). En este punto el dato entra efectivamente en el registro de desplazamiento.
6) Esperar un par de microsegundos (WaitUs 2)
7) Fin
Los tiempos de demora de dos microsegundos funcionan, pero se puede experimentar un poco con ellos, dado que según la hoja de datos la frecuencia máxima de trabajo del 74LS164N es de 25MHz., por lo que demoras menores deberían trabajar bien. (probe SIN el Waitus, o sea sin demora, y anda ok...).
Con estos tiempos, la escritura de los 32 bits de una línea demora unos 350 microsegundos, tiempo más que aceptable.
En el código fuente se puede ver que por cada línea a escribir en la pantalla se utiliza un bloque como el siguiente
aux = %0010001011111001
Gosub escribo
aux = %0100011100000010
Gosub escribo
Fila1 = 0
WaitMs 2
Fila1 = 1
Goto loop
End
Básicamente, se llama dos veces a la subrutina “escribo” que comentaremos en un momento, con 16 bits en la variable “aux”.
Luego se enciende la fila escribiendo un “0” en el pin apropiado, se esperan un par de milisegundos, se apaga escribiendo un “1”, y se pasa a la fila siguiente.
La subrutina escribo se encarga de procesar el contenido de la variable “aux”, bit por bit, viendo si son “0”o “1” y escribiendo el dato correspondiente en el registro de desplazamiento. La instrucción “aux = ShiftLeft(aux, 1)” se encarga de rotar los 16 bits de la variable a la izquierda, para tomar el bit siguiente.
Sigo...