• No se han encontrado resultados

Salida B ´asica Controlador del Visualizador de siete segmentos

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.

Documento similar