MaFu:
Ich habe mich heute mal an deine Bibliothek drangesetzt.
/**
* Should be called every 15 ms in order to sample the DCF signal.
* Returns the current state of the signal: 1 for HIGH, 0 for LOW.
*/
bool readTime(unsigned char retries);
int scanSignal(void);
Wie ist das zu Verstehen? Muss ich wirklich alle 15ms einmal die Funktion aufrufen?
Kann man das irgendwie in der Bibliothek automatisieren? Vielleicht mit einem Timer Interrupt?
Und gibt es irgendeine Möglichkeit, zu prüfen, ob erfolgreich synchronisiert wurde?
Hintergrund ist, dass ich noch ein DS1307 RTC-Modul am Laufen habe, was die Uhrzeit angibt. Da soll natürlich nur reingeschrieben werden, wenn die Synchronisation erfolgreich war.
Und dann sind mir noch ein Paar Dinge aufgefallen:
struct DCF77Buffer
{
unsigned long long prefix :15 ;
unsigned long long Antenna :1 ; // wenn Bit gesetzt wird Reserveantenne benutzt
unsigned long long DSTChange :1 ; // Bit wird eine Stunde vor Zeitumstellung gesetzt
unsigned long long DST :2 ; // Sommer-/Winterzeit
unsigned long long LeapSec :1 ; // Ank?ndigung einer bevorstehenden Schaltsekunde
unsigned long long Start :1 ;
unsigned long long Min :7 ; // 7 Bits für die Minuten
unsigned long long P1 :1 ; // Parity Minuten
unsigned long long Hour :6 ; // 6 Bits für die Stunden
unsigned long long P2 :1 ; // Parity Stunden
unsigned long long Day :6 ; // 6 Bits für den Tag
unsigned long long Weekday :3 ; // 3 Bits für den Wochentag
unsigned long long Month :5 ; // 3 Bits für den Monat
unsigned long long Year :8 ; // 8 Bits für das Jahr **eine 5 für das Jahr 2005**
unsigned long long P3 :1 ; // Parity von P2
};
struct DCF77Parity
{
unsigned char parity_flag :1;
unsigned char parity_min :1;
unsigned char parity_hour :1;
unsigned char parity_date :1;
};
Was bedeuten die Zahlen hinterm Doppelpunkt? Kann ich annehmen, dass damit die einzelnen Bits belegt werden? Gibt es zu dieser Syntax einen Namen? Sowas habe ich nämlich noch nie gesehen...
Ein long long hat 64 Bit, richtig?