[Proteus versión 8.2 sp2]

En nuestra entrada del proyecto Shields005 comentábamos que era posible utilizar más de un 74HC595 para aumentar a más de ocho las salidas disponibles. Por ejemplo tener 16 salidas utilizando 2 shields de este tipo. Durante este tiempo, son varios los lectores que nos han pedido que escribamos un ejemplo de cómo se hace. Así que esta entrega trata precisamente de esta cuestión: cómo utilizar dos shields idénticos con un conversor 74HC595 cada uno de ellos para obtener un conversor serie paralelo de 16 bits.

La información básica disponible en internet sobre el uso de un shield de este tipo debe consultarse en nuestro proyecto anterior: http://huborarduino.com/proyectos/52-shields005

En este proyecto utilizamos los dos shields para mandar un número entero (16 bits) a los dos conversores. Por lo tanto podemos gobernar 16 leds colocados en sus salidas. La salida Q7 del primer 74HC595 se une con el pin DS del segundo. De esta forma al ir desplazándose los bits de uno al otro, conseguimos nuestro propósito de gobernar 16 salidas.

Hemos numerado las salidas del primer 74HC595 del 0 al 7 (los primeros 8 bits) y las del segundo del 8 al 15 (los úlitmos 8 bits. Así, logramos de forma sencilla saber que bit de nuestro número entero ilumina que led. La salida 0 muestra el bit menos significativo y la salida 15 el de más peso.

Para facilitar la compresión del momento concreto en que se encuentra la ejecución de nuestro programa, utilizamos el shield del terminal virtual y le mandamos un mensaje en cada iteración de nuestro bloque con el valor del contador en decimal y en hexadecimal.

Como empezar con el contador a cero significaría tener que esperar mucho tiempo (un poco más de dos minutos) hasta que entra en juego el segundo 74HC595, hemos inicializado la variable usada como contador -Contador.numInt[0]- con un valor de 4090 en decimal (0x0FFB) en la línea 40 de nuestro código. De esta manera, ya se ve desde el principio el funcionamiento en las dos barras de leds. Por supuesto que el lector podrá de forma muy rápida y sencilla empezar con el contador al valor que desee sólo cambiando esta línea.

Puesto que la función que utilizamos para enviar la información al 74HC595 sólo envía un byte de cada vez y nuestra variable es entera (dos bytes, para poder enviar los dos bytes hemos tenido que utizar dos veces seguidas la función shiftOut(). La primera vez mandamos el byte más significativo y la segunda el de menos peso.

shiftOut(dataPin, clockPin, MSBFIRST, Contador.numByte[1]);
shiftOut(dataPin, clockPin, MSBFIRST, Contador.numByte[0]);

Para facilitar el envío del byte alto y bajo de nuestra variable, hemos utilizado una "union". Para más información sobre este uso de las uniones del lenguaje C se puede consultar nuestra lección 20 del curso de programación de Arduino: http://huborarduino.com/programacion/curso-programacion/41-leccion20

El montaje de ejemplo utilizado se muestra en la siguiente imagen:

CursoShields006 001

El proyecto gobierna los dieciseis primeros leds de dos barras de 10 leds, enviando una secuencia de números del 4090 al 65.535 y mostrando su valor binario con ayuda de los leds. En el instrumento virtual depurador SPI podemos comprobar todas la información que se transmite a través del bus serie.

El fichero con el proyecto completo (esquema y software) se puede descargar desde este enlace:

https://app.box.com/s/g2m386xjah4sj2rkyu6cwiamsb8i7c8x

Una vez más, esperamos que este ejemplo sirva de guía al lector para profundizar en la utilización de este tipo de shield.

 

Comparte este artículo en redes sociales

Submit to FacebookSubmit to Google PlusSubmit to TwitterSubmit to LinkedIn