Icono del sitio AranaCorp

El uso de un registro de cambio con Arduino

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

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.

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

Sources

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

Salir de la versión móvil