Довольно часто радиолюбители, которые пользуются простейшими программаторами, по незнанию или из-за несовершенства программного обеспечения программаторов затирают калибровочную константу микроконтроллеров. Это значение в последней ячейке памяти программ, с помощью которого программа микроконтроллера настраивает встроенный генератор до эталонной частоты.
Счастливые обладатели программаторов PICkit2 или PICkit3 могут легко восстановить калибровочную константу через меню Tools.
А что делать тем, у кого нет такого программатора?
Этот нехитрый стенд предназначен для калибровки встроенного генератора микроконтроллеров PIC12F629 и PIC12F675.
Чтобы восстановить калибровочную константу Вам потребуется либо частотомер , либо мультиметр с функцией измерения частоты (например такой как XB-868). В калибруемый микроконтроллер сперва прошивается прилагаемая прошивка. В последнюю ячейку памяти программ надо будет вручную занести значение 0x3480 для начала процесса калибровки.
Затем подаёте питание на микроконтроллер и на выводе 3 частотомером или мультиметром контролируете частоту. С помощью конопок «+ FREQ» и «- FREQ» можно управлять частотой встроенного генератора, стараясь максимально точно приблизить контролируемую частоту к значению 1МГц.
После окончания калибровки надо будет обесточить контроллер и считать значение ячейки ЕЕ памяти по нулевому адресу. В ней будет записано калибровочное значение.
Последний шаг — записать в последнюю ячейку памяти программ значение 0x34xx, где последние две цифры — содержимое нулевой ячейки ЕЕ. Например, если после калибровки в ячейке будет значение 8С, то в последнюю ячейку памяти программ надо записать 0х348С.
В архиве содержатся файлы платы калибратора, схема и прошивка для микроконтроллера.
Если у Вас возникнут вопросы или Вы захотите связаться со мной, сделайте это с помощью формы на страничке «Обратная связь»
когда впервые столкнулся с PIC некоторое время использовал программатор «на проводках»…помучился некоторое время и взял самодельный PICKIT2 🙂
но «затертая калибровочная константа» до сих пор в дрожь бросает хотя так и не разу с этим не столкнулся
Здравствуйте.Извините а можно узнать назначение светодиода в схеме ?
Свободная ножка «болталась» в воздухе — сделал подтверждение сдвига частоты при нажатии на кнопку и заодно как показатель того, что контроллер запрограммирован и стартует верно. При удалённой полностью константе контроллер может вообще не стартовать. А так есть обратная связь. 🙂
Здравствуйте.Собрал схему и на каком бы контроллере (пробовал на PIC12F629 и PIC12F675) не пытался восстановить константу (прошивал прошивку-кнопками вставлял частоту 1мгц на 3 выводе — считывал значение содержимого нулевой ячейки ЕЕprom ) содержимое нулевой ячейки ЕЕ равно всё время 80.
Весьма странно. А какой у Вас программатор?
Здравствуйте.Прошивал программатором pickit 2 , хотя ещё для «пиков» есть pickit 3 .Как понимаете восстановить константу есть чем но интересно почему ваше решение у меня не работает.Напряжение питания VCC как я понимаю 5 вольт ?.
Да, питание 5в. Но почему не работает мне трудно сказать. Гонял «в железе» на нескольких контроллерах и проблем не было.
Да,странно.Ведь кнопками частота на 3 ножке 1МГц выставляется а почему ЕЕ памяти по нулевому адресу всё время 80 непонятно .Попробую ещё прошить на minipro.
При прошивке на minipro калибровка контролера проходит правильно а вот что с pickit2 что с pickit3 ничего не получается.
Весьма странно.. Даже не знаю, на что грешить.
Извиняюс за спам! Как можно восстановить калибровочную константу с PICkit2 .
Меню Tools -> OSCCAL -> Auto Regenerate
покажет предупреждение о том, что данные в МК будут стерты, нажимаем на кнопку «Ok» и ждем пару секунд.
Всем привет.
Подскажите, пожалуйста, калибровочную константу для PIC10F222. Получил из Китая чипы (в ленте), в памяти какая-то прошивка и затерта калибровочная константа (в последней ячейке 0xFFF). Контроллер шьется и читается, с этим проблем нет. Программатор PIC KIT 3, функции автоматического восстановления нету, но вручную прописать можно.
Понимаю, что для каждого кристалла эта константа уникальная, но лучше хоть что-нибудь, чем 0xFFF.
Ни разу не видел, чтобы у 222 константы слетали. Скорее всего контроллеры подделка.
А что на них написано, маркировка на корпусе есть?
Маркировка A2CA, даташиту вроде соответствует. Может и подделка, но флешь пишется и читается. Это вселяет надежду 🙂
В начале записано несколько строчек кода, а дальше — все FFF, включая и последнюю ячейку. Программатор ругается на некорректную константу. После стирания все ячейки становятся FFF.
Откровенно говоря, даже не знаю, как лучше поступить. Никогда константы не слетали у 10-й серии..
Нашел в сети «ногодрыг», немного подправил, чтобы выдавал 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
Скорее всего микросхемы — отбраковка с какого-то проекта.
Вряд ли отбраковка. Я с продуктами Майкрочип плотно с 96 года работаю. У них главный критерий продукции не мегагерцы, а качество. Самое высокое в отрасли. Кристаллы тестят в США и отбраковка идет в переплавку не корпусируясь. Видимо подделка. Китайцы воруют всё, даже топологию кристаллов пилят. Не всегда удачно.
Может быть. Но тогда возникает вопрос — зачем писать что-то в память?
В общем так, записал в чип калибровочную константу 0xC7F — золотая середина 🙂
Залил прошивку LiVolt_222.hex — вроде корректно работает. Так что в не очень ответственных проектах можно юзать.
В принципе, вопрос можно считать закрытым, но если у кого-то будет возможность считать константу с нового контроллера — выложите пожалуйста.
PS. А с «ногодрыгом» все нормально? Косяков нету? Поскольку с программированием у меня сложились очень непростые отношения…
Вы не правы с «золотой серединой». Согласно даташиту середина у него когда в OSCTUNE ноль записан. По поводу ногодрыга тоже усомнюсь. Тут надо на асме петлю наваять — как Си уложит быстрые переходы и как он будет генератор настраивать знают только авторы компилятора.. Мой PCWHD, например, первым делом последнюю ячейку в OSCTUNE молча закидывает, и дальше его не волнует что хотел программер…
Тоже попробовал восстановить примерно полтора десятка 675 чипов, накопившихся с значениями оскала «от балды».
Собрал схему на пинборде. Программатор Pickit3.
Стабильно почему-то у всех выходит константа 80.
Для пробы закрутил кнопками на 1.25 МГц, и тоже в епром выпало 80. Чюдесато…
Для проверки попробовал шить контроллеры старым программатором К150.
И все получилось — в еепром выдаются разные значения — и у разных чипов, и у одного при умышленно разных значениях частоты.
Погонял устройство в разных режимах ..программатора.
При старте пик действительно выставляет константу в 80h, но при нажатии кнопок и изменении частоты в память 0х00 пишется новое значение.
Если в настройках программатора стоит сперва подача +5в, а лишь затем Vpp, контроллер успевает в панельке программатора запуститься и установить значение в 80.
Почитайте инструкцию к программатору по установке режима программирования при котором сперва подается Vpp, вводя контроллер в режим программирования и запрещая его работу.