Что делать, если стёрта калибровка OSCCAL у PIC12F675?
Обновлено Редакция GAW
У PIC12F629/675 внутренний генератор 4 МГц калибруют на заводе. Поправка хранится не в отдельной памяти, а в последней ячейке памяти программ 3FFh — в виде команды RETLW XX, где XX — значение для регистра OSCCAL. Программа при старте вызывает эту ячейку и записывает полученное число в OSCCAL.
Как устроена калибровка
| Что | Где | После стирания |
|---|---|---|
| Калибровка генератора | ячейка 3FFh, команда RETLW XX | 3FFFh — не 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 описывает только сохранение калибровки перед стиранием, а не её восстановление, поэтому порядок ниже — наш.
- Записать программу, которая выводит FOSC/4 на GP4: конфигурация INTOSC с выходом CLKOUT, в начале —
CALL 3FFhиMOVWF OSCCAL. - Записать в ячейку 3FFh
RETLW 0x80. В MPLAB IPE для этого в расширенных настройках включают Program Calibration Memory — запись областей с калибровочными значениями (MPLAB IPE User's Guide, DS50002227J). - Измерить частоту на GP4 частотомером или осциллографом: цель — 1 МГц, то есть 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 и слово конфигурации.
Источники
- 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 заводские, их сохраняют перед стиранием
- 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
- Microchip. MPLAB IPE User's Guide (DS50002227J) — Special Memory Regions — Program Calibration Memory: запись регистров с калибровочными значениями устройства; в настройках — Program calibration memory
Нашли ошибку?
Смотрите также
- Биты конфигурации PIC#pragma config XC8, слова CONFIG в hex и обратно, опасные LVP, MCLRE и CP
- OSCCAL (калибровка RC AVR)Регистр подстройки частоты внутреннего RC-генератора AVR
- Программирование PIC (ICSP)Выводы ICSP, VPP и LVP, ключ MCHP, схема у MCLR, PICkit 5, Snap, IPE
- Можно ли перепрошить PIC после MCLRE = OFF?Да, высоким напряжением: сначала Vpp на MCLR, потом питание