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). Программатор может прочитать этот байт, например, чтобы сохранить его перед экспериментами.
Источники
- 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 %
- Microchip. ATtiny25/45/85 Data Sheet, 2586Q — раздел о PLL: PLL ATtiny25/45/85 синхронизирован с RC-генератором, поэтому подстройка OSCCAL меняет и быструю частоту периферии; Microchip советует не поднимать RC-генератор через OSCCAL выше 8 МГц, иначе PLL выходит из рабочего диапазона
Нашли ошибку?
Смотрите также
- Фьюзы AVRБиты конфигурации AVR: тактирование, загрузчик, BOD
- Фьюзы AVRБиты фьюзов, заводские значения и avrdude
- Сигнатура AVR (signature bytes)Три заводских байта, по которым программатор опознаёт кристалл
- Скорость UARTUBRR, BRR, TH1 и ошибка скорости
- Кварцевый резонаторКварц у микроконтроллера: подключение, конденсаторы, часовой кварц