Вы можете довольно просто решить эту проблему программно, вообще не меняя аппаратное обеспечение (хотя вам может потребоваться более стабильная опорная частота), используя двоичные дроби, и вы можете сделать это таким образом, чтобы получить разрешение в миллисекундах и его можно было легко освободить. достаточно накопленных ошибок преобразования, чтобы вы могли увидеть фундаментальную точность любого источника, на который вы могли бы сослаться, включая атомные часы.
Что бы вы сделали, измените свое таймерное прерывание так, чтобы оно накапливалось в очень широком регистре, и к каждому прерыванию добавьте довольно длинное значение, которое будет настолько точным представлением отношения миллисекунды Земли к "миллисекунде Марса", сколько вы пожелаете.
Скажем ради аргумента, что вы хотели 32-битное разрешение для преобразования. Вы можете использовать 64-битный аккумулятор, где младшие 32 бита представляют дробь. Вы должны найти подходящее значение, чуть меньшее 2 ^ 32, которое представляет собой коэффициент преобразования. Каждый раз, когда срабатывает прерывание вашей миллисекунды, вы добавляете это значение к аккумулятору. Каждый раз, когда вы хотите запросить время, вы возвращаете верхние 32 бита, которые представляют собой количество прошедших полных миллисекунд Марса, в то время как младшие 32 бита сохраняются только внутри, чтобы избежать ошибки округления.
Использование длинных двоичных дробей, подобных этому, позволяет вам выполнять преобразование с той точностью, которую вы хотите. 32 бита почти наверняка слишком длинны для дроби, в то время как 32 бита для целых миллисекунд могут быть слишком короткими, но вы можете настроить их по своему усмотрению.
Между прочим, этот метод накопления в длинном регистре, но только для сообщения некоторого числа старших разрядов, - это то, как прямой цифровой синтез может привести к чрезвычайно высокочастотному разрешению.
Вы также можете рассмотреть возможность выполнения части преобразования, изменив отношение делителя от системных часов 8 или 16 МГц к прерыванию в миллисекундах, приблизив его к интервалу «миллисекунды Марса». Особенно, если вы хотите что-то более точное, чем дешевый кристалл, вы можете иметь дело с обычным эталоном 10 МГц, который определяется GPS или, более точно, атомными часами, так что вы можете заменить его обычным источником тактовых импульсов AVR 8/16 МГц и пересчитать соотношения делителей соответственно.