Ich bin dabei derzeit eine Atomuhr zu basteln (Physics Package ist noch unterwegs), und bin gerade beim Zählen und auswerten der Pulse angelangt.
Ich werde vermtulich erst mal einen 8-Bit-Atmel verwenden (für den Prototypen einen Arduino Mega 2560, fürs fertige Gerät vielleicht eine Teensy 2.0 mit 32u4). Ja, wie mich jemand zu recht belehrt hat ist das "Geriatronik", es gibt ARM-Controller die das alles mit links erschlagen, aber trotzdem würde mich eine "saubere" Vorgehensweise interessieren. Das ganze mit roher Rechenpower lösen kann ich ja noch immer. Ein Teensy 4.0 mit
600MHz-Arm Cortex hat sicher keinerlei Probleme, wie unelegant man auch immer programmiert.
Die AVR-Controller können einen Zähler an einen externen Pin hängen, mit oder ohne Prescaler und recht schnell zählen, ohne daß die eigentliche CPU belästigt wird. Das hab ich mittlerweile geschafft (nach einigem Datenblatt- Studium).
Meine Idee wäre die Pulse unterhalb der Sekunde so zu zählen (egal ob die vollen 10MHz oder schon was runtergeteiltes, z.B. 1000Hz für eine Millisekundenanzeige), und jede Sekunde, d.h. beim Überlauf des Zählers der Sekundenbruchteile, einen ausgelösten Interrupt mit einer ISR zu behandeln.
Jetzt habe ich folgendes Problem: Das ganze geht "meistens" sehr schnell (Sekunden erhöhen, fertig, Counter läuft alleine auf 0 zurück). Bei vollen Minuten muß ich die Minute erhöhen, das tut auch nicht weh.
Nur zu manchen Zeitpunkten (Jahresanfang Mitternacht GMT, Anfang Sommerzeit, Schaltjahre, Schaltsekunden) muß ich eventuell langwierigere Dinge machen. Gibt es außer "ganz ganz sicher sein, daß die Berechnung keine Sekunde dauert" noch Möglichkeiten wie man sowas abhandelt? Z.B. wie man den zeitkritischen Teil (Sekunden, Minuten) vom weniger zeitkritischen Teil (Stunden, Tage, Wochentag, Monat ...) getrennt abzuarbeiten?
Oder ist die Idee mit dem Interrupt überhaupt schlecht?
/ralph