Função para Registrador de Deslocamento 74HC595

Eletrônica

A função descrita abaixo permite a expansão das saídas de um micro controlador usando apenas 3 portas, no exemplo dado será usado um Arduino UNO, e a este será adicionado 16 portas de controles.


O CI usado e um 74HC595 um registrador de deslocamento (Shift Register).




Código completo:




int latchPin = 9; // 12
int clockPin = 10; // PIN 11
int dataPin = 8; // é o pin 14 do 7HC595
byte vetor [] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
String txt = "";

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  if (Serial.available()) {
    char c = Serial.read();
    if (c == ";") {
      toggle(txt.toInt());
      updateShift();
      txt = "";
    } else {
      txt.concat(c);
    }
  }
}

/*
   POSIÇÃO vai de 1-8
*/
void toggle(int posicao) {
  vetor[posicao - 1] == 1 ? vetor[posicao - 1] = 0 : vetor[posicao - 1] = 1;
}

void updateShift() {
  Serial.print("BINARIO: ");
  for (int j = 1; j <= 2; j++) {
    digitalWrite(latchPin, LOW); // baixa o portao para montar o BYTE
    for (int i = 0; i <= 7; i++) {
      digitalWrite(clockPin, LOW); // Avisa o Clock que vai ser escrito um BIT
      int posicao = i;
      j == 2 ? posicao = i + 8 : posicao = i;
      digitalWrite(dataPin, vetor[posicao]); // Escreve o bit (BINARIO)      
      Serial.print(vetor[posicao]);
      Serial.print("-");
      digitalWrite(clockPin, HIGH); // Avisa o Clock que foi escrito um BIT
    }
    digitalWrite(latchPin, HIGH); // Avisa o Portão que terminamos de montar o BYTE, e ele já manda para o Shift
  }
  Serial.println("");
}



Fonte
https://www.youtube.com/watch?v=mEtgcPBLyVI&t=14s

http://br-arduino.org/2015/01/aumentando-as-portas-digitais-do-arduino-com-o-ci-74hc595-shift-register.html

http://www.blogdoronilson.com/2014/08/exemplo-de-uso-de-registrador-de.html
Mais Dicas