Equipamento utilizado:
Arduino Mega 2560 (indiferente)
2 Shift registers 74HC595
4 Resistores 100ohms
7 Resistores de 300ohms
1 Display de sete segmentos quatro dígitos TOF-5461BH-N common anode
Os resistores de 100ohms devem ser conectados nos pinos que controlam os dígitos do display (segundo shift register da esquerda para a direita).
Os resistores de 300ohms são conectados com os segmentos do display.
/* projeto: Cronometro regresivo com shift register autor: Ilderado Idriis - seja bacana! Mantenha os créditos! site: http://ardoit.blogspot.com - Visite, comente, contribua com suas idéias! data: 20/jan/2013 */ // biblioteca para controlar eventos automaticamente com intervalo de tempo // http://www.pjrc.com/teensy/arduino_libraries/MsTimer2.zip #include<MsTimer2.h> const short latchPin = 4; // Pino 12 do 74HC595 (Latch) Vermelho const short dataPin = 2; // Pino 14 do 74HC595 (Data) Azul const short clockPin = 3; // Pino 11 do 74HC595 (Clock) Amarelo /* Valores que acendem os segmentos que exibem os números do display é utilizado o B na frente dos números para informar que é um número binário 1 = apagar segmento 0 = ligar segmento lembrando que está sendo utilizado um anodo comum, então 1 apaga e 0 liga */ const byte numeros[10] = { B00000001, // 0 B01001111, // 1 B00010010, // 2 B00000110, // 3 B01001100, // 4 B00100100, // 5 B01100000, // 6 B00001111, // 7 B00000000, // 8 B00000100 // 9 }; const byte digitos[4]= { // Valores que acendem os digitos do display B01000000, // 1 B00100000, // 2 B00010000, // 3 B00001000 // 4 }; // Contagem do cronômetro em Minutos:Segundos ex: d0d1:d02d3 / 05:00 short d0 = 0; short d1 = 5; short d2 = 0; short d3 = 0; // protótipo das funções void countdown(void); void ligar(byte, byte); void setup() { pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); MsTimer2::set(1000, countdown); // define intervalo para chamada da função de contragem regressiva MsTimer2::start(); // inicia chamada da função de contagem regressiva } void loop() { // Exibe os dígitos ligar(0,d0); ligar(1,d1); ligar(2,d2); ligar(3,d3); } // exibe digitos void ligar(byte digito, byte numero){ delay(3); // pausa para refresh do display digitalWrite(latchPin, LOW); // Shift registers em estado de recebimento de dados shiftOut(dataPin, clockPin, LSBFIRST, digitos[digito]); // digito a ser alterado shiftOut(dataPin, clockPin, LSBFIRST, numeros[numero]); // número que será exibido no dígito acima digitalWrite(latchPin, HIGH); // Fecha recebimento de dados dos shift registers } void countdown(){ // função da contagem regressiva, d0d1:d02d03 ex: 15:45 if(d3 > 0){ d3--; } else{ if(d2 > 0){ d2--; d3 = 9; } else{ if(d1 > 0){ d1--; d2 = 5; d3 = 9; } else{ if(d0 > 0){ d0--; d1 = 9; d2 = 5; d3 = 9; } } } } }
Boa noite Ilderaldo!
ResponderExcluirEsse 74HC595 que você utilizou, pode ser usado como um Demux de 3 entradas (8 saídas)??
Caso não, vc conhece algum componente que possa fazer essa função? Talvez o CD4051?!?
Valeu!
Thiago!
ResponderExcluirÉ exatamente assim que estou utilizando ele, apenas três entradas e sete saídas, assim economizo as saídas do arduino, mas cada um dos shift registers 74HC595 tem sete saídas e não oitos, porém você pode conectar um 74HC595 em outro, em quantidade infinita, ou seja, com 3 entradas de um você tem sete saídas nele mesmo e esse conectado em um segundo com mais sete saídas e se quiser esse segundo em um terceiro e assim vai.