Projeto - Cronômetro Progressivo
Autor: Pio Netto | Publicado: 2014-07-29T10:15:00-07:00

Somos alunos do curso de Ciência da Computação da Universidade Federal do Oeste do Pará - UFOPA.
Nossa equipe é composta pelos seguintes Alunos:

Luan Rodrigo Gama de Sousa
Marcos José da Silva Baia
Marcus Fabrício Ferreira
Pio Ferreira Lima Netto

Este projeto é, na verdade, um trabalho da disciplina de Circuitos Digitais, ministrada pelo professor Cássio Pinheiro. Dentre as diversas opções disponíveis escolhemos o Cronômetro Progressivo para trabalharmos.

Primeira Tentativa
A primeira tentativa iniciamos em 11 de julho de 2014 onde, na construção do cronômetro, usamos um display de 7 segmentos de 4 dígitos modelo 5461AS, um arduíno MEGA e o shift register 74HC595B1 (deslocador de bits), alguns jumpers e 12 resistores de 100k. Não houve sucesso pois usávamos o datasheet errado para o registrador, e tínhamos dificuldade em entender como funcionava e também como funcionava o Display 5461AS (7 segmentos).




Registrador de Deslocamento




Protoboard, Leitor de 7 Segmentos de 4 dígitos e Arduino Mega

Segunda Tentativa
Na segunda tentativa, iniciada em 18 de julho de 2014 (1 semana depois), usamos apenas o display de 7 segmentos de 4 dígitos (5461AS), um arduíno UNO e jumpers. implementamos um contador no display, mas ele apenas contava os números além do código usado ser muito extenso (336 linhas). O circuito foi montado conforme a figura:





Depois de montado, o circuito ficou dessa forma:










<embed src="https://www.youtube.com/get_player" type="application/x-shockwave-flash"
width="320" height="266" bgcolor="#FFFFFF"
flashvars="flvurl=https://redirector.googlevideo.com/videoplayback?requiressl%3Dyes%26id%3Ddf56e222766982da%26itag%3D5%26source%3Dblogger%26app%3Dblogger%26cmo%3Dsecure_transport%253Dyes%26cmo%3Dsensitive_content%253Dyes%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1504822573%26sparams%3Drequiressl,id,itag,source,ip,ipbits,expire%26signature%3D1B32F352F2E8E8E0F24A5B56F3EEB0EE2BAFD430.5AEFFBF43D705FDF5719F9ABF4C3F6D218F5CDFF%26key%3Dck2&iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Ddf56e222766982da%26offsetms%3D5000%26itag%3Dw160%26sigh%3DD8GMYV5xAeMeKTDTHw-YeFQX8NA&autoplay=0&ps=blogger"
allowFullScreen="true" />



Terceira Tentativa
Nossa terceira e última tentativa, iniciada em 25 de Julho de 2014, construímos um Cronômetro com um leitor de 7 segmentos com 1 dígito.
Este projeto envolveu os seguintes materiais:

Driver: HEF4511B (BCD to 7-segmentos)
Display de 7 segmentos de 1 dígito, Modelo LSD056AUE-20, Tipo: Anodo Comum
2 Resistores de 330k
4 pilhas AA 1,5v
Jumpers
1 Arduino Uno R3
1 Computador (para usar a IDE do Arduino e alimentar a placa Arduino)
Protoboard

A figura abaixo mostra a figura do esquemático que se encontra no datasheet do driver HEF4511B.




Os pinos 15, 14, 13, 12, 11, 10 e 9 são os pinos correspondentes aos dígitos
do display de 7 segmentos. Abaixo uma figura mostrando os pinos do display de 7 segmentos.




O display de 7 segmentos contém 5 pinos em cada extremidade.
Sempre os pinos centrais (terceiro) serão o pino VCC para Anodo Comum, que é o nosso caso.
A tabela abaixo é a descrição de cada item do Driver, &nbsp;qual sua função e onde deve ser ligado.








Abaixo a tabela de funções do datasheet do driver.



Notar que: Você Habilita (ou alimenta, HIGH) ou desabilita (desliga, LOW) as entradas EL, BI e LT de acordo com a numeração ao qual você irá utilizar, conforme a tabela.
Os Inputs Dd, Dc, Db e Da são os bits que serão compostos para formar a numeração em binário: 0001 representando 1, 0010 representando 2, e assim sucessivamente.
Então, as portas Dd, Dc, Db e Da são ligadas respectivamente nas portas do Arduino, a qual você pode controlar o trabalho destas portas, utilizando muito menos código e portas, visto que o registrador faz a maior parte do trabalho.






<embed src="https://www.youtube.com/get_player" type="application/x-shockwave-flash"
width="320" height="266" bgcolor="#FFFFFF"
flashvars="flvurl=https://redirector.googlevideo.com/videoplayback?requiressl%3Dyes%26id%3D1822ed64dc66dedf%26itag%3D5%26source%3Dblogger%26app%3Dblogger%26cmo%3Dsecure_transport%253Dyes%26cmo%3Dsensitive_content%253Dyes%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1504822573%26sparams%3Drequiressl,id,itag,source,ip,ipbits,expire%26signature%3D69762C9E40D4DA215761B81ABDDAE96657F83851.6E48CDD7C41EEA6A5AC80580EA8A4A826DE25074%26key%3Dck2&iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D1822ed64dc66dedf%26offsetms%3D5000%26itag%3Dw160%26sigh%3DX2-UeZWAC15ykru4H-eG3DFAXCg&autoplay=0&ps=blogger"
allowFullScreen="true" />


Cronômetro em pleno funcionamento

Segue abaixo o código Arduino composto no projeto:

// Inicio =================

byte latchPin[] = {5,4,3,2};

void setup() {
&nbsp; for (byte x=0; x&lt;4; x++) {
&nbsp; &nbsp; pinMode(latchPin[x], OUTPUT);
&nbsp; }
}

void loop() {
&nbsp; for (byte x=0; x&lt;10; x++) {
&nbsp; &nbsp; shiftOut(x);
&nbsp; &nbsp; delay(1000);
&nbsp; }
}

void shiftOut(byte dataOut) {
&nbsp; byte index = 3;
&nbsp; boolean pinState;
&nbsp; for (byte x=0; x&lt;=7; x++) {
&nbsp; &nbsp; if (dataOut &amp; (1&lt;&lt;x)) {
&nbsp; &nbsp; &nbsp; pinState = HIGH;
&nbsp; &nbsp; } else {
&nbsp; &nbsp; &nbsp; pinState = LOW;
&nbsp; &nbsp; }
&nbsp; &nbsp; digitalWrite(latchPin[index--], pinState);
&nbsp; }
}

// Fim =================


Conclusão
Isto foi bem diferente da primeira e da segunda tentativa, visto que o datasheet era mais compreensível que os anteriores, tanto do display de 7 segmentos quanto do driver para controle dos bits.
A abstração da equipe quanto a entender datasheets e o esquema dos componentes se tornou ainda mais fácil, devido ao excesso de procura e leitura de tais documentos.


Referências

http://ardoit.blogspot.com.br/2013/01/cronometro-regresivo-com-shift-register.html
http://www.oarduino.com/arduino-n-portas-ci-74hc595-output/
http://pdf1.alldatasheet.com/datasheet-pdf/view/243947/STMICROELECTRONICS/M74HC595B1R.html
http://www.microduino.cc/wiki/index.php?title=Lesson_21--Microduino_Four_Digital_Tube_Static_Display