viernes, 28 de septiembre de 2012

Display de 7 segmentos en Hexadecimal con GAL22V10


Vamos a manejar un display de 7 segmentos, cátodo común, miniatura de referencia SM420561K para ser implementado en el protoboard.

El display dispone de 7 leds para los segmentos a, b, c, d, e, f, g tal como se muestra en la figura anterior.Además se dispone de un octavo led para el punto. La configuración de pines se indica también en la figura. Existen dos pines para el cátodo común que debe conectarse a GND (tierra).

El objetivo del presente proyecto es visualizar en el display los números del 0 al 9, y las letras A,B,C.D,E,F,
del sistema numérico  Hexadecimal.
El punto solo enciende con las letras.



En los almacenes especializados venden  cables  de colores, muy útiles para llevar un orden y no confundirnos al  conectar el display a los pines de la GAL:
Conectores rápidos Macho - Macho 12" x 10
Nosotros conectamos cada segmento con un cable de color específico tal como se muestra en el siguiente esquema, disponiendo de una resistencia de 220 ohmios, 1/4 watio, en serie con cada diodo led, para limitar  la corriente en cada led,  protegiendo la GAL y el Display:
Para programar la GAL trabajamos con el ISPlever de Lattice Semiconductor usando la opción ABEL_HDL:

Veamos el archivo creado en lenguaje ABEL:


MODULE D0F

TITLE 'display del 0 hasta la F'


Clock pin 1;"Se declara el pin 1 como la entrada del reloj

a,b,c,d,e,f,g,p pin 23,22,21,20,19,18,17,16 ISTYPE 'reg,buffer';"Se declaran los pines de salida modo registro (Flip-flops)


Equations

[a,b,c,d,e,f,g,p].CLK = Clock ;"Se indica que los 8 flip-flops trabajan con el mismo reloj


"NOTA: Los flip-flops,por defecto,inician con salida en nivel bajo (todos los segmentos apagados en display de cátodo común)


Truth_Table ([a,b,c,d,e,f,g,p] :> [a,b,c,d,e,f,g,p]) "Se señala la tabla de estado
             [0,0,0,0,0,0,0,0] :> [1,1,1,1,1,1,0,0]; "Al llegar el flanco de subida del reloj se visualiza el CERO
             [1,1,1,1,1,1,0,0] :> [0,1,1,0,0,0,0,0]; "Cambia del CERO al UNO 
             [0,1,1,0,0,0,0,0] :> [1,1,0,1,1,0,1,0]; "Cambia del UNO al DOS 
             [0,1,1,0,0,0,0,0] :> [1,1,1,1,0,0,1,0]; "Cambia del DOS al TRES 
             [1,1,1,1,0,0,1,0] :> [0,1,1,0,0,1,1,0]; "Cambia del TRES al CUATRO    
             [0,1,1,0,0,1,1,0] :> [1,0,1,1,0,1,1,0]; "Cambia del CUATRO al CINCO 
             [1,0,1,1,0,1,1,0] :> [0,0,1,1,1,1,1,0]; "Cambia del CINCO al SEIS
             [0,0,1,1,1,1,1,0] :> [1,1,1,0,0,0,0,0]; "Cambia del SEIS al SIETE
             [1,1,1,0,0,0,0,0] :> [1,1,1,1,1,1,1,0]; "Cambia del SIETE al OCHO
             [1,1,1,1,1,1,1,0] :> [1,1,1,0,0,1,1,0]; "Cambia del OCHO al NUEVE
             [1,1,1,0,0,1,1,0] :> [1,1,1,0,1,1,1,1]; "Cambia del NUEVE a la A (Mayúscula) y enciende el punto 
             [1,1,1,0,1,1,1,1] :> [0,0,1,1,1,1,1,1]; "Cambia de la A a la b (Minúscula) y enciende el punto 
             [0,0,1,1,1,1,1,1] :> [1,0,0,1,1,1,0,1]; "Cambia de la b a la C y sigue encendido el punto  
             [1,0,0,1,1,1,0,1] :> [0,1,1,1,1,0,1,1]; "Cambia de la C a la d y sigue encendido el punto
             [0,1,1,1,1,0,1,1] :> [1,0,0,1,1,1,1,1]; "Cambia de la d a la E y sigue encendido el punto 
             [1,0,0,1,1,1,1,1] :> [1,0,0,0,1,1,1,1]; "Cambia de la E a la F y sigue encendido el punto 
             [1,0,0,0,1,1,1,1] :> [1,1,1,1,1,1,0,0]; "Retorna de la F al CERO, apagándose el punto 

END

Compilamos, y efectuamos la simulación:

Creamos el CHIP REPORT y el archivo JEDEC para programar la GAL:










1 comentario: