Expandindo portas do Arduino com o 74HC595

 

Algum tempo atrás fiz uns testes em um 74HC595 em conjunto com um microcontrolador ATmega 328. Utilizando a mesma lógica que foi baseada neste tutorial, refiz o processo utilizando um Arduino. O 74HC595 pode ser utilizado para expandir as portas digitais do Arduino, ele recebe um byte (8bits) serial e escreve em 8 saídas paralela. Para fazer isto ele utiliza apenas 3 portas do Arduino, não importando a quantidade de portas que se deseja na saída. É possível colocar na saída quantas portas desejar, cascateando um CI em outro.


No circuito que vou mostrar utilizo dois 74HC595 fazendo que com apenas 3 portas do Arduino terei 16 portas na saída.


Na pinagem é necessário aterrar o OE (Output Enable) e deixar o MR (Master Reset) com 5V. Os dados serial são enviados pelo pino DS (Serial Data imput) trabalhando sincronizado com o clock (SHCP) e no fim do envio dos 8bits é necessário um latch (STSP) para as portas paralelas ficarem ativas (Q0-Q7). No caso do cascateamento, basta ligar o pino Q7' do primeiro CI no DS do segundo e enviar o latch apenas após ultimo bit (16 para dois CIs).


Para facilitar fiz toda simulação no Tinkercad, incluindo o Arduino e seu código. Dividi em 3 partes, onde um envia dados como contagem binária, outro envia dados sequencialmente e um onde é possível enviar pela serial de 0 a 65535. A parte critica do código fica na função hc595(), onde é feito um "and" com um bit mais significativo, seguido de um bitshift e assim por diante checando os 16 bits. Para 8 bits é necessário alterar o programa para trabalhar com 8 bits.

void hc595(uint16_t mydata) {
for (uint16_t i = 0; i < 16; i++) {
  if (mydata & 0b1000000000000000) { //Para 16 bits (2 HC 595)
    digitalWrite(PINDS, HIGH);
  }
  else {

    digitalWrite(PINDS, LOW);
  }
  myclock();
  mydata = mydata << 1;
}
mylatch();
}
Contador Binário:

Comentários