Arduino программатор PIC-ов.

Arduino программатор PIC-ов.
Иногда встречаются очень интересные проекты выполненные на микросхемах PIC. Это микроконтроллеры с RISC архитектурой,
производимые фирмой Microchip Technology. Программаторы для PIC сложные и дорогие. Чтобы сделать программатор для PIC, нужен программатор для PIC, замкнутый круг для самодельщина. Но у нас есть Arduina! Сделаем из ардуины очень дешевый, очень простой, но работающий как очень дорогие HVSP программаторы микроконтроллеров от Microchip Technology.

HVSP - это High Voltage Serial Programming, высоковольтное последовательное программирование. Высоковольтное программирование позволяет сделать рабочим окирпиченный PIC контроллер из за неправильно выставленных фьюзов или заблокированных ног используемых при низковольтном программировании. В общем без разницы в каком состоянии Вам пришлют хитрые китайцы микроконтроллер, главное, чтобы он был аппаратно живой. А разлочить можно и ардуиной. Запрограммировать можно и ардуиной.

Схема.
программатор.PNG


Сборка на макетной плате.

maket.jpg

Настройка Step-UP DC-DC
13V.jpg


Пример работы программатора сделанного из ардуино нано в макете с парой дополнительных деталей которые можно выдрать из старой техники. Единственное для удобства я использовал повышающий преобразователь для получения 13V нужных для высоковольтного программирования. Удобство заключается в том, что просто вставляете программатор в USB и работаете не заморачиваясь на необходимости подачи внешнего питания. Иначе просто можно подать это напряжение от внешнего блока питания и схема станет еще проще.

pic16f628a.jpg
programmator-avr-svoimi-rukami.jpg
 

Вложения

Изменено:

Комментарии

Eig

✩✩✩✩✩✩✩
3 Май 2021
38
2
@Lazy-R, в моем форке это строчка 410 в функции EraseButton_Click. Там высылается запрос (strProgramMemory, OK), который стирает записанное в этот буфер в RetrieveDeviceParameters при подключении микроконтроллера. Само собой, пропадает и значение регистра калибровки генератора тактовой частоты OSCCAL.
Всё это очень легко исправляется, но у меня нет вашего микроконтроллера, а он стоит стольник.
 

Lazy-R

✩✩✩✩✩✩✩
27 Май 2021
2
0
Это как говорится -"очень интересно, но ничего не понятно".
Меня в принципе и так радует эта программа , я просто предупредил последоаателей чтоб были осторожней с этими константами , ну и как вариант решения этого вопроса.
 

Eig

✩✩✩✩✩✩✩
3 Май 2021
38
2
@Lazy-R, а вот меня эта программа не радует. Консольная гораздо лучше, и надо было просто сделать для нее графический интерфейс. Спасибо за ваше сообщение, я внесу изменения, когда обзаведусь этим микроконтроллером.

upd1: вызов, который затирает всю флэш-память в функции EraseButton_Click вместе с ячейкой памяти 03FF, в которой содержится OSCCAL в виде инструкция + константа (например, 34 5C):
C-like:
Call mySerialLink.SendDataToSerial("ERASE" & vbCrLf)
upd2: всё очень плохо. Функция стирания чипа находится не в клиенте ArdPicProgHost.vb, а на сервере ProgramPIC.ino, который грузится в Arduino. Место, в котором происходит крамола, обнаружено, но как его исправить я пока не знаю.
 
Изменено:

Palomo

✩✩✩✩✩✩✩
17 Июл 2021
1
0
Ребята, так когда же будет полноценная версия програматора, и соф и хард?
 

Eig

✩✩✩✩✩✩✩
3 Май 2021
38
2
@Palomo, когда сами сделаете. Курите серверную часть - у меня не получается починить стирание таким образом, чтобы оно не трогало калибровочную константу.
 

Аллайя

✩✩✩✩✩✩✩
20 Июл 2021
11
1
А с чего решили, что там 13 вольт должно быть? Моя схемка повеселей будет:
Схема.pngПлата 1.pngПлата 2.png

P.S. на схеме R3 и R4 подключены без учета наличия светодиода. Если хотите включить в схему светодиод, удалите эти резисторы из схемы, а у R2 измените номинал до 1 кОм...
Вместо DC-DC преобразователя можно применить такую схему (проверялось, но не на всех МК):
Дополнение.png
В таком случае, в скетче необходимо дописать функции:

//#define PIN_PWM25K 9

