Home Assistant Fácil

Curso de Home Assistant y domótica

  • Blog
  • Soy un pardillo
  • Podcast
  • Curso Arduino
  • Curso Domótica
  • Acceder
Usted está aquí: Inicio / Tutoriales / Fragmentos / Arduino / 74HC595 registro de desplazamiento con Arduino

74HC595 registro de desplazamiento con Arduino

Luis del Valle Hernández

74HC595

En el articulo controlar matriz de LEDs con Arduino ya vimos como aumentar las salidas digitales con la técnica de Charlieplexing, en este caso vamos a ver como aumentar las salidas digitales de Arduino con el shift register, también llamados registros de desplazamiento pero con estos chips no solo vamos a poder manejar una matriz de LEDs sino que aumentaremos las salidas digitales para el propósito que queramos y se hacen fundamentales para multitud de proyectos.

Indice de contenidos

  • 1 ¿Qué es el registro de desplazamiento 74HC595?
  • 2 ¿Cómo funciona el registro de desplazamiento 74HC595?
  • 3 74HC595 programación del registro de desplazamiento

¿Qué es el registro de desplazamiento 74HC595?

Existe un chip, el shift register 74HC595 (que suele venir en la mayoría de los kits de Arduino) con el que a partir de 3 salidas digitales conseguimos 8 salidas digitales y si ponemos estos chips en serie podemos conseguir 8 * nº de chips salidas.

Por lo que sí necesitamos x salidas, necesitaremos x/8 chips. Vamos a ver un poco más de este chip.

  • 74HC595

Las salidas que te mencionaba nos las dan las patillas desde Q0 a Q7 y las tres entradas que irán conectadas a las salidas de nuestra placa de Arduino son DS (patilla 14), STCP (patilla 12) y SHCP (patilla 11).

Estas patillas son las más importantes de comprender y en las que vamos a profundizar, en cuanto a las otras, tenemos la entrada de voltaje que es de 5V (patilla 16), por supuesto la conexión a tierra, la patilla 8 y la salida Q7S (patilla 9) la utilizaremos para conectar estos chips en serie. Aquí tienes el datasheet por si quieres ver con más detenimiento lo que te estoy contando.

¿Cómo funciona el registro de desplazamiento 74HC595?

Comenzamos por las entradas. STCP, en esta entrada enviaremos un pulso cuadrado y sera nuestra señal de reloj. DS es la entrada de nuestros datos. Y SHCP lo utilizaremos como disparador para enviar los datos a las patillas de salida (Q0 a Q7). Veamos  el siguiente cronograma y explico el funcionamiento:

Como ves la primera línea es una señal de reloj que nos proporciona nuestra placa de Arduino, en el caso de Arduino UNO tiene una frecuencia de 16MHz. La segunda línea es la secuencia de datos que queremos transmitir a las salidas Qn.

Cuando el pulso de reloj pasa de nivel bajo a nivel alto coge el valor que en ese momento esté en la secuencia de datos y lo almacena en la salida correspondiente.

Para el primer pulso en Q0, para el segundo pulso en Q1 y así sucesivamente hasta completar los 8 bits que necesitamos. En este momento los datos de salida aún no están disponibles, necesitamos de la tercera señal que tenemos, SHCP.

Cuando esta pasa de nivel bajo a nivel alto los datos que tenemos preparados para las salidas pasan a estar disponibles en las salidas Q0 – Q7.

En el ejemplo de cronograma, estamos poniendo a nivel alto (HIGH) lo que este conectado en la patilla Q0, Q2 Q6 y Q7, y en nivel bajo (LOW) el resto. 

Al final tenemos 256 posibles estados, 28 que nos proporcionan esos 8 bits de salida. Para que visualices a lo que me estoy refiriendo imagínate que tuviéramos 8 LEDs conectados a esas 8 salidas, tendríamos 256 posibles combinaciones con esos LEDs encendidos y/o apagados.

