LECCIÓN 14: Shift registers – Registro de desplazamiento 74HC595 y display de 7 segmentos

Introducción 

En algún momento llegará o ya ha alcanzado la etapa en la que no tiene suficientes salidas en tu Arduino.

Cuando conectamos la pantalla directamente al Arduino, ocupamos hasta ocho pines digitales. Esto significa que la placa Arduino UNO (equipada con 14 entradas / salidas digitales) solo puede controlar una pantalla.

La solución a este problema es muy fácil, solo hay que usar el registro de desplazamiento 74HC595.

El registro de desplazamiento nos permite aumentar el número de pines que podemos usar en nuestro Arduino (u otro microcontrolador).

Gracias a este pequeño circuito integrado, tenemos la capacidad de controlar ocho salidas utilizando solo tres pines digitales de Arduino.

 

Componentes 

{Product:2000}{Product:256}{Product:1436}{Product:536}{Product:603}{Product:1220}{Product:154}

Principio del experimento

 

Diagrama de 7 segmentos de display LED. La imagen muestra display de 7 segmentos cátodo común:

   

Este tipo de display se “controla” con ‘1’ lógico o con voltaje positivo.

La tabla siguiente presenta del 0 al 9 (diez dígitos) y cuya correspondencia a cada segmento, como se puede comprobar al dibujar el número en la imagen izquierda, es la siguiente:

 

Si está utilizando display ánodo común, la tabla debe ser reemplazada cada ‘1’ lógico debe reemplazarse por cero (0) y cada cero (0) por ‘1’. 

El registro de desplazamiento 74HC595 tiene un registro de almacenamiento de 8 bits y un registro de desplazamiento de 8 bits. Los datos se escriben en el registro de desplazamiento en serie, luego se enganchan en el registro de almacenamiento. El registro de almacenamiento controla entonces 8 líneas de salida.

El diagrama de pines de registro 74HC595 es el siguiente:

Como funciona el registro de desplazamiento 74HC595

El principio de funcionamiento del registro de desplazamiento es muy simple: debe enviar un byte de datos (8 bits) al registro, en función del cual el registro habilitará o deshabilitará cada uno de sus ocho pines de salida. 

El registro tiene una entrada serie DS, que se utiliza para ingresar los datos en cada flanco de subida, o sea cuando la señal de reloj Clock (SH_CP) sube de 0 a 1. 

Cuando ocurra un flanco de subida en la señal Latch (ST_CP) sobrescribe el estado de las salidas paralelas del registro de desplazamiento en el registro de memoria. 

El estado almacenado en el registro de memoria aparece en las salidas del sistema cuando la señal del pin OE sea baja.

Los bits que forman el byte de datos enviado, se asignan a los pines de salida en el orden de Q7 a Q0. Esto significa que el bit de datos más a la izquierda representa el estado del pin Q0 del registro de desplazamiento, y el bit del extremo derecho representa el estado del pin de salida Q7.

Observando detenidamente la imagen inferior, se puede entender mucho mejor. Cada vez que el reloj marca un pulso de subida, se va grabando el valor que haya en el Data Pin (DS). Se van grabando hasta que salte el pin Latch, momento en el que por cada salida (Q0 a Q7) saldrá un pulso correlativamente a la secuencia del Data Pin capturada. El primer 1 sería un 1 a la salida Q0, el segundo 1 a la Q1, en la secuencia 3, el ‘0’ saldría por la Q2, y así sucesivamente. 

 

 

Procedimiento 

Paso 1: Conecta circuito como se muestra en el diagrama siguiente:  

 

 

Paso 2: Conecta 74HC595

En primer lugar, el cableado se conecta a la alimentación y a tierra:

• Vcc (pin 16) y MR (pin 10) conectados a 5V

• GND (pin 8) y OE (pin 13) a tierra

Conexión DS, ST_CP y SH_CP pin:

• DS (pin 14) conectado al pin 11 de Arduino (la figura por debajo de la línea azul)

• ST_CP (pin 12, pin de cierre) conectado a Arduino pin 8 (línea verde FIG abajo)

• SH_CP (pin 11, pin de reloj) conectado a Arduino pin 12 (la figura por debajo de la línea amarilla)

 

Paso 3: Conecta la pantalla de 7 segmentos

• La pantalla de siete segmentos de 3, 8 pines a GND (Este ejemplo utiliza el cátodo común, en caso de ánodo común - de 3, 8 pines a + 5V)

• De acuerdo con la tabla de la 74HC595 conectamos Q0-Q7 a un pin correspondiente de la pantalla de 7 segmentos (A - G y DP), y una resistencia de 220 ohmios en serie.

 

Diagrama de circuito

                             

Paso 4: Programa (consulta el código de ejemplo en el CD o sitio web oficial)

/ Lab13 Using a 74hc595 and seven segment display to make reciprocal function

 

// define the LED digit patterns, from 0 - 9

// 1 = LED on, 0 = LED off, in this order:

//                74HC595 pin     Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7 

//                Mapping to      a,b,c,d,e,f,g of Seven-Segment LED

byte seven_seg_digits[10] = { B11111100,  // = 0

                              B01100000,  // = 1

                              B11011010,  // = 2

                              B11110010,  // = 3

                              B01100110,  // = 4

                              B10110110,  // = 5

                              B10111110,  // = 6

                              B11100000,  // = 7

                              B11111110,  // = 8

                              B11100110   // = 9

                             };

 

// connect to the ST_CP of 74HC595 (pin 12,latch pin)

int latchPin = 8;

// connect to the SH_CP of 74HC595 (pin 11, clock pin)

int clockPin = 12;

// connect to the DS of 74HC595 (pin 14)

int dataPin = 11;

 

void setup() {

  // Set latchPin, clockPin, dataPin as output

  pinMode(latchPin, OUTPUT);

  pinMode(clockPin, OUTPUT);

  pinMode(dataPin, OUTPUT);

}

 

// display a number on the digital segment display

void sevenSegWrite(byte digit) {

  // set the latchPin to low potential, before sending data

  digitalWrite(latchPin, LOW);

     

  // the original data (bit pattern)

  shiftOut(dataPin, clockPin, LSBFIRST, seven_seg_digits[digit]);  

 

  // set the latchPin to high potential, after sending data

  digitalWrite(latchPin, HIGH);

}

 

void loop() {       

  // count from 9 to 0

  for (byte digit = 10; digit > 0; --digit) {

    delay(1000);

    sevenSegWrite(digit - 1); 

  }

   

  // suspend 4 seconds

  delay(4000);

}

Paso 5: Compila el programa

Paso 6: Graba el programa en la placa Uno