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

OSCCAL — калибровка RC-генератора AVR

Внутренний RC-генератор ATmega328P избавляет от кварца, но его частота зависит от экземпляра, напряжения и температуры. Подстроить её можно одним регистром — OSCCAL: после сброса в нём заводская поправка, а программа может записать свою.

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

OSCCAL (oscillator calibration register) — регистр микроконтроллеров AVR для подстройки частоты внутреннего калиброванного RC-генератора. У ATmega328P генератор даёт около 8 МГц, но частота зависит от экземпляра, напряжения и температуры. При каждом сбросе аппаратура записывает в OSCCAL заводскую поправку из байта калибровки, а программа может записать своё значение и подстроить частоту точнее (DS40002061B, разд. 9.6, 9.12.1).

Точность

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

Данные — по DS40002061B, табл. 29-9. Разница в десять раз показывает, зачем OSCCAL нужен: ±1 % — это точность установки, которой можно добиться ручной подстройкой, а не значение «из коробки».

Устройство регистра

  • CAL7 выбирает один из двух диапазонов частоты. Диапазоны перекрываются: OSCCAL = 0x7F даёт частоту выше, чем 0x80.
  • CAL6…0 подстраивают частоту внутри диапазона: 0x00 — минимум, 0x7F — максимум.

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

Что учесть

  • Новый кристалл поставляется с запрограммированным фьюзом CKDIV8, то есть с тактовой частотой 1 МГц от того же генератора; источник тактов и делитель задают фьюзы, их удобно разбирать в калькуляторе фьюзов AVR.
  • Сторожевой таймер работает от своего генератора 128 кГц, и OSCCAL на него не влияет.
  • Время записи EEPROM и флеш-памяти отсчитывается от этого генератора, поэтому при записи его не калибруют выше 8,8 МГц.
  • У ATtiny25/45/85 от RC-генератора работает PLL быстрой периферии, и OSCCAL меняет её частоту тоже; Microchip советует не поднимать генератор выше 8 МГц (даташит 2586Q).

Заводское значение хранится в байте калибровки рядом с сигнатурой. Когда нужна стабильная частота для UART или USB, надёжнее кварцевый резонатор; ошибку скорости UART для своей частоты считает калькулятор UART.

Частые вопросы

Хватит ли внутреннего генератора для UART?

С заводской калибровкой — не гарантированно: Microchip даёт ±10 % при 3 В и 25 °C (DS40002061B, табл. 29-9), а допустимая ошибка скорости приёмника UART — единицы процентов. После ручной подстройки OSCCAL точность ±1 % в диапазоне 1,8–5,5 В и −40…85 °C, этого для UART обычно хватает. Ошибку скорости для своей частоты считает калькулятор UART.

Почему после записи OSCCAL портится запись в EEPROM?

Время записи EEPROM и флеш-памяти отсчитывает тот же RC-генератор. Microchip предупреждает: если калибровать его выше 8,8 МГц, запись может не пройти (DS40002061B, разд. 9.12.1). Поэтому разгонять генератор через OSCCAL на время записи нельзя.

Где хранится заводское значение OSCCAL?

В байте калибровки — старшем байте адреса 0x000 области сигнатуры. При каждом сбросе аппаратура сама копирует его в OSCCAL (DS40002061B, разд. 28.4). Программатор может прочитать этот байт, например, чтобы сохранить его перед экспериментами.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet, DS40002061B — разд. 9.6 — калиброванный RC-генератор около 8,0 МГц, зависит от напряжения и температуры; кристалл поставляется с запрограммированным CKDIV8; при сбросе заводская поправка грузится в OSCCAL; запись OSCCAL программой даёт более точную калибровку; генератор сторожевого таймера при этом свой; 11.8 — сторожевой таймер считает такты отдельного генератора 128 кГц; 9.12.1 — OSCCAL: CAL7 выбирает один из двух перекрывающихся диапазонов (0x7F выше по частоте, чем 0x80), CAL6…0 — подстройка внутри диапазона; этот генератор задаёт время записи EEPROM и флеш, при записи не калибровать выше 8,8 МГц; 28.4 — байт калибровки в старшем байте адреса 0x000 области сигнатуры; табл. 29-9 — заводская калибровка: 8,0 МГц при 3 В и 25 °C ±10 %; ручная: 7,3–8,1 МГц при 1,8–5,5 В и −40…85 °C ±1 %
  2. Microchip. ATtiny25/45/85 Data Sheet, 2586Q — раздел о PLL: PLL ATtiny25/45/85 синхронизирован с RC-генератором, поэтому подстройка OSCCAL меняет и быструю частоту периферии; Microchip советует не поднимать RC-генератор через OSCCAL выше 8 МГц, иначе PLL выходит из рабочего диапазона

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