¿Y cómo enviamos el pulso de reloj, los datos y la señal del disparador desde nuestra placa de Arduino?. ¿Qué código hay que implementar?. ¿Cómo realizamos una comunicación síncrona con este chip?

Para esta comunicación síncrona tenemos un método en Arduino que nos facilita este trabajo, shiftOut.

74HC595 programación del registro de desplazamiento

Lo primero que tenemos que tener inicializado , son los tres pines digitales que hayamos escogido de nuestra placa de Arduino en modo salida:

int latchPin = 5;            //connect 595 ’ pin 12
int clockPin = 4;           //connect 595 ’s pin11 
int dataPin = 2;            // connect 595 ’s pin 14

void setup() {
  pinMode(latchPin, OUTPUT); 
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT); 
}

Y ya podemos ver la función que os comentaba, tiene cuatro parámetros:

shiftOut(dataPin, clockPin, bitOrder, value)

El primero, será el pin que se encarga de transmitir la secuencia de 8 bits de la que se compondrá nuestra salida, la segunda envía el ciclo de reloj.

El tercer parámetro hay que poner la palabra reservada MSBFIRST(Most Significant Bit First) o LSBFIRST(Least Significant Bit First), para determinar en que orden cambian los bits. 

Y el último parámetro tenemos que ver qué número decimal le corresponde a la secuencia en binario que queremos representar, siendo  1 el estado alto (HIGH) y por lo tanto la salida activa y el 0 el estado bajo (LOW) y la salida deshabilitada.

Por lo que si son 8 bits (8 salidas) en decimal tenemos desde el 0 al 255. En el ejemplo de antes con los LEDs, si quieres encender el primer y tercer LED tendrás que pasarle el número 160 que equivale al 1010000000 en binario o si quieres el ejemplo del cronograma  será el 163 (10100011), que nos encenderá el primero, el tercero, el séptimo y el octavo LED. (Recordad que para estos cálculos puedes utilizar la calculadora de windows en vista programador, no hace falta ponerse a calcular, jejeje).

Pero nos falta la señal para recoger los datos, la tercera linea en el cronograma. Esto lo haremos mandando antes de la función shiftOut un valor bajo a ese pin, y tras esa función un valor alto.

Para que veas como quedaría el código, en este ejemplo pasamos por todos los posibles estados con una pausa de 1 segundo:

for(int i=0;i<256;i++)
{ 
    digitalWrite(latchPin,LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, i); 
    digitalWrite(latchPin,HIGH);
    delay(1000);
}

Tenemos otros chips que aportan otras funcionalidades, tenemos el 74F675A que funciona de forma similar pero con una salida de 16 bits. Luego tenemos otros como el 74HC165 que es para aumentar las entradas de los pines digitales o el 74HC4051 que lo utilizamos para aumentar las entradas analógicas. Iremos viendo todos estos chips en nuevas entradas.

home assistant 2026.7

Automatizaciones Home Assistant 2026.7: por fin hablan en humano

¿Cuántas veces te has sentado delante del ordenador para hacer una triste automatización y has acabado queriendo tirar el teclado por la ventana? Eso … [+ info...]

comparativa home assistant y homey

Comparativa Home Assistant y Homey: qué sistema domótico comprar

Comparativa Home Assistant y Homey: si estás pensando en montar una casa inteligente de verdad, tarde o temprano te vas a encontrar con esta duda. ¿Me … [+ info...]

camaras de seguridad para casa

Cámaras de seguridad para casa: 5 pilares para no caer en la trampa del Prime Day

Llevas semanas pensando en poner cámaras de seguridad para casa y llega el Prime Day. Entras en Amazon, buscas y aparecen miles de resultados: WiFi, … [+ info...]

Copyright © 2026 · Programar Fácil · Aviso legal

Utilizamos cookies para ofrecerte la mejor experiencia en nuestra web.

Puedes aprender más sobre qué cookies utilizamos o desactivarlas en los .

Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies estrictamente necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Cookies de terceros

Esta web utiliza Google Tag Manager para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

Dejar esta cookie activa nos permite mejorar nuestra web.