Millis verkehrt Timer0 kompensieren

Schuppeste:
Kalibrierbare Uhr mit Timer 1 oder 2 - nach Strickmuster der Standard-Uhr

Man erfindet Quasi die hälfte von Timer0 neu.

Das ist nicht viel, und neu erfinden muß man da garnichts. Es reicht, wenn man beim Abschreiben die Konstanten FRACT_INC und MILLIS_INC durch Variablen ersetzt, die z.B. aus dem EEPROM geladen werden können.

MILLIS_INC gibt an, wieviele volle Millisekunden pro Timer-Überlauf vergangen sind.
FRACT_INC gibt an, wieviele Mikrosekunden zusätzlich vergangen sind. Wenn sich dieser Anteil auf über 1ms summiert hat, wird die aktuelle Zeit nochmal um 1ms erhöht.
Diese beiden Werten müssen bei der Kalibrierung bestimmt werden, die muß man natürlich neu erfinden :wink:

Alternativ kann man T1 (16 Bit) so hintrimmen, daß er genau nach 1ms zurückgesetzt wird, und dann einfach diese Überläufe als Millisekunden mitzählen. Damit wird aber (beim 328) der einzige 16 Bit Timer belegt, was zu Problemen bei Bibliotheken führen kann, die nur mit diesem Timer funktionieren. Bei den 8 Bit Timern (T0,T1) kommt man nicht exakt auf 1ms, dann muß obiges Schema verwendet werden. Man könnte mal nachschauen, ob sowas in der Timer1Lib bereits implementiert ist...

Gerade sehe ich, daß combie sowas schon programmiert hat, dann reduziert sich der Aufwand auf das Hinzufügen der Kalibrierung :slight_smile: