Перейти к содержанию

Насколько точен внутренний генератор ATmega328P?

Обновлено Редакция GAW

У ATmega328P есть встроенный RC-генератор на 8 МГц: с ним микроконтроллер работает без кварца, и именно на нём стартует новый кристалл. Его частота зависит от напряжения питания и температуры, поэтому точность в даташите дана для двух случаев.

КалибровкаУсловияТочность
Заводская8,0 МГц, 3 В, 25 °C±10 %
Пользовательская (OSCCAL)7,3–8,1 МГц, 1,8–5,5 В, −40…+85 °C±1 %

При сбросе в регистр OSCCAL загружается заводское значение. Точнее можно настроить вручную, записав в OSCCAL своё число, — тогда и получается ±1 %. Но это точность в точке калибровки: графики раздела 31 даташита показывают, что частота калиброванного генератора меняется с напряжением и температурой. Поэтому калибруют в рабочих условиях.

Хватит ли для UART

По даташиту ATmega328P приёмник UART при 8 битах данных допускает ошибку скорости около ±2 % в обычном режиме и ±1,5 % в режиме U2X — при условии, что передатчик ошибается не больше. Сравнение с генератором:

  • ±10 % с завода — в 5 раз больше допуска, и связь может не работать вовсе;
  • ±1 % после калибровки — укладывается, если питание и температура близки к тем, при которых калибровали, а делитель скорости подобран без своей ошибки.

Ошибку делителя для нужной скорости и частоты покажет калькулятор скорости UART.

Хватит ли для часов

Нет. Ошибка 1 % — это около 14 минут в сутки. Для часов берут кварцевый резонатор: часовой кварц 32 768 Гц на асинхронном таймере или кварц 16 МГц как основной генератор.

Как перевести ATmega328P на кварц или снять делитель CKDIV8, показывает калькулятор фьюзов AVR, а остальные характеристики микроконтроллера собраны на странице ATmega328P.

Похожие вопросы

Как откалибровать внутренний генератор ATmega328P?

Записать в регистр OSCCAL такое значение, при котором частота ближе всего к нужной: её измеряют частотомером на выводе CLKO, запрограммировав фьюз CKOUT, или сравнивают с точным внешним сигналом. После сброса в OSCCAL снова загружается заводское значение, поэтому найденное число программа записывает при каждом запуске.

Почему новый ATmega328P работает на 1 МГц, а не на 8 МГц?

С завода запрограммирован фьюз CKDIV8: он делит частоту внутреннего генератора 8 МГц на 8, и системная частота получается 1 МГц. Чтобы получить 8 МГц, фьюз CKDIV8 снимают.

Зависит ли частота внутреннего генератора от питания?

Да: Microchip прямо пишет, что частота RC-генератора зависит от напряжения и температуры. Заводская точность ±10 % дана только для 3 В и 25 °C, а ±1 % достигается калибровкой в конкретной точке диапазона 1,8–5,5 В и −40…+85 °C: стоит измениться питанию или температуре, и частота снова уходит.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B), 2020 — 9.6 — калиброванный внутренний RC-генератор около 8,0 МГц, при сбросе в OSCCAL загружается заводское значение, ручная запись OSCCAL даёт более точную калибровку; 9.9 — вывод тактовой частоты на CLKO включает фьюз CKOUT; кристалл поставляется с запрограммированным фьюзом CKDIV8 — системная частота 1,0 МГц; табл. 29-9 — заводская калибровка 8,0 МГц при 3 В и 25 °C ±10 %, пользовательская 7,3–8,1 МГц при 1,8–5,5 В и −40…+85 °C ±1 % — точность, которой можно добиться калибровкой в выбранной точке диапазона; разд. 31, рис. 31-369 — частота калиброванного генератора ATmega328P меняется с температурой; табл. 20-2 и 20-3 — рекомендуемая ошибка скорости приёмника для 8 бит данных ±2,0 % (U2X = 0) и ±1,5 % (U2X = 1)
  2. Microchip. AN2648: Selecting and Testing 32.768 kHz Crystal Oscillators for AVR Microcontrollers (DS00002648D) — выбор и проверка часового кварца 32,768 кГц для AVR, подключаемого к выводам TOSC1 и TOSC2 асинхронного таймера; разводка платы и проверка запаса генерации

Нашли ошибку?