14/02/2007
Arduino es una plataforma popular para proyectos electrónicos, pero sus pines de E/S limitados a veces representan un obstáculo. Cuando necesitas controlar más dispositivos de los que pines disponibles tienes, la solución es usar un registro de desplazamiento. Este artículo profundiza en el uso de registros de desplazamiento, específicamente el 74HC595, con Arduino, proporcionando una información para principiantes y expertos.

- El problema de los pines de salida limitados
- Introducción a los registros de desplazamiento (Shift Registers)
- Funcionamiento del 74HC595
- Conexión del 74HC595 a Arduino
- Código Arduino para el 74HC595
- Control de brillo con PWM
- Concatenación de registros de desplazamiento
- Tabla comparativa de registros de desplazamiento
- Consultas habituales
El problema de los pines de salida limitados
Un Arduino UNO, por ejemplo, dispone de solo 14 pines digitales de salida. Si tu proyecto requiere controlar más de 14 LEDs, motores o sensores, te encontrarás con una limitación. Aunque los pines analógicos (A0-A5) se pueden configurar como digitales, esto sigue siendo insuficiente para proyectos de mayor envergadura.
La solución a esta problemática reside en los registros de desplazamiento, pequeños y económicos chips que amplían significativamente la capacidad de E/S de tu Arduino.
Introducción a los registros de desplazamiento (Shift Registers)
Los registros de desplazamiento, como el popular 74HC595, son chips que aceptan datos en serie y los presentan en paralelo. Esto significa que con solo unos pocos pines de Arduino, puedes controlar un gran número de salidas.
Existen dos tipos principales:
- SIPO (Serial-In, Parallel-Out): Entrada serial, salida paralela. Ideal para controlar múltiples salidas, como LEDs.
- PISO (Parallel-In, Serial-Out): Entrada paralela, salida serial. Útil para leer múltiples entradas, como botones o sensores.
En este artículo nos centraremos en el 74HC595, un registro SIPO de 8 bits muy común.
Funcionamiento del 74HC595
El 74HC595 posee dos registros de 8 bits: un registro de desplazamiento y un registro de almacenamiento (Latch). El proceso funciona así:
- Entrada de datos (SER): El Arduino envía datos al pin SER (Serial Input) del 74HC595, un bit a la vez.
- Reloj de desplazamiento (SRCLK): Cada pulso en el pin SRCLK (Shift Register Clock) mueve los datos un bit a la izquierda en el registro de desplazamiento. El nuevo bit entra por el pin SER.
- Reloj de almacenamiento (RCLK): Cuando el pin RCLK (Register Clock/Latch) recibe un pulso, los datos del registro de desplazamiento se copian al registro de almacenamiento. Estos datos se reflejan inmediatamente en las salidas (QA-QH).
Esta arquitectura permite controlar 8 salidas con solo 3 pines de Arduino: Data (SER), Clock (SRCLK) y Latch (RCLK).
Conexión del 74HC595 a Arduino
Para conectar el 74HC595 a tu Arduino, necesitarás conectar los siguientes pines:
- VCC (pin 16): Conectar a 5V de Arduino.
- GND (pin 8): Conectar a GND de Arduino.
- SER (pin 14): Conectar a un pin digital de Arduino (p.ej., pin 2).
- SRCLK (pin 11): Conectar a un pin digital de Arduino (p.ej., pin 3).
- RCLK (pin 12): Conectar a un pin digital de Arduino (p.ej., pin 4).
- QA-QH (pines 1 a 8): Conectar a tus LEDs, con una resistencia limitadora de corriente (220Ω) en serie para cada LED.
Importante: Recuerda que el 74HC595 requiere una alimentación de 5V. No lo alimentes directamente desde los pines de Arduino.
Código Arduino para el 74HC595
El siguiente código Arduino demuestra cómo controlar 8 LEDs conectados a un 74HC595:
int latchPin = 4; //Pin conectado a RCLKint clockPin = 3; //Pin conectado a SRCLKint dataPin = 2; //Pin conectado a SERvoid setup() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT);}void loop() { for (int i = 0; i < 256; i++) { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, i); digitalWrite(latchPin, HIGH); delay(100); }}Este código utiliza la función shiftOut()de Arduino para enviar datos en serie al 74HC59La variable iitera a través de todos los valores posibles de 8 bits (0-255), encendiendo y apagando los LEDs en diferentes combinaciones.
Control de brillo con PWM
Puedes controlar el brillo de los LEDs utilizando la modulación por ancho de pulso (PWM). Para ello, conecta el pin OE (Output Enable) del 74HC595 a un pin PWM de Arduino y utiliza la función analogWrite()para ajustar el brillo.
int latchPin = 4;int clockPin = 3;int dataPin = 2;int oePin = 5; //Pin conectado a OEvoid setup() { // ... (Código de configuración como antes) ... pinMode(oePin, OUTPUT);}void loop() { // ... (Código para controlar los LEDs como antes) ... analogWrite(oePin, 127); // Brillo al 50% delay(1000); analogWrite(oePin, 0); // LEDs completamente encendidos delay(1000);}Recuerda que el pin OE es activo en bajo. Un valor alto en analogWrite()significa que los LEDs estarán más apagados.
Concatenación de registros de desplazamiento
Para controlar aún más LEDs, puedes conectar varios 74HC595 en cascada. Conecta el pin QH' de un chip al pin SER del siguiente. Todos los chips comparten los pines SRCLK y RCLK. Ajusta tu código para enviar datos a cada chip individualmente.
Tabla comparativa de registros de desplazamiento
| Registro de desplazamiento | Tipo | Bits | Ventajas | Desventajas |
|---|---|---|---|---|
| 74HC595 | SIPO | 8 | Barato, fácil de usar | Solo 8 bits |
| 74HC165 | PISO | 8 | Fácil de usar para lectura | Solo 8 bits |
| SN74LS674 | SIPO | 16 | Más capacidad | Más caro |
Consultas habituales
- ¿Cuál es la diferencia entre SRCLK y RCLK? SRCLK desplaza los datos en el registro, RCLK guarda los datos en el registro de salida.
- ¿Necesito resistencias para los LEDs? Sí, para proteger los LEDs de sobrecorriente.
- ¿Puedo usar un 74HC595 para leer datos? No, el 74HC595 solo es para salida. Para leer datos, usa un 74HC16
- ¿Cuántos 74HC595 puedo conectar en cascada? Depende de la capacidad de tu Arduino y la corriente disponible.
Con este conocimiento, puedes ampliar significativamente las capacidades de E/S de tu Arduino utilizando registros de desplazamiento. Recuerda consultar la hoja de datos del 74HC595 para más información y detalles técnicos.
Si quieres conocer otros artículos parecidos a Cómo usar la librería shifter arduino para principiantes puedes visitar la categoría Libros y Librerías.
