Patrocinado por...

jueves, 8 de septiembre de 2011

Uso del chip Shift Register (74HC595) en Arduino

Fuente: 

http://ricardforner.blogspot.com/2011/08/uso-del-chip-shift-register-74hc595-en.html

Uso del chip Shift Register (74HC595) en Arduino

El chip 74HC595 nos permite utilizar una entrada de datos serie, y convertir un byte a 8 salidas en paralelo. Mediante el uso de una entrada de DATA, una de CLOCK y un LATCH, conseguimos con sólo 3 pines de Arduino procesar 8 salidas paralelas digitales.

Destacar que pueden encadenarse varios chips, por lo que si añadimos un segundo chip podemos tener 16 salidas paralelas simultáneas con 2 bytes, y así sucesivamente.


CIRCUITO
Nuestro prototipo para probar la conversión de serie a digital que nos facilita el 595 se basa en el esquema siguiente:

PROTOTIPO
El prototipo implementado en una protoboard tiene éste aspecto.


CÓDIGO FUENTE DE ARDUINO
La prueba se basa en el sistema de señalización del Proyecto PAROCA I, en que se muestran 5 LEDs en frecuencia estroboscópica (10ms / 64 ms) y un LED tricolor en que se mostrará el estado de la batería.
 /*  

  Proyecto.....: PAROCA I  

  Descripcion..: Plataforma Robotica de Carga  

  Autor........: Ricard Forner (RFKSolutions.es)  

  Version......: 0.0.1  

  Fecha........: 03/08/2011  

  Código fuente: Arduino  

 */  

 //Pin conectado a latch pin (ST_CP) del 74HC595  

 const int latchPin = A1;  

 //Pin conectado a clock pin (SH_CP) del 74HC595  

 const int clockPin = A0;  

 //Pin conectado a Data in (DS) del 74HC595  

 const int dataPin = A2;  

 //// Luces intermitentes / strobe  

 int seqLED[5] = {8+16, 8+16, 32+64, 32+64, 128};   

 //// Luces estado bateria  

 const int batteryOk = 2; // verde  

 const int batteryLow = 1; // rojo  

 int batteryStatus;  

 void setup() {  

  initLuces();  

  batteryStatus = batteryOk;  

 }  

 void loop() {  

  doLuces(batteryStatus);  

 }  

 void initLuces() {  

  pinMode(latchPin, OUTPUT);  

  pinMode(dataPin, OUTPUT);   

  pinMode(clockPin, OUTPUT);  

 }  

 void doLuces(int status) {  

  for (int n=0; n<5; n++) {  

   digitalWrite(latchPin, LOW);  

   delay(10);  

   shiftOut(dataPin, clockPin, MSBFIRST, status+seqLED[n]);  

   digitalWrite(latchPin, HIGH);  

   delay(12);  

  }  

 }  



VÍDEOS
Como resultado de lo publicado en el presente artículo, un par de vídeos de su funcionamiento.


http://youtu.be/rz4-_nKAxuc


Video de una rotación secuencial de los LEDs.


http://youtu.be/Z6gJ21Cs3ME

No hay comentarios:

Publicar un comentario