Etiquetas: ,
0
(0)

El registro de cambio (shift register) es un circuito integrado que consiste en circuitos lógicos en serie que pueden almacenar estados altos o bajos. Se puede usar para impulsar los LEDs o para recuperar el estado de varios sensores.

Hardware

  • Computadora
  • Arduino UNO
  • Cable USB A macho a B macho
  • Registro de cambio 74HC595

Principio de funcionamiento

El registro de cambio es un componente electrónico que contiene chanclas sincrónicas. Son circuitos lógicos que almacenan un estado alto o bajo (como un bit) conectados por el mismo reloj. El principio del desplazamiento proviene del hecho de que uno llega a escribir o leer en cada memoria poco a poco.
En el caso del registro de cambio 74HC595, las salidas paralelas entregarán un voltaje de 5V en el estado alto y 0V en el estado bajo.

Esquema

El registro de cambio requiere 3 pines de salida de un microcontrolador. Es posible gestionar varios registros conectados en serie.

  • Tierra del circuito integrado GND
  • Clavija de energía de Vcc. Normalmente se conecta a 5V
  • SH_CP o RCLK reloj del registro. La señal del reloj de registro que determina si se escribe en la memoria
  • Entrada de reloj de registro de almacenamiento ST_CP o SRCLK. La señal del reloj de almacenamiento que define en qué memoria se lee o escribe.
  • Entrada de datos en serie DS o SER. Señal que contiene los datos a registrar (ARRIBA o ABAJO)
  • Salida de datos en paralelo Q0-Q7. Pines de salida del registro de cambio
  • Habilitar la salida OE, activar LOW. Pin conectado a GND para activar las salidas.
  • MR Master restablecido, activar LOW. Reajuste el pin. Conectado a 5V
  • Salida de datos en serie » Q7′ » (el pin se usa sólo si se conectan varios registros en serie)

Código

Para comunicarnos con el registro de cambio, haremos malabarismos con sus pines de entrada. Para venir a escribir en el registro, tenemos que poner el pin RCLK. Para escribir en las chanclas, tenemos que poner el reloj de almacenamiento en baja. Con cada pulso de reloj, cambiamos a la siguiente chancleta. Para simplificar nuestro código, definamos este procedimiento en la función writeRegister().
Para mostrar el principio del registro de desplazamiento, un ejemplo común es conectar los leds a sus salidas que haremos parpadear uno tras otro.

//Constants
#define number_of_74hc595s 1
#define numOfRegisterPins number_of_74hc595s * 8
#define SER_Pin D1
#define RCLK_Pin D2
#define SRCLK_Pin D3

//Variables
boolean registers [numOfRegisterPins] ={0, 0, 0};

void setup(){
//Init Serial USB
Serial.begin(115200);
Serial.println(F("Initialize System"));
//Init register
 pinMode(SER_Pin, OUTPUT);
pinMode(RCLK_Pin, OUTPUT);
pinMode(SRCLK_Pin, OUTPUT);
}

void loop(){
writeGrpled();
}

void clearRegisters(){/* function clearRegisters */ 
//// Clear registers variables 
for(int i = numOfRegisterPins-1; i >=  0; i--){
  registers[i] = LOW;
}}

void writeRegisters(){/* function writeRegisters */ 
//// Write register after being set 
digitalWrite(RCLK_Pin, LOW);
 for(int i = numOfRegisterPins-1; i >=  0; i--){
  digitalWrite(SRCLK_Pin, LOW); int val = registers[i];
  digitalWrite(SER_Pin, val);
  digitalWrite(SRCLK_Pin, HIGH);
}
  digitalWrite(RCLK_Pin, HIGH);
}

void setRegisterPin(int index,int value){/* function setRegisterPin */ 
////Set register variable to HIGH or LOW
registers[index] = value;
}

void writeGrpled(){/* function writeGrpled */ 
//// blink leds 
for(int i = numOfRegisterPins-1; i >=  0; i--){
   Serial.print(F("LED "));Serial.print(i);Serial.println(F(" HIGH"));
   setRegisterPin(i, HIGH);
   writeRegisters();
   delay(200); 
   Serial.print(F("LED "));Serial.print(i);Serial.println(F(" LOW"));
   setRegisterPin(i, LOW);
   writeRegisters();

      
}
}

Resultado

Aplicaciones

  • Gestiona hasta 8 LEDs o un sensor con tres pines de un microcontrolador
  • Manejar una pantalla de 7 segmentos o más

Sources

Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?