Continuando a falar sobre o uso do registrador de deslocamento 74hc164. A minha idéia em usar esse carinha é para ligar um display LCD HD4478 ao Arduino sem precisar de muitos pinos.

Um display LCD HD4478, por padrão precisaria de 11 pinos do microcontrolador para funcionar em modo 8-bits com todas as suas funcionalidades, mas com o uso do 74hc164 deu para fazer a ligação usando 4 pinos. Acho que é possível ligar com apenas 3 pinos, estava tentando fazer isso usando o display em modo 4-bits, mas não obtive bons resultados.

Usei o circuito feito pelo Frank Henriquez junto com algumas modificações no código publicado pelo calli no fórum do Arduino. Segue nos links abaixo o esquema e o código.

Esquema de montagem | Código para o Arduino

Esse código não chega nem perto de fazer tudo o que é possível com o LCD, mas aos poucos quero montar uma biblioteca para o Arduino e coloco as funcionalidades mais utilizadas.

O próximo passo agora é usar um botão direcional que comprei na Seeedstudio para controlar as informações que aparecem no display, fazer mudança de menus, selecionar itens, etc.

, , ,

Muitas vezes necessitamos de mais portas para nosso projeto do que o microcontrolador pode fornecer, casos de exemplo são matrizes de LEDs, matrizes de botões e displays LCD. Podemos usar um registrador de deslocamento com entrada serial e saída paralela para reduzir a quantidade de pinos usados, liberando os outros pinos para outras atividades. O CI 74hc164 é um registrador de deslocamento que converte a entrada no formato serial para a saída no formato paralelo, muito simples de usar.

74hc164

Como exemplo, para controlar 8 LEDs ligados no 74hc164 com o Arduino faça as seguintes ligações nos pinos:

  • A -> Arduino dataPin
  • B -> 5V
  • Qa .. Qh -> LEDs
  • GND -> GND (duh)
  • CLK -> Arduino clockPin
  • CLR -> Arduino resetPin
  • VCC -> 5V

Os pinos dataPin, clockPin e resetPin são configurados no programa escrito para o Arduino, como mostrado abaixo, e é através deles que vamos controlar o 74hc164. Nesse programa que escrevi, a função initShift inicializa os pinos de controle do 74hc164, o clock e deixa o ci no modo reset. A função sendShift envia um byte que indica quais leds estão ligados e desligados:

int resetPin = 6;
int clockPin = 7;
int dataPin = 5;
 
void setup() {
      initShift(resetPin, clockPin, dataPin);
      sendShift(B10101010);
}
void loop() {
}
 
void initShift(int resetPin, int clockPin, int dataPin) {
      pinMode(resetPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
      pinMode(dataPin, OUTPUT);
      digitalWrite(resetPin, LOW);
      digitalWrite(clockPin, LOW);
}
 
void sendShift(byte message) {
      int i;
      byte testByte =  B00000001;
      digitalWrite(resetPin, HIGH);
 
      for(i=0; i <= 7; i++) {
            digitalWrite(clockPin, LOW);
            digitalWrite(dataPin, (message >> i) & testByte);
            digitalWrite(clockPin, HIGH);
      }
}
, ,