void pwm25k_init(void)
{
TCCR1A= 0; TCCR1B= 0;
TCNT1= 0;

// Nichtinverter PWM Kanal A und B; Modus 10h: Phase korrekt
TCCR1A= _BV(COM1A1) | _BV(COM1B1) | _BV(WGM11);

// Prescaler= 1
TCCR1B= _BV(WGM13) | _BV(CS10);

// Werte von 0 bis 320 werden vom PW interpretiert
ICR1= 320;
}

void pwm25k_set(unsigned int value)
{
OCR1A= value;
}

А в setup подставить:

// generate a 25 kHz clock output for step-up converter
pinMode(PIN_PWM25K, OUTPUT);
pwm25k_init();
pwm25k_set(55); // 25kHz using 220uF capacitor to buffer +12V

Вывод +12 вольт подключается к коллектору транзистора Q1 (на первой схеме) через резистор на 10 кОм (по первой схеме) вместо положительного выхода DC-конвертера.
 

Вложения

Изменено:

Eig

✩✩✩✩✩✩✩
3 Май 2021
38
2
@Nnm, всё наоборот. В оригинальной схеме топика ошибок нет. Там очень широкий простор для модификаций, который практически не способен убить функциональность. Схема просто рассчитана на практически идеальное питание. Поэтому на вход нужно ставить большой и толстый конденсатор как в моей реализации или вообще выпрямитель.
Задам риторический вопрос: у вас сие устройство не стирает калибровочную константу pic12f629? Потому что у меня при отладке серверного кода (на ардуине) оно не желает даже переходить на ветку, ответственную за обработку именно pic12f629/675, в которой КК снова должна записываться.

Вот тут я собрал весь клиентский и серверный код, и последнюю версию платы в kicad. Исправлена куча ошибок оригинальных авторов. Всё работает, кроме pic12f629/675. Может всё-таки здесь найдется гений работы с чужим кодом?
 

Eig

✩✩✩✩✩✩✩
3 Май 2021
38
2
@Nnm, хорошо. Тогда, пожалуйста, прикрепите сюда клиент и сервер. Именно те версии, которые вы использовали, потому что на данный момент их уже люди наплодили невероятное количество. Возможно напряжение на PIN_VDD как-то влияет на решение в какую ветку прыгать.
 

Eig

✩✩✩✩✩✩✩
3 Май 2021
38
2
@Nnm, Хорошо, спасибо. Я в начале-середине октября проверю вашу реализацию. Возможно ваша внимательность позволит наконец-то создать рабочую версию хотя бы для наиболее популярных микроконтроллеров.
 

Eig

✩✩✩✩✩✩✩
3 Май 2021
38
2
@Nnm, да, это может влиять. Это я мог удалить только случайно, спасибо за помощь.

upd: удаленная строчка не влияет – константа все равно затирается. Буду анализировать отличия вашей реализации.
 
Изменено:

Eig

✩✩✩✩✩✩✩
3 Май 2021
38
2
@Nnm, Моя версия Arduino 1.9.0-beta. У меня все собирается.
Проверил ваш вариант схемы, добавив резистор 47 Ом между PIN_VDD и PIC_VDD. И разорвав питание PIC_VDD от 5 Вольт. При таком питании не происходит инициализации PIC. Вернее, на четверть секунды что-то появляется в интерфейсе, и затем все поля становятся пустыми. Похоже, не хватает питания. Возможно это связано с наличием дополнительных элементов в цепи и суммарной длиной дорожек цепи, так как у меня там два слота для разных типов PIC. Попробую кинуть проводок напрямую и еще сильнее порезать схему.

Насколько я понимаю +5в у вас в процессе работы с PIC-а никогда не пропадает.
Так и есть. И, как выясняется, это не мешает программировать, например, pic16f628a. А вот PIC12F629/675 требуют перезаписи калибровочной константы, что требует программного управления питанием (5V). И именно поэтому в оригинале питание организовано через пин D2.

UPD: Получилось при прямом подключении D2 и PIC_VDD через резистор 47 Ом – константа перезаписывается. Похоже, мешал электролитический конденсатор.

@ТехнарьКто, В начале темы приведен ПРОВЕРЕННО НЕРАБОТАЮЩИЙ на недокументированных возможностях программатор из Ардуины. По факту пришлось капитально править код для PIC16F, чтобы оно стало юзерфрендли, а PIC12F работает в таком режиме, но затирает калибровочную константу, ЧТО ПРИМЕНЕНИЕ ТАКОЙ СХЕМЫ СВОДИТ НА НЕТ. По сути вы устроили флейм на 5 страниц. Никакой фичи в этом нет, если она практически не применима.

