Registros de desplazamiento en Arduino

2
7596

Muchas veces corremos con el problema de no contar con suficientes salidas o entradas digitales en nuestros proyectos y recurrimos a utilizar otros microcontroladores de apoyo en una configuración maestro-esclavo. La verdad es que manejar más de 13 Leds (sin PWM) debería sonar como algo fácil, y en realidad lo es.

Los registros de desplazamiento (shifter registers) permiten expandir nuestra capacidad de entradas y de salidas digitales, basándose en el desplazamiento de una secuencia de bytes que se envía o recibe desde estos circuitos integrados.

Las dos variantes más populares de registros de desplazamiento son los de entrada en serie y los de entrada en paralelo. Ambos tipos de circuitos pueden tener salidas en serie o salidas en paralelo. En el mundo de los microcontroladores, se utiliza la primera para expandir la capacidad de salidas digitales y el segundo, para las entradas.
Otra ventaja que poseen este tipo de integrados es que solo requieres tres (3) pines digitales para las entradas y cuatro (4) para las salidas;con la condición de que puedes conectar una N cantidad de registros de desplazamiento en cadena.

1. Registros de desplazamiento de entrada en serie (SISO / SIPO)

Como se menciono anteriormente, se utilizarán para expandir nuestra capacidad de salidas digitales. En nuestro código, un uno (1) representará cuando un pin se desea que este en alta (HIGH) y un cero (0) cuando se desee que este en baja (LOW).

Para mostrar el funcionamiento de este tipo de circuitos, desarrollaremos un ejemplo en el cual controlaremos el estado lógico de 8 LEDs con sólo 3 pines digitales del Arduino. Utilizaremos el circuito integrado 74HC595N.

Registro de desplazamiento 74HC595N
Registro de desplazamiento: el circuito integrado 74HC595N

Conectaremos el circuito integrado al Arduino, acorde al siguiente diagrama:

Circuito #1
Circuito #1 – Diagrama de conexión del circuito integrado 74HC595N con el Arduino

Abriremos el IDE de Arduino y copiamos el siguiente código:

El código anterior espera un valor entre cero (0) y siete (7) en el monitor serial. Cuando el usuario le introduce este valor, el cambia el estado de ese LED (sí esta encendido lo apaga, y viceversa). Además, deja un registro del estado en el monitor serial.

Codigo #1

Si enumeramos los LEDs del 0 al 7, podremos cambiar el estado lógico de los LEDs a través de una llamada al número de posición del LED. Si en el Monitor Serie enviamos un «0», el primer LED de izquierda a derecha encenderá. Si enviamos nuevamente un «0», entonces el LED se apagarrá. Y así funcionará para todas y cada una de las posiciones.

2. Registros de desplazamiento de entrada en paralelo (PISO,PIPO)

Son utilizados para expandir la capacidad de entradas digitales. Detecta cuando un pin esta en ALTA ( su voltaje > 2.5V ) o cuando algún pin esta en baja (LOW). Para el funcionamiento correcto, utilizaremos cuatro pines digitales de la placa Arduino, además del circuito integrado 74HC165N.

Registro de desplazamiento 74HC165N
Registro de desplazamiento 74HC165N

Y lo conectaremos de acorde al siguiente circuito:

Registros de desplazamiento
Circuito #2 – Diagrama de conexión del Circuito Integrado74HC165N con el Arduino

En este ejemplo lo que haremos será leer 8 botones con tan sólo 4 pines del Arduino. Abriremos el IDE de Arduino y copiamos el siguiente código:

El código anterior muestra los estados de los botones en terminos de uno (1) y cero(0) en el monitor serie.

Monitor Serie

Con esto nos damos cuenta que podemos obtener los estados lógicos de los 8 botones a través de una cadena de bits.

Este tipo de circuitos, junto con las técnicas presentadas en este artículo permitirá aumentar la capacidad de un Arduino común y corriente cuando sea necesario utilizar múltiples entradas y/o múltiples salidas.

Cualquier duda o sugerencia, por favor expresarla en la sección de comentarios. Espero que la información mostrada sea de utilidad. Saludos.

0 0 votes
Article Rating
Suscríbete
Notify of
guest

2 Comments
newest
oldest most voted
Inline Feedbacks
View all comments
David Ramirez
David Ramirez
7 years ago

Hola el circuito y codigo para el 74hc165 no funciona ! podrian corregirlo

Antony García González
Antony García González
7 years ago
Reply to  David Ramirez

Por qué no funciona?