Al igual que en la nota anterior http://electgpl.blogspot.com.ar/2013/11/matriz-8x8-mensaje-con-desplazamiento.html En este caso cambie la matriz de 8x8 por 8 displays de Cátodo Común, que en este caso ya se encuentran interconectados de forma matricial, pero se puede realizar con displays comunes interconectándolos.
El circuito es igual de simple que el comentado anteriormente de la matriz (Tener en cuenta el consumo de los leds, y las resistencias limitadoras que deben ir al menos en todo un puerto del microcontrolador).
En la simulación no son necesarias pero en la realidad si.
El programa es el mismo que el anterior pero en lugar de crear cada caracter con los puntos de la matriz, creamos cada caracter (limitado por el display) con un solo byte es posible crear un caracter.
Como podemos ver en el programa no hice todo el abecedario sino que algunas letras fltan y lo dejo a la imaginación de cada uno ya que hay letras que se complican para formar en un display de 7 segmentos.
Luego el otro cambio que podría decirse que es una pequeña mejora, es que le agregue la macro FRAMES que tiene el valor 50, esto lo que hace es poner 50 en todas las partes del programa donde aparezca FRAMES, al igual que la otra macro que se llama LARGO.
Los frames son la cantidad de veces que refresca la pantalla, pero si lo hace muchas veces, el movimiento sera mas lento, y si lo hace menos veces el movimiento sera mas veloz. No es exactamente como debería funcionar un Frame, pero esta ligado a la velocidad de desplazamiento, por ende en estos displays para que se pueda leer se le aumento la cantidad de frames, pero pueden variarla modificando ese numero.
El gif animado se ve relativa mente sincronizado aunque en la vida real se ve mucho mejor.
#include <16F883.h>
#use delay(int=4000000)
#define LARGO 28 //Longitud de la tabla
#define FRAMES 50 //Cant. de muestras (velocidad)
int const tabla[LARGO+16]={
0b00000000, //Espacio
0b00000000, //Espacio
0b00000000, //Espacio
0b00000000, //Espacio
0b00000000, //Espacio
0b00000000, //Espacio
0b00000000, //Espacio
0b00000000, //Espacio
0b01110111, //Dato de tabla A
0b01111100, //Dato de tabla b
0b00111001, //Dato de tabla C
0b01011110, //Dato de tabla d
0b01111001, //Dato de tabla E
0b01110001, //Dato de tabla F
0b00111101, //Dato de tabla G
0b01110110, //Dato de tabla H
0b00000110, //Dato de tabla I
0b00011110, //Dato de tabla J
0b00111000, //Dato de tabla L
0b01010100, //Dato de tabla N
0b00111111, //Dato de tabla O
0b01110011, //Dato de tabla P
0b10111111, //Dato de tabla Q
0b00110011, //Dato de tabla R
0b01101101, //Dato de tabla S
0b00110001, //Dato de tabla T
0b00111110, //Dato de tabla U
0b01101110, //Dato de tabla Y
};
void main(){
byte const bitMask[8]={1,2,4,8,16,32,64,128}; //Mascara
int i,j,k; //Variables contadores
while(TRUE){ //Ciclo infinito
for(i=0;i<LARGO+16;i++){ //Recorrido de tabla
for(k=0;k<FRAMES;k++){ //Refresco de matriz
for(j=0;j<8;j++){ //Barrido de columnas
output_a(~bitMask[j]); //Columnas ponderadas
output_b(tabla[j+i]); //Desplazamiento de tabla
delay_ms(1); //Demora de multiplexado
}
}
}
}
}
No hay comentarios.:
Publicar un comentario