UPD2: Внес изменения в репу. Добавил скомпилированный hex ProgramPIC. Теперь все питается через D2. Тумблером выбирается PIC16F или PIC12F, иначе нет никакой гарантии, что это будет работать. Электролит убрал, потому что питание теперь через Arduino.
 
Изменено:

Eig

✩✩✩✩✩✩✩
3 Май 2021
38
2
@Nnm, спасибо за информацию о неотображающейся FLASH-памяти. Она сейчас отображается для PIC16, но не отображается для PIC12. Сделаю правки.

UPD: Все, теперь отображается.
 
Изменено:

ТехнарьКто

★★★★★✩✩
13 Янв 2020
273
435
И разорвав питание PIC_VDD от 5 Вольт. При таком питании не происходит инициализации PIC. Вернее, на четверть секунды что-то появляется в интерфейсе, и затем все поля становятся пустыми. Похоже, не хватает питания.
Ох уж эти программисты 😂

Подсказка, без VDD оно вообще не работает.

High Voltage Programming, «Vdd-first». Суть метода: сначала подаётся рабочее напряжение (Vdd), потом, не раньше, чем через промежуток времени (T1), подаётся напряжение программирования (Vpp). Через промежуток (T2) контроллер перейдёт в режим программирования и можно будет начинать обмен данными используя линии clock и data. На начальном этапе пока контроллер переводится в режим программирования на интерфейсных ногах должен быть нулевой уровень. Ниже представлена соответствующая диаграмма сигналов:
progr_pic_6_2.gif

High Voltage Programming, «Vpp-first». Суть метода: сначала на подаётся напряжение программирования (Vpp), потом, не раньше, чем через промежуток времени (T1), подаётся питание (Vdd). Через промежуток (T2) контроллер перейдёт в режим программирования и можно будет начинать обмен данными используя линии clock и data. На начальном этапе, всё то время, пока контроллер переводится в режим программирования, на интерфейсных ногах должен быть нулевой уровень. Ниже представлена диаграмма сигналов, соответствующая этому алгоритму:
progr_pic_6_1.gif


PS В моей схеме это работает рамдомно, но работает. По крайней мере понимаю, почему с аппаратной точки зрения это работает. Поэтому и как фича, не документированная, но работающая.
 

Eig

✩✩✩✩✩✩✩
3 Май 2021
38
2
@yaroslavochkin, в ProgramPic нет поддержки этого микроконтроллера.
В ArdProgHost, по факту, есть только в моей версии, но все равно нужно вносить небольшие изменения. "Из коробки" не заведется.
 

Иван 87

✩✩✩✩✩✩✩
11 Сен 2018
18
1
Можно данным программатором прошить PIC18F25K50-I/SO ?
вроде у него пониженное напряжение питания или прошивки ?
 

Eig

✩✩✩✩✩✩✩
3 Май 2021
38
2

@Иван 87,
смотрите репу. В файле ProgramPic.ino есть список того, что поддерживается. Этот программатор поддерживает самые популярные pic12 и pic16.
 

Иван 87

✩✩✩✩✩✩✩
11 Сен 2018
18
1
Анекдот чтобы собрать программатор ChipStar-Janus нужно прошить PIC18F25K50-I/SO чтобы прошить PIC18F25K50-I/SO нужен программатор и дешевые варианты его не прошивают
 
  • Лойс +1
Реакции: poty

Eig

✩✩✩✩✩✩✩
3 Май 2021
38
2

@Иван 87, это не анекдот, а сайт барыги. Я купил PicKit3 за 920 рублей, а это существо хочет 2500 за свое поделие. Скоро распродажа на али...
 

Иван 87

✩✩✩✩✩✩✩
11 Сен 2018
18
1
Eig
Мне нужен этот программатор для прошивки нанд флеш тсоп 48 микросхем PicKit3 такое прошить не способин. У меня есть программатор chipprog +
на 40 контактов и даже он может их прошить только адаптера нет для него.
 

smit5

✩✩✩✩✩✩✩
9 Ноя 2021
1
0
Если кому интересно,прошил 16F628a подав напряжение 12в через сопротивление 10кОм прямо на 4 ножку PIC. До этого ничего не получалось,мк. не определялся.