Sie können dies in Software ziemlich trivial lösen, ohne die Hardware zu ändern (obwohl Sie möglicherweise eine stabilere Referenzfrequenz wünschen), indem Sie binäre Brüche verwenden, und Sie können dies auf eine Weise tun, die Ihnen eine Millisekundenauflösung gibt und leicht frei gemacht werden kann genug von kumulativen Konvertierungsfehlern, damit Sie die grundlegende Genauigkeit jeder Quelle sehen, auf die Sie verweisen könnten, einschließlich einer Atomuhr.
Ändern Sie Ihren Timer-Interrupt so, dass er sich in einem sehr breiten Register ansammelt, und fügen Sie zu jedem Interrupt einen ziemlich langen Wert hinzu, der das gewünschte Verhältnis von Erdmillisekunde zu "Marsmillisekunde" genau wiedergibt.
Nehmen wir als Argument an, Sie wollten eine 32-Bit-Auflösung für die Konvertierung. Sie könnten einen 64-Bit-Akkumulator verwenden, wobei die unteren 32 Bit den Bruch darstellen. Sie würden lediglich den entsprechenden Wert ermitteln, der etwas kleiner als 2 ^ 32 ist und den Umrechnungsfaktor darstellt. Bei jedem Auslösen Ihres Erd-Millisekunden-Interrupts addieren Sie diesen Wert zum Akku. Jedes Mal, wenn Sie die Uhr abfragen möchten, geben Sie die oberen 32 Bit zurück, dh die Anzahl der gesamten verstrichenen Mars-Millisekunden, während die unteren 32 Bit nur intern beibehalten werden, um Rundungsfehler zu vermeiden.
Wenn Sie lange binäre Brüche wie diese verwenden, können Sie eine Konvertierung mit beliebig hoher Genauigkeit durchführen. 32 Bit ist mit ziemlicher Sicherheit zu lang für den Bruch, während 32 Bit für die gesamten Millisekunden zu kurz sein können, Sie können sie jedoch nach Bedarf anpassen.
Übrigens kann durch diese Technik der Akkumulation in einem langen Register, bei der jedoch nur einige höchstwertige Bits gemeldet werden, eine äußerst hohe Frequenzauflösung durch direkte Digitalsynthese erzielt werden.
Sie können auch einen Teil der Konvertierung in Betracht ziehen, indem Sie das Verhältnis des Teilers vom 8- oder 16-MHz-Systemtakt zum Millisekunden-Interrupt ändern und es näher an das Intervall einer "Mars-Millisekunde" heranrücken. Vor allem, wenn Sie etwas genaueres als einen billigen Quarz wollen, haben Sie es möglicherweise mit einer üblichen 10-MHz-Referenz zu tun, die von einem GPS oder direkt von einer Atomuhr diszipliniert wird. Sie könnten also die übliche AVR-8/16-MHz-Taktquelle ersetzen und neu berechnen Teilerverhältnisse entsprechend.