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

Что делать, если стёрта калибровка OSCCAL у PIC12F675?

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

У PIC12F629/675 внутренний генератор 4 МГц калибруют на заводе. Поправка хранится не в отдельной памяти, а в последней ячейке памяти программ 3FFh — в виде команды RETLW XX, где XX — значение для регистра OSCCAL. Программа при старте вызывает эту ячейку и записывает полученное число в OSCCAL.

Как устроена калибровка

ЧтоГдеПосле стирания
Калибровка генератораячейка 3FFh, команда RETLW XX3FFFh — не RETLW
Калибровка опорного напряжения BG1:BG0биты 13–12 слова конфигурации 2007hединицы

Поле CAL5:CAL0 занимает биты 7–2 регистра OSCCAL: 000000 — наименьшая частота, 100000 — середина, 111111 — наибольшая (DS41190G, регистр 2-7). Середина диапазона — OSCCAL = 0x80; это же значение регистр получает при сбросе (DS41190G, табл. регистров: 1000 00--), поэтому с него и начинаем. Команда RETLW 0x80 — слово 0x3480 (наш расчёт по коду команды).

Восстановление (наш способ)

Microchip описывает только сохранение калибровки перед стиранием, а не её восстановление, поэтому порядок ниже — наш.

  1. Записать программу, которая выводит FOSC/4 на GP4: конфигурация INTOSC с выходом CLKOUT, в начале — CALL 3FFh и MOVWF OSCCAL.
  2. Записать в ячейку 3FFh RETLW 0x80. В MPLAB IPE для этого в расширенных настройках включают Program Calibration Memory — запись областей с калибровочными значениями (MPLAB IPE User's Guide, DS50002227J).
  3. Измерить частоту на GP4 частотомером или осциллографом: цель — 1 МГц, то есть 4 МГц / 4.
  4. Если частота ниже — увеличить значение CAL на шаг (+4 к байту), выше — уменьшить, и повторить.

Наш расчёт допуска: заводская калибровка по даташиту — 3,96–4,04 МГц при 3,5 В и 25 °C, то есть ±1 %; на выводе GP4 это 990–1010 кГц. Попадёт ли в это окно ручная подстройка, зависит от шага CAL и точности частотомера — это наша оценка, не гарантия Microchip. Калибруйте при том напряжении, при котором будет работать устройство.

Чем это грозит

Без калибровки внутренний генератор уходит от 4 МГц, и всё, что от него зависит — задержки, программный UART, таймеры, — сдвигается. Когда точность важна, надёжнее кварц; принцип подстройки генераторов описан в термине OSCCAL. Конфигурацию с выходом CLKOUT соберёт генератор битов конфигурации PIC, а подключение программатора разобрано в статье «Программирование PIC через ICSP».

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

Почему программа «зависает» на CALL 3FFh?

Пример даташита вызывает CALL 3FFh и ждёт, что там стоит RETLW с калибровкой. После стирания в ячейке 3FFh — 3FFFh, и это не команда возврата: процессор не вернётся из вызова как задумано (наш вывод из спецификации программирования, по которой в ячейке должна быть команда вида 11 01xx xxxx xxxx). Поэтому сначала восстанавливают RETLW.

А если стёрты биты BG1:BG0?

Это заводская калибровка опорного напряжения детектора питания и сброса, и вычислить её заново нельзя. Наш совет: если исходное значение не записано на корпусе или в журнале программатора, выключите детектор BOD и не полагайтесь на точность порогов сброса этого экземпляра.

Как не потерять калибровку в будущем?

Программаторы и среды Microchip сами читают OSCCAL и BG перед стиранием и восстанавливают их — так требует спецификация программирования. Опасны самодельные программаторы и полное стирание без сохранения. Перед экспериментами прочитайте кристалл и запишите значение ячейки 3FFh и слово конфигурации.

Источники

  1. Microchip. PIC12F629/675 Data Sheet (DS41190G) — 9.2.5.1 — калибровка — команда RETLW XX в последней ячейке памяти программ, пример: CALL 3FFh, MOVWF OSCCAL; стирание кристалла стирает и калибровку, её надо сохранить по спецификации программирования; регистр 2-7 — CAL5:CAL0 в битах 7–2, 111111 — максимум, 100000 — середина, 000000 — минимум; OSCCAL (90h) после сброса — 1000 00--; 9.2.6 — в режимах INTOSC и RC можно выводить FOSC/4 на GP4/CLKOUT; F10 — INTOSC 3,96–4,04 МГц при 3,5 В и 25 °C, 3,92–4,08 МГц при 2,5–5,5 В и 0…+85 °C; регистр 9-1 — BG1:BG0 заводские, их сохраняют перед стиранием
  2. Microchip. PIC12F629/675/PIC16F630/676 Programming Specification (DS41191D) — 2.3.1.9 — перед Bulk Erase прочитать OSCCAL в 0x3FF и слово конфигурации, после — восстановить OSCCAL и биты BG (13–12 слова 0x2007); ячейка OSCCAL должна содержать команду RETLW: 11 01xx xxxx xxxx
  3. Microchip. MPLAB IPE User's Guide (DS50002227J) — Special Memory Regions — Program Calibration Memory: запись регистров с калибровочными значениями устройства; в настройках — Program calibration memory

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