Как восстановить калибровочную константу микроконтроллера PIC

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (7 оценок, среднее: 5,00 из 5)
Загрузка...

Довольно часто радиолюбители, которые пользуются простейшими программаторами, по незнанию или из-за несовершенства программного обеспечения программаторов затирают калибровочную константу микроконтроллеров. Это значение в последней ячейке памяти программ, с помощью которого программа микроконтроллера настраивает встроенный генератор до эталонной частоты.
Счастливые обладатели программаторов PICkit2 или PICkit3 могут легко восстановить калибровочную константу через меню Tools. 

А что делать тем, у кого нет такого программатора?
Этот нехитрый стенд предназначен для калибровки встроенного генератора микроконтроллеров PIC12F629 и PIC12F675.

Чтобы восстановить калибровочную константу Вам потребуется либо частотомер , либо мультиметр с функцией измерения частоты (например такой как XB-868). В калибруемый микроконтроллер сперва прошивается прилагаемая прошивка. В последнюю ячейку памяти программ надо будет вручную занести значение 0x3480 для начала процесса калибровки.
Затем подаёте питание на микроконтроллер и на выводе 3 частотомером или мультиметром контролируете частоту. С помощью конопок «+ FREQ» и «- FREQ» можно управлять частотой встроенного генератора, стараясь максимально точно приблизить контролируемую частоту к значению 1МГц.
После окончания калибровки надо будет обесточить контроллер и считать значение ячейки ЕЕ памяти по нулевому адресу. В ней будет записано калибровочное значение.
Последний шаг — записать в последнюю ячейку памяти программ значение 0x34xx, где последние две цифры — содержимое нулевой ячейки ЕЕ. Например, если после калибровки в ячейке будет значение 8С, то в последнюю ячейку памяти программ надо записать 0х348С.

В архиве содержатся файлы платы калибратора, схема и прошивка для микроконтроллера.

Если у Вас возникнут вопросы или Вы захотите связаться со мной, сделайте это с помощью формы на страничке «Обратная связь»

24 thoughts on “Как восстановить калибровочную константу микроконтроллера PIC

  1. когда впервые столкнулся с PIC некоторое время использовал программатор «на проводках»…помучился некоторое время и взял самодельный PICKIT2 🙂
    но «затертая калибровочная константа» до сих пор в дрожь бросает хотя так и не разу с этим не столкнулся

    1. Свободная ножка «болталась» в воздухе — сделал подтверждение сдвига частоты при нажатии на кнопку и заодно как показатель того, что контроллер запрограммирован и стартует верно. При удалённой полностью константе контроллер может вообще не стартовать. А так есть обратная связь. 🙂

  2. Здравствуйте.Собрал схему и на каком бы контроллере (пробовал на PIC12F629 и PIC12F675) не пытался восстановить константу (прошивал прошивку-кнопками вставлял частоту 1мгц на 3 выводе — считывал значение содержимого нулевой ячейки ЕЕprom ) содержимое нулевой ячейки ЕЕ равно всё время 80.

  3. Здравствуйте.Прошивал программатором pickit 2 , хотя ещё для «пиков» есть pickit 3 .Как понимаете восстановить константу есть чем но интересно почему ваше решение у меня не работает.Напряжение питания VCC как я понимаю 5 вольт ?.

  4. Да,странно.Ведь кнопками частота на 3 ножке 1МГц выставляется а почему ЕЕ памяти по нулевому адресу всё время 80 непонятно .Попробую ещё прошить на minipro.

  5. Всем привет.
    Подскажите, пожалуйста, калибровочную константу для PIC10F222. Получил из Китая чипы (в ленте), в памяти какая-то прошивка и затерта калибровочная константа (в последней ячейке 0xFFF). Контроллер шьется и читается, с этим проблем нет. Программатор PIC KIT 3, функции автоматического восстановления нету, но вручную прописать можно.
    Понимаю, что для каждого кристалла эта константа уникальная, но лучше хоть что-нибудь, чем 0xFFF.

      1. Маркировка A2CA, даташиту вроде соответствует. Может и подделка, но флешь пишется и читается. Это вселяет надежду 🙂
        В начале записано несколько строчек кода, а дальше — все FFF, включая и последнюю ячейку. Программатор ругается на некорректную константу. После стирания все ячейки становятся FFF.

  6. Нашел в сети «ногодрыг», немного подправил, чтобы выдавал 100 кГц:
    **********************************************************
    #include

    //CONFIG
    #pragma config IOSCFS = 8MHz
    #pragma config MCPU = OFF
    #pragma config WDTE = OFF
    #pragma config CP = OFF
    #pragma config MCLRE = OFF

    #define _XTAL_FREQ 8000000

    void main()
    {
    OPTION = 0;
    TRIS — 0;
    while(1)
    {
    GP2 = 1;
    __delay_us(5);
    GP2 = 0;
    __delay_us(5);
    }
    }
    **********************************************************
    Записал в контроллер, меандр на выходе есть, но амплитуда всего 0,3 В при питании 3,3 и период примерно 26 мкс (38,5 кГц), смотрел осциллографом. Причем период одинаковый как для значения калибровочной константы 0xC00, так и для 0xCFF
    Скорее всего микросхемы — отбраковка с какого-то проекта.

    1. Вряд ли отбраковка. Я с продуктами Майкрочип плотно с 96 года работаю. У них главный критерий продукции не мегагерцы, а качество. Самое высокое в отрасли. Кристаллы тестят в США и отбраковка идет в переплавку не корпусируясь. Видимо подделка. Китайцы воруют всё, даже топологию кристаллов пилят. Не всегда удачно.

      1. Может быть. Но тогда возникает вопрос — зачем писать что-то в память?
        В общем так, записал в чип калибровочную константу 0xC7F — золотая середина 🙂
        Залил прошивку LiVolt_222.hex — вроде корректно работает. Так что в не очень ответственных проектах можно юзать.
        В принципе, вопрос можно считать закрытым, но если у кого-то будет возможность считать константу с нового контроллера — выложите пожалуйста.

          1. Вы не правы с «золотой серединой». Согласно даташиту середина у него когда в OSCTUNE ноль записан. По поводу ногодрыга тоже усомнюсь. Тут надо на асме петлю наваять — как Си уложит быстрые переходы и как он будет генератор настраивать знают только авторы компилятора.. Мой PCWHD, например, первым делом последнюю ячейку в OSCTUNE молча закидывает, и дальше его не волнует что хотел программер…

  7. Тоже попробовал восстановить примерно полтора десятка 675 чипов, накопившихся с значениями оскала «от балды».
    Собрал схему на пинборде. Программатор Pickit3.
    Стабильно почему-то у всех выходит константа 80.
    Для пробы закрутил кнопками на 1.25 МГц, и тоже в епром выпало 80. Чюдесато…

    1. Для проверки попробовал шить контроллеры старым программатором К150.
      И все получилось — в еепром выдаются разные значения — и у разных чипов, и у одного при умышленно разных значениях частоты.

      1. Погонял устройство в разных режимах ..программатора.
        При старте пик действительно выставляет константу в 80h, но при нажатии кнопок и изменении частоты в память 0х00 пишется новое значение.
        Если в настройках программатора стоит сперва подача +5в, а лишь затем Vpp, контроллер успевает в панельке программатора запуститься и установить значение в 80.
        Почитайте инструкцию к программатору по установке режима программирования при котором сперва подается Vpp, вводя контроллер в режим программирования и запрещая его работу.

Добавить комментарий