Наивысшая точность измерения БАУДРАТА и ИЗМЕРЕНИЯ ВРЕМЕНИ от Atmega

В моем проекте мне нужна самая высокая доступная скорость передачи данных UART между Atmega328p и BTM-222, поэтому я должен использовать кристалл 18,432,000 МГц для достижения скорости передачи 460,8 кбит / с без ошибок.

Но в то же время мне нужно измерение времени с высокой точностью. Раньше, когда я использовал кристалл с частотой 16 МГц, я использовал этот метод: Timer0 с 64 / предделителем. Так что для установки счетчика потребовалось 4us.

(1/16000000)*64 = 4us

4 мкс было моим разрешением измерения. Подсчет переполнения: переполнение счетчика происходит каждые 1024 мкс.

4us * 256 = 1024us

Тогда для получения масштабированного в нас времени существует уравнение:

время (uint32) = current_counter * 4 + overvlow_counter * 1024

Все просто, потому что умножение x4 и x1024 - это битовый сдвиг. Я использую длинное целое число, поэтому самое долгое время, которое я могу измерить, составляет

2 ^ 32 * 1 мс = 71 минута.

Отлично!

Затем, когда я использую кристалл 18432000 МГц, получается (1/18432000) * 64 = 3,47 (2), поэтому его нельзя вычислить с использованием моего простого предыдущего кода.

Может у вас есть идеи, что мне делать? У меня есть один: использовать внешний источник тактовой частоты 1MHz timer0, поступающий от кристалла. Мой вопрос: как подключить кристалл 1 МГц к выводу T0 и обеспечить источник тактовой частоты для timer0?


person Pierwiastek    schedule 09.04.2016    source источник


Ответы (1)


Здесь есть несколько терминов, которые вы, кажется, запутали: точность, точность и удобство.

Ваш вопрос спрашивает, как сделать ваш код удобным, допуская простые битовые сдвиги.

Но вы жертвуете точностью, используя битовые сдвиги, чтобы увеличить интервалы.

Если вам действительно нужна точность, как вы говорите в заголовке своего вопроса, тогда вам следует использовать самый точный кристалл, который выглядит как 18,432 МГц, и выполнять арифметические операции в своем коде. Если вам нужна более высокая точность, используйте больше переменных для хранения результатов синхронизации. Если вам нужна точность, установите часы на счетчик до 18432, прежде чем увеличивать счетчик миллисекунд.

Худшее решение - подключить и дополнительный кристалл. Он стоит дороже, менее точен и точен.

person uncleO    schedule 10.04.2016