8.7 Interfaz con el usuario
8.7.2 Salida B ´asica Controlador del Visualizador de siete segmentos
La placa Nexys 4 consta de un visualizador de siete segmentos de 8 d´ıgitos. Los siete segmentos de cada d´ıgito del visualizador se conectan en un esquema de ´anodo com ´un, lo
que quiere decir que para que se iluminen se ha de alimentar el ´anodo de los LEDs y poner un “0” en cada uno de los que se quiera iluminar. Esto se puede observar claramente en la Figura
8.7.2.1.
Figura 8.7.2.1 –Pinout de los visualizadores de siete segmentos y su esquema de ´anodo com ´un.
A la vista de la Figura8.7.2.1se observa que para iluminar cada uno de los ocho d´ıgitos ser ´a necesario alimentar el ´anodo correspondiente “ANX” y dado que la se ˜nal que har ´a que se iluminen los segmentos est ´a multiplexada, dependiendo del ´anodo que se est ´e alimentando se colocar ´a en el puerto “CA-CG-DP” de los c ´atodos el patr ´on correspondiente para el d´ıgito adecuado en esa posici ´on.
Como los ´anodos se alimentan a trav ´es de transistores PNP, la se ˜nal de activaci ´on es a nivel bajo por lo que habr ´a que generar una se ˜nal con un “0” circulante que haga un barrido de todos los ´anodos y, sincronizado con ella, se coloque en “CA-CG-DP” el patr ´on adecuado correspondiente con el d´ıgito que se quiera mostrar en esa posici ´on.
Para ello, dado que solo va a estar encendido un d´ıgito de cada vez, ser ´a necesario “en- ga ˜nar” al ojo humano haciendo el barrido de los ´anodos a una velocidad tal que sea inapre- ciable. Una frecuencia de refresco de 60 Hz es suficiente para esa tarea. Entonces, el circuito que controla la visualizaci ´on en eldisplay de siete segmentos ha de generar las se ˜nales de la manera indicada en la Figura8.7.2.2.
Figura 8.7.2.2 –Ejemplo de un cronograma para un controlador de un visualizador de cuatro d´ıgitos.
Se puede observar en la Figura 8.7.2.2 la multiplexaci ´on de la se ˜nal de los c ´atodos. As´ı, se muestra gr ´aficamente lo anteriormente explicado, es decir, cuando se alimenta el ´anodo
AN0 se env´ıa a “CA-CG-DP” el d´ıgitoDigit 0 y as´ı sucesivamente. Por ello el controlador del visualizador de siete segmentos deber ´a disponer de:
Divisor de frecuencia:Generar ´a la frecuencia de refresco a la que se har ´a el barrido de
los ´anodos.
Registro de desplazamiento:Generar ´a un cero circulante que ir ´a activando uno a uno
el ´anodo correspondiente.
Multiplexor: Colocar ´a en “CA-CG-DP” el patr ´on del d´ıgito que corresponda al ´anodo
activado.
Se encargan de esta tarea dos m ´odulos descritos en VHDL. Estos m ´odulos son frecuen- ciarefrescoybcd7seg.
8.7.2.1. El m ´odulofrecuenciarefresco
Este m ´odulo contiene el divisor de frecuencia que define la velocidad a la que se har ´a el barrido de los ´anodos. Como se desea que la frecuencia de refresco del display de siete segmentos sea de alrededor de 60 Hz y son 8 los d´ıgitos a mostrar, para completar un barrido completo deber ´a generarse una se ˜nal de8×60 = 480Hz.
Se puede crear un divisor de frecuencia como un contador de m ´odulo:
M odulo= FCLK
Fd
DondeFCLK es la frecuencia del reloj principal yFdla que se desea obtener. En el caso
que nos ocupa la frecuencia del reloj principal es FCLK = 100M Hz y la frecuencia deseada
del barrido es de480Hz, por lo que sustituyendo en la ecuaci ´on8.7.2.1se obtiene:
M odulo= 100∗10
6
480 = 208333,33 (8.7.2.2)
Por otro lado el n ´umero necesario de bits para alcanzar ese m ´odulo es log2208333,33 = 17,66,
lo que quiere decir que es son imprescindibles 18 bits. No obstante, la frecuencia no tiene por qu ´e ser exacta y dado que218−1 = 262143, despejando la frecuenciaFden la ecuaci ´on8.7.2.1
se obtiene:
Fd=
100∗106
262143 = 381,47Hz (8.7.2.3) Si se asume esa frecuencia de se ˜nal de 381,47 Hz se tiene una frecuencia de refresco de381,47/8 = 47,68Hz, que sigue siendo suficientemente r ´apida como para que sea inapre- ciable para el ojo humano. As´ı se puede evitar comparar el contador con el valor de m ´odulo obtenido en la ecuaci ´on 8.7.2.2, ahorrando en l ´ogica. Asumiendo la frecuencia aproximada basta con tomar el bit m ´as significativo del contador y detectar su flanco para tener la se ˜nal de habilitaci ´on con la forma y frecuencia deseadas.
8.7.2.2. El m ´odulobcd7seg
Este m ´odulo tiene las entradas y salidas de la Figura8.7.2.3:
A la entrada x llegan 8 d´ıgitos en formato BCD, a la entrada CE llega la frecuencia de refresco ya descrita en la secci ´on8.7.2.1.CLK yRST son las se ˜nales de reloj yreset, respec- tivamente.
Por la salidaanse extrae del dise ˜no el cero circulante que alimentar ´a el ´anodo correspon- diente. Las salidasseg y dpindican qu ´e segmentos de ese d´ıgito se deben iluminar y cuales no.
Interiormente, el m ´odulo consta de
Registro de desplazamiento.
Memoria con los patrones de encendido y apagado de los segmentos para cada d´ıgito. Multiplexor.
El c ´odigo de este m ´odulo y su explicaci ´on se pueden encontrar en el Anexo11.6
8.7.2.3. Conversi ´on de Binario a BCD
Se ha decidido que en el visualizador de siete segmentos se muestren en los cuatro d´ıgitos de la izquierda la consigna seleccionada con un decimal, y en los cuatro d´ıgitos de la derecha el valor de proceso tambi ´en con un d´ıgito decimal. Para conseguir este objetivo es necesario convertir ambos n ´umeros escalados en formato binario de coma fija a BCD. Para ello:
1. Para la consigna:
a) Se toman los bits correspondientes a la parte entera del n ´umero.
b) Se convierte a BCD la parte entera del n ´umero (3 d´ıgitos BCD).
c) Se toman los 4 primeros bits de la parte fraccionaria. Se mostrar ´a as´ı el n ´umero con resoluci ´on de1/16.
d) Sabiendo que1/16 = 0,0625, se multiplican los 4 bits de la parte fraccionaria (n ´ume- ro entre 0 y 15) por 625, obteni ´endose un n ´umero de 0 a 9375 en saltos de 625 unidades.
e) Se convierte el n ´umero entre 0 y 9375 al BCD y se toma el d´ıgito correspondiente a las unidades de millar (son las d ´ecimas de la medida).
f) Se unen los 3 d´ıgitos BCD de la parte entera con el d´ıgito de las d ´ecimas en la misma se ˜nal (16 bits = 4 d´ıgitos BCD).
2. Por ´ultimo, se unen las se ˜nales correspondientes a la consigna y al valor de proceso en una nueva se ˜nal de 32 bits (8 d´ıgitos) que tendr ´a como destino el m ´odulobcd7seg.
Para la variable de proceso se lleva a cabo el mismo procedimiento. El c ´odigo desarrollado y su algoritmo se encuentran en el Anexo11.8.