Proyecto F6

ShiftOut con 74HC595

29 de noviembre de 2020

En el siguiente tutorial veremos cómo utilizar el circuito integrado 74HC595 un Shift Register que nos permitirá incrementar el número de salidas de la Alhambra. 

Empezaremos con ejemplos sencillos y como proyecto de aplicación veremos como hacer un reloj con 6 displays de 7 segmentos, es decir, controlaremos con la Alhambra 42 salidas y para ello vamos a utilizar tan solo 8 pines de nuestra FPGA. 

Si habéis cacharreado con Arduino quizás conozcáis este integrado, si es la primera vez que oís hablar de él,  aquí podéis ver un tutorial (en inglés) y una sencilla animación que explica cómo funciona. Básicamente con cada pulso de reloj aplicado en el pin 11 CLK se introduce el dato presente en la entrada 14 DATA IN y se va pasando de un registro al siguiente. Cuando se han capturado 8 bits, activamos la señal LATCH en el pin 12 que pone en las salidas los 8 bits a la vez. Por supuesto en Google y YouTube podéis encontrar docenas de páginas y vídeos en castellano donde explican el funcionamiento del 595.

Primera Parte. Ejemplos con un CI 74HC595.

Esquema

Conectamos el CI como en el esquema. En las salidas ponemos 7 ledes con una resistencia.

A continuación unos ejemplos facilitos para irnos familiarizando con el funcionamiento del circuito.

En el siguiente ejemplo, cuando pulsamos el SW1 de la Alhambra, el bit se introduce en el primer registro del 595 y con cada ciclo de reloj pasa al siguiente registro y a la vez es puesto en la salida correspondiente. Se pueden poner diferentes frecuencias de bombeo para ver como los bits se desplazan a distintas velocidades por los registros.

El ejemplo 2 es similar al anterior, pero ahora los datos se introducen automáticamente con ayuda de un contador y una tabla. 

En el ejemplo 3 tenemos dos tablas de datos que seleccionamos con un multiplexor. Con ayuda del contador vamos recorriendo los datos de la tabla e introduciendo los bits en los registros del 595. 

Cuando el contador llega a 8, termina la carga de datos y con el tic de overflow activamos la señal LATCH y ponemos el contenido de los registros en la salida.

Ahora vamos a utilizar dos contadores. El primero cuenta hasta 8 y cuando satura activa el tic Overflow que utilizamos para poner en la salida los bits del 595 como en el ejemplo anterior. Al mismo tiempo este tic incrementa el contador 2 para que apunte al siguiente dato de la tabla.

El bloque registro (ver Tutorial 29 de Obijuan) pone en serie, uno a uno los 8 bits del bus de datos, en la entrada DATA IN del 595. Cuando hemos cargado los 8 bits, se activa la señal LATCH y  vemos en los ledes el contenido de la tabla. 

Segunda Parte. Ejemplos con dos CI 74HC595.

Vamos a añadir un segundo registro 74HC595 y a sustituir los ledes por displays de 7 segmentos.

Esquema

El esquema es similar al anterior. Las señales LATCH y CLK se conectan en paralelo y la entrada de datos de los 595 se llevan a D2 y D3 en la Alhambra. Con 4 pines de la FPGA hemos conseguido 16 pines extra de salida.

Ejemplo 2-1.

Este ejemplo nos servirá para testear las conexiones y asegurarnos que todo está OK antes de seguir adelante.

Simplemente iluminaremos uno a uno todos los segmentos de ambos displays.

Ejemplo 2-2.

En el ejemplo anterior ambos 595 compartían salida de datos, por eso mostraban la misma información. Ahora tenemos dos salidas independientes y dos tablas de datos, una para cada display.

El siguiente ejemplo es un sencillo contador de 0 a 15 y sirve para verificar que cada display funciona bien por separado.

No te preocupes si alguna imagen no se ve con claridad, todos los ejemplos están disponibles para descargar al final de la página.

Tercera Parte. Reloj con seis CI 74HC595.

Vamos al lío. Añadimos 4 CI’s más 74HC595 y otros tantos displays de 7 segmentos.

Esquema

Las señales de reloj son comunes a todos los 595 y las señales de datos son independientes.

Ejemplo 3-1. Segundos.

Aunque tengamos conectados todos los displays, como en todo proyecto de cierta envergadura, iremos construyendo el reloj poco a poco y añadiendo complejidad a medida que vamos testeando cada paso que damos.

Partiendo del sketch que ya vimos en el Proyecto F7  -un reloj para displays matriciales- iremos modificando el sketch original para adaptarlo a nuestras necesidades. 

Empezaremos con el circuito para los segundos. Hacemos el siguiente sketch y lo subimos a la Alhambra, veremos como los displays correspondientes van mostrando los segundos.

A grandes rasgos, partimos de una señal de 1 Hz que vamos dividiendo para obtener los segundos, minutos y las horas. Consulta el enlace anterior para saber en detalle cómo funciona el sketch de la Alhambra.

Ejemplo 3-2. Segundos y minutos.

Añadimos dos contadores y dos tablas más para mostrar los minutos. El SWITCH 1 de la Alhambra sirve para incrementar en 1 unidad los minutos, así ajustamos la hora actual con la hora real.

Ejemplo 3-3. Segundos, minutos y horas.

Añadimos dos contadores y dos tablas más para mostrar las horas. El SWITCH 2 de la Alhambra sirve para ajustar la hora.

Con este último añadido ya tenemos nuestro flamante reloj con 6 displays funcionando al completo. 6 displays, 6 registros 74HC595 y una FPGA, ¡que pasada!

Cuarta Parte. Bloques Icestudio.

Vamos a convertir el sketch anterior en bloques de Icestudio para que sea más cómodo trabajar con ellos.

Bloque 4-1. Reloj del Sistema.

Empezamos por crear un bloque Reloj del Sistema que será el encargado de proporcionar las señales de reloj y sincronismo para los 595.

Bloque 4-2. Segundos.

Los siguientes bloques serán los encargados de contar segundos, minutos y horas.

Bloque 4-3. Minutos 

Bloque 4-4. Horas. 

Reloj con bloques.

Ponemos todos los bloques juntos para que el sketch quede más sencillo.

En la imagen siguiente puede verse el reloj funcionando a pleno pulmón.

Eso es todo, espero que os haya gustado. 

¡Hasta pronto!

Links

Tutoriales Obijuan. Electrónica Digital con FPGA's

Proyecto F7. Reloj con Alhambra FPGA y displays matriciales Siemens DLO7135.

Descarga los esquemas y sketch de icestudio aqui.