ciao a tutti!
ho realizzato questo Binary Clock, prendendo spunto da uno visto in un negozio di gadget tempo fà!
L'idea mi è saltata fuori dipo il ritrovamento di due integrati SAA1064 in alcuni display di fotocopiatori! Dopo un'attento studio del data sheet e appreso l'uso della comunicazione I2C, in pochi minuti sono riuscito a scrivere "CIAO" sui 4 display a 7 segmenti presenti sul modulo!
bene, fatto ciò, ho dissaldato l'integrato e montato su BB! due ressistenze, un paio di NPN e una manciata di led.....ho creato il layout dell'orologio che avevo in mente!
Standard più che altro. l'ora viene visualizzata in BCD, quindi non in binario puro!
ho trovato un'immagine su google per spiegare meglio la disposizione dei led e la lettura! ma a voi non serve
Binary Clock
in allegato un'immagine del mio in fase di sviluppo!
allora, al momento ho deciso di usare la swRTC di Leo, e devo dire che funziona egregiamente! ma sono incappato in un problema di calcoli e visualizzazione che non riesco a superare in amniera semplice! forse voi più svelti con i calcoli in binario, avete già una soluzione pronta!
in pratica io mi muovo così:
#include <Wire.h>
#include <swRTC.h>
byte saa1064 = 0x76 >> 1;
byte Ore, Minuti, Secondi = 0;
swRTC rtc;
void setup()
{
Wire.begin();
delay(500);
rtc.stopRTC();
rtc.setTime(12, 18, 30);
rtc.setDate(5, 4, 2012);
rtc.startRTC();
initDisplay();
}
void initDisplay()
{
Wire.beginTransmission(saa1064);
Wire.send(B00000000);
Wire.send(B01000111);
Wire.endTransmission();
}
void displayDigits()
{
Wire.beginTransmission(saa1064);
Wire.send(2);
Wire.send(Secondi); // digit 1
Wire.send(Minuti); // digit 2
Wire.send(Ore); // digit 3
Wire.endTransmission();
delay(500);
}
void clearDisplay()
{
Wire.beginTransmission(saa1064);
Wire.send(2);
Wire.send(0); // digit 1
Wire.send(0); // digit 2
Wire.send(0); // digit 3
Wire.endTransmission();
}
void loop()
{
clearDisplay();
Secondi = rtc.getSeconds();
Minuti = rtc.getMinutes();
Ore = rtc.getHours();
//Qui serve l'aiuto per la conversione BCD!!!
displayDigits();
}
Lasciandolo così, funziona, ma non in BCD. il conteggio procede naturalmente in binario! ma nel modo in cui dovrebbe funzionare, nella prima riga di destra, arrivato a 9 deve ripartire da 0 e segnare 1 della seconda colonna da destra, per creare appunto il 10!
non sò se mi sono spiegato bene.
credevo inizialmente di aver risolto aggiungendo 6 ai byte dal 10 al 15, ma il problema si ripresenta arrivati a 19!!
in somma, sono arrivato ad annodarmi il cervello, e prima che iniziassi a delirare e parlare in binario col prossimo, ho deciso di scrivere qui!
sò già che mi sono espresso da cane, quindi resto qui a rispondere a chiarimenti, in caso!
grazie!!