SHIFT REGISTER M74HC595 + DISPLAY 7 SEGMENTOS



Continuando com as experiências com a arduino montada na breadboard, resolvi aprender a usar os chips de shift register que expandem as portas digitais da arduino.

Nos exemplos do comando ShiftOut site arduino.cc existem esquemas e bons exemplos, porém como sempre, não consegui encontrar o chip 74HC595 da philips que é usado em todos os exemplos que encontrei na web. O chip que achei é um clone compatível do fabricante SGS-THOMSON modelo M74HC595F1R.


























Mudam os nomes dos pinos e sua posição mas as funcionalidades são exatamente as mesmas. Isso aconteceu também com o display de 7 segmentos que achei, tive que testar todos os pinos para achar qual era aordem correta de conexão, o modelo do display é HS5101AG VERDE - CATODO (COM TERRA COMUM), nao consegui achar nada de documentação deste.

O site mais completo que achei sobre o assunto com exemplos foi :

http://tronixstuff.wordpress.com/2010/04/30/getting-started-with-arduino-%E2%80%93-chapter-four/

Nao tem nehum esquema da montagem no site acima, mas tem explicações sobre o funcionamento do sistema bem feitas. O mais interessante é que a foto do chip que ele usa é a do modelo que encontrei e usei mas o resto das explicações são sobre o chip da philips...

Segue o meu esquema de pinagem:




O chip M74HC595 recebe do microcontrolador por meio do comando ShiftOut um número decimal que é convertido em binário, este número binário representa os pinos que devem ser ligados e desligados para acender ou apagar os leds que formam um certo número ou letra.

São 7 segmentos e um ponto, por tanto, oito leds para serem controlados por uma sequencia de oito zeros e uns.

Veja nos comentários abaixo o número decimal, o binário interpretado pelo chip e o número a ser apresentado no display .

Segue o  sketch que montei par apresentar todos os números em série:

--------------------------------------------------------------------------------------------

/*
Claudio Miklos based on work by Carlyn Maw and Tom Igoe
 */



int latchpin = 11; // conecta no pino 14 do M74HC595
int clockpin = 10; // conecta no pino 12 do M74HC595
int datapin = 9; // conecta no pino 11 do M74HC595
void setup()
{
   pinMode(latchpin, OUTPUT);
   pinMode(clockpin, OUTPUT);
   pinMode(datapin, OUTPUT);
}
void loop()
{
          digitalWrite(latchpin, LOW);
     shiftOut(datapin, clockpin, MSBFIRST, 63); // 111111 = 0
     digitalWrite(latchpin, HIGH);
     delay(1000);
          digitalWrite(latchpin, LOW);
     shiftOut(datapin, clockpin, MSBFIRST, 6); // 110 = 1
     digitalWrite(latchpin, HIGH);
     delay(1000);
          digitalWrite(latchpin, LOW);
     shiftOut(datapin, clockpin, MSBFIRST, 91); // 1011011 = 2
     digitalWrite(latchpin, HIGH);
     delay(1000);
          digitalWrite(latchpin, LOW);
     shiftOut(datapin, clockpin, MSBFIRST, 79); // 1001111 = 3
     digitalWrite(latchpin, HIGH);
     delay(1000);
          digitalWrite(latchpin, LOW);
     shiftOut(datapin, clockpin, MSBFIRST, 102); // 00000100 = 4
     digitalWrite(latchpin, HIGH);
     delay(1000);
          digitalWrite(latchpin, LOW);
     shiftOut(datapin, clockpin, MSBFIRST, 109); // 1101101 = 5
     digitalWrite(latchpin, HIGH);
     delay(1000);
          digitalWrite(latchpin, LOW);
     shiftOut(datapin, clockpin, MSBFIRST, 125); // 1111101 = 6
     digitalWrite(latchpin, HIGH);
     delay(1000);
          digitalWrite(latchpin, LOW);
     shiftOut(datapin, clockpin, MSBFIRST, 7); // 00000111 = 7
     digitalWrite(latchpin, HIGH);
     delay(1000);
          digitalWrite(latchpin, LOW);
     shiftOut(datapin, clockpin, MSBFIRST, 127); // 1111111 = 8
     digitalWrite(latchpin, HIGH);
     delay(1000);
          digitalWrite(latchpin, LOW);
     shiftOut(datapin, clockpin, MSBFIRST, 111); // 1101111 = 9
     digitalWrite(latchpin, HIGH);
     delay(1000);
           digitalWrite(latchpin, LOW);
     shiftOut(datapin, clockpin, MSBFIRST, 128); // 10000000 = DP
     digitalWrite(latchpin, HIGH);
     delay(1000);
                digitalWrite(latchpin, LOW);
     shiftOut(datapin, clockpin, MSBFIRST, 255); // 11111111 = TUDO
     digitalWrite(latchpin, HIGH);
     delay(1000);
 }

------------------------------------------------------------------------------------------------------- O objetivo agora é fazer um termometro usando o que aprendi nos experiencias anteriores e montar tudo em uma placa de circuito de verdade.

2 comentários:

  1. Valeu Mike pelo exemplo !
    No site do Arduino tem os exemplos mas é difícil enteder a lógica de funcionamento. Com sua explicação e a explicação do blog que você colocou o link agora deu pra entender como funciona.
    Só pra constar, eu achei pra comprar o 74HC595 aqui: http://soldafria.com.br/ aproveitei e comprei logo um tanto bom deles.

    Valeu !!

    ResponderExcluir
  2. Como faço para implementar 3 displays e 3 74hc595?

    ResponderExcluir

Faça seu comentário.

Internet of Things

LUX com arduino GPRS shield e sensor LDR.

/*
Graph: Feed 38642, Datastream lux
*/

Laboratórios, Lojas e Produtos

Blogs, Comunidades e Revistas