Registros de desplazamiento en Arduino

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 (Reloj, Data y Latch) y X para las salidas (dependiendo del integrado utilizado);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, un archiconocido integrado de nuestra época de estudiantes de electrónica.

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

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

El código anterior hará que se enciendan los leds como los del coche fantástico, ya que cada número de la sequencia activa un led en binario:
1=00000001, 2=00000010, 4=00000100, 8=00001000, 16=00010000, 32=00100000, 64=01000000, 128=10000000.

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.

Y lo conectaremos de acorde al siguiente circuito:

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.

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.

Fuentes: Panamahitek y Arduino a Fondo de Jeremy Blum