fbpixel
Etiquetas: ,
0
(0)

O registrador de deslocamento (shift register) é um circuito integrado composto por circuitos lógicos em série que permitem salvar estados altos ou baixos na memória. Ele pode ser usado para controlar LEDs ou para obter o estado de vários sensores.

Material

  • Computador
  • Arduino UNO
  • Cabo USB A Macho/B Macho
  • Registrador de deslocamento 74HC595

Princípio de funcionamento

O registrador de deslocamento é um componente eletrônico que contém flip-flops síncronos. Estes são circuitos lógicos que guardam na memória um estado alto ou baixo (como um bit), ligados pelo mesmo relógio.

No caso do registrador de deslocamento 74HC595, as saídas paralelas fornecem uma tensão de 5V no estado alto e 0V no estado baixo.

Esquema

O registrador de deslocamento requer 3 pinos de saída de um microcontrolador. É possível gerir vários registradores ligados em série.

  • GND ligado à terra do circuito integrado;
  • Pino de alimentação Vcc. Normalmente ligado a 5V;
  • SH_CP ou RCLK shift register clock input. O sinal do relógio do registrador que determina salvar na memória ou não;
  • ST_CP ou SRCLK storage register clock input. O sinal do relógio de armazenamento que define em qual memória escrever ou qual memória ler;
  • DS ou SER serial data input. Sinal contendo os dados a serem registrados (UP ou DOWN);
  • Q0-Q7 parallel data output. Pinos de saída do registrador de deslocamento;
  • OE Output enable ativa o LOW. Pino ligado ao GND para ativar as saída;
  • MR Master reset, ativa o LOW. Pino de reinicialização. Ligado a 5V;
  • Q7′ serial data output (pino utilizado apenas se vários registradores estiverem ligados em série).

Código

Para comunicar com o registrador de deslocamento, faremos um pequeno malabarismo com os seus pinos de entrada. A fim de escrever no registro, precisamos colocar o pino RCLK em baixo. Para escrever nos flip-flops, temos de passar o relógio de armazenamento para baixo A cada pulsação do relógio, passamos para o flip-flop seguinte. Para simplificar o nosso código, vamos definir este procedimento na função writeRegister().

Para mostrar o princípio de um registrador de deslocamento, um exemplo comum é conectar LEDs às suas saídas e fazê-los piscar um após o outro.

//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();
     
}
}

Resultados

Aplicações

  • Gerir até 8 LEDs ou sensores usando três pinos de um microcontrolador
  • Gerir um display de 7 segmentos ou mais

Fontes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?