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
- https://fr.wikipedia.org/wiki/Registre_%C3%A0_d%C3%A9calage
- https://fr.wikipedia.org/wiki/Bascule_(circuit_logique)
- Programación con Arduino
Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código