Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

USB программатор PIC из Arduino

В предыдущей моей статье про программатор spi flash и i2c eeprom из arduino после её публикации самый первый вопрос-комментарий был "программирует ли он PIC-и?". Вопрос, конечно, от невнимательного читателя, но он лишний раз подтвердил, что, хоть микроконтроллеры PIC довольно старые, но до сих пор ещё пользуются большим интересом у радиолюбителей, так как за долгое время было разработано огромное количество устройств на их базе. Но вот прошивать эти микроконтроллеры - то ещё приключение. Как известно для PIC-ов есть множество различных программаторов: простейшие, типа несколько проводков для LPT или COM портов (типа JDM и других), USB программаторы (PICKIT1,2,3 и их самодельные клоны). У обоих видов есть свои плюсы и минусы: первые - очень просты в сборке, но требуют наличия соответствующих портов, которые не всегда есть в современных ПК, а тем более в ноутбуках. Вторые - очень удобно использовать, так как они подключаются по USB, их можно подключать к любому современному и не очень ПК/ноутбуку, но! у них тоже есть весомый недостаток - они не очень дешёвые (даже на известном китайском маркетплейсе PICKIT2 стоит порядка 15-20$, а микроконтроллер PIC18F2550 для сборки самодельного PICKIT2 порядка 10$ и то не факт, что не нарвётесь на подделку/перемаркировку/горелку). Не каждый начинающий и даже более опытный радиолюбитель захочет покупать такой программатор, если ему он может пригодиться раз-два в год. 

Так вот, после того самого комментария у меня возник спортивный интерес, смогу ли я сделать свой программатор для PIC-ов? Тем более, ранее я уже пытался "бороться" с этими микроконтроллерами. И скажу честно, у меня в первый раз не получилось ничего, от слова "совсем". Даже ID PIC16F73 не смог прочитать. Но уже тогда я понял, что эта задача - крайне сложная. Даже не из-за моего неудачного опыта. Просто я почитал несколько "Programming datasheet" на разные линейки PIC-ов и был просто в ужасе: оказалось что у этих "камней" куча подсемейств, состоящих от 1-2 представителей до нескольких десятков. И таких подсемейств - просто огромное количество. А самое интересное, что все они программируются по разному: у некоторых всего 6-8 команд, а в некоторые вообще нужно пихать ассемблерные коды через программатор! Единственное, что их объединяет - это название пинов для подключения программатора (PGC, PGD, PGM и MCLR). На этом сходства заканчиваются. Даже, например, PIC16F84 и PIC16F84A или PIC16F628 и PIC16F628A в плане программирования - это совсем разные "камни"! Но и это ещё не всё!!! Вторая, не менее важная проблема - это HEX-файлы для PIC-ов. У них тоже нет никакого стандарта! В одном единственном файле располагается CODE сегмент (т.е. основная программа), DATA сегмент (т.е. EEPROM) и слова конфигурации. А самое смешное, что у каждого подсемейства все эти сегменты располагаются по разным адресам смещения и количество конфигурационных слов - тоже у всех разное. Наверное, после этого до меня дошло, почему PICKIT такой дорогой? Это ж у программиста может съехать крыша в попытках хоть как-то стандартизовать алгоритмы программирования такого "приятного разнообразия". Представляю, как инженеры Microchip в своё время вели разработку: "А давайте, следующая линейка будет программироваться не командами, а ассемблерными кодами ядра и желательно развёрнутыми задом-наперёд... А что? Нечего программистам расслабляться". 

 Но вот, прошло некоторое время, у меня появились свои наработки в плане программного обеспечения и схемотехники, и я решил попробовать снова побороть PIC-и. Накидал в голове приблизительный алгоритм, как можно более-менее унифицировать софт. А также продумал "железную" часть программатора. С описания которой я, пожалуй, и начну.

За основу программатора я решил взять пятивольтовый микроконтроллер, так как логические уровни большинства PIC-ов именно 0 - 5 вольт (не считая PIC24, dsPIC, но о них я даже и думать не хотел). Я мог взять что-то очень дешёвое, типа STC8, но решил, что они не очень популярны и сделал свой выбор в пользу AVR. Тем более, что они используются в известнейших платах arduino, которые найдутся в загашниках почти любого радиолюбителя, да и стоят не очень дорого (относительно). Но одной лишь платы arduino или микроконтроллер AVR для программирования PIC-ов будет недостаточно. Наверное, многие знают, что микроконтроллеры PIC (большинство PIC16, PIC18) используют высоковольтное программирование, т.е. для входа в режим программирования необходимо подавать на определённый пин (MCLR) повышенное напряжение 12-13 вольт. Нужен дополнительный источник повышенного напряжения и схема управления подачей этого самого напряжения. Так вот, в первом варианте схемы я решил использовать повышающий преобразователь напряжения на микросхеме MC34063A, чтобы питать программатор исключительно от USB. И он заработал!!! Но радость "победы" длилась недолго. Программатор читал прошивку, читал ID, конфигурационные биты, но упорно отказывался стирать/записывать. В Programming datasheet я увидел, что операции записи/стирания требуют напряжения питания VDD 4,5-5,5 вольт. Я решил померять напряжение VDD во время процесса чтения и получил огромную просадку до 3,8 вольта. Естественно, при такой просадке о записи/стирании и речи идти не могло. Поэтому, я решил отказаться от идеи с преобразователем напряжения в пользу дополнительного источника питания 12 вольт. И это дало результаты - с внешним источником 12 вольт процессы стирания и записи пошли! В итоге уже второй вариант схемы - стал окончательным. Схема получилась очень простая. Я не стал использовать буферных элементов на дискретной логике, а сделал ключи управления напряжениями VPP и VDD (12в и 5в) на транзисторных ключах (2 каскада каждый). Также в схеме используется линейный стабилизатор на 5 вольт (7805). Стабилизацию по 12 вольтам я решил не ставить, так как боялся, что некоторые PIC-и могут потребовать более высокое напряжение (12,5-13,5 вольт) и с установленным стабилизатором типа 7812 поменять напряжение VPP уже не получится. В итоге, получилось не очень сложная схема. Под силу даже новичку с советским паяльником толщиной с палец:

Схема USB программатора PIC из Arduino

Выглядит как-то так (все детали в SMD исполнении, расположены на нижней стороне платы):

USB программатор PIC из Arduino

На фото - первый вариант платы, я его показываю исключительно для наглядности, как можно скомпоновать плату-шилд для arduino nano.

Окончательный вариант своего программатора я сделал в виде отдельной платки с ATmega328P. Схема её следующая:

Я не рисовал ключи управления напряжениями на этой схеме, иначе бы она заняла  пол экрана. Здесь изображена схема подключения атмеги к USB-UART конвертеру и ключам управления напряжениями. Моя окончательная плата программатора выглядит следующим образом (сразу извиняюсь за остатки флюса и ваты, которой я пытался отмыть флюс):

Платка получилась достаточно компактная, всего 44х47 мм, это всё благодаря миниатюрной микросхеме USB-UART преобразователя CH340E, которая к тому же не требует подключения кварцевого резонатора и атмеге в корпусе TQFP32, которая тоже занимает места не очень много. Линейный стабилизатор и вся мелочёвка также в SMD исполнении. Кстати, транзисторы я использовал Q1,Q2 - MMBT3904 (маркировка корпуса 1AM), Q3,Q4 - BC856 (маркировка корпуса 3B). Рисунок своей печатной платы я выложу в конце статьи. Хотя, плату каждый может сделать под имеющиеся компоненты. Кстати, при наличии у USB-UART преобразователя сигнала DTR, его необходимо повесить на пин RESET атмеги через конденсатор 0,1uF, чтобы работал автоматический сброс при программировании атмеги через UART bootloader. Как раз у CH340E этого сигнала нет и приходится сбрасывать атмегу вручную кнопкой.

Теперь поговорим о софте. Программу для ПК я традиционно написал в среде MS Visual Studio на C#. Внешний вид первой версии программы такой:

Интерфейс программы, думаю, не окончательный, потому что я не в силах предугадать, какие ещё параметры могут быть у каких либо семейств PIC и что надо добавить/убавить. Будет видно потом, в ходе добавления новых МК.

Как видите, есть два больших текстовых поля с данными CODE (верхнее) и DATA (нижнее) сегментов прошивки. Семь текстовых полей для слов конфигурации (брал за максимум PIC18F4550). Поле выбора модели PIC. Куча кнопок с интуитивно понятными по названиям функциями. В нижнем правом углу - текстовое поле для вывода информации. Три поля "Oscal" делал про запас, они пока никак не задействованы, но знаю что в 8-ногих пиках есть байты калибровки RC-генератора, которые можно случайно затереть, поэтому - могут пригодиться.

Работать с программой очень просто: подключаем программатор к USB. Должен появиться COM порт. В верхнем правом углу программы выбираем COM, на котором висит наш программатор (если программатор был подключен после запуска программы, то надо нажать кнопку "Scan" для получения списка доступных портов) и нажимаем кнопку "Open", если всё правильно, она должна стать зелёной и появится соответствующее сообщение в консоли внизу справа. Чтобы проверить, отзывается ли программатор, нажимаем кнопку "Check", в консоли должно появиться сообщение "Программатор подключен". Дальше надо выбрать модель PIC в окошке "Device". И только после этого можно читать, писать, стирать. Есть некоторые особенности работы с конфигурационными словами: при загрузке HEX-a они автоматически вставляются в соответствующие окошки (Config1 - Config7), при нажатии кнопки "Write" они будут записаны автоматом после CODE и DATA сегментов, либо при нажатии кнопки "WR Cfg" они запишутся отдельно. Но значение Config-ов пишутся не напрямую из HEX-а, а именно из этих окошек, то есть если после открытия HEX-файла переписать свои корректные значения в эти окошки, то будут записаны именно они. 

Так как программа очень сырая, многие исключения в ней не обрабатываются, то есть, если сделать что-то неверно, программа вылетит с ошибкой. Например, если выбрать модель PIC и открыть HEX для совершенно другой модели. Или вписать некорректные значения в окошки Config (кириллицу или не 16-ричные знаки не "0-9,A-F").

Что касается скорости работы программатора, то она - вполне достойная. Конечно, скорость чтения/записи зависит от модели PIC. Но если взять PIC18F4550 как наиболее "жирный" из уже поддерживаемых, то скорость чтения около 2 Килобайт в секунду, запись, естественно, чуть медленнее. При 32 Килобайтах CODE сегмента время чтения\записи не напрягает.

Программу я старался написать таким образом, чтобы она была универсальна для любого семейства PIC, и не требовала никаких изменений при добавлении поддержки новых моделей. Для добавления новых устройств используется файл настроек ("pic.xml"), который находится в папке с программой. В нём содержатся однотипные структуры с необходимыми параметрами микроконтроллера, которые программа использует в первую очередь для разбора HEX-файла. Таким образом работа по добавлению новых моделей PIC ведётся в файле настроек и в большей степени в прошивке атмеги. Вид файла настройки следующий:

 <name model="PIC16F628A">
	<id>0x1060</id>
	<type>2</type>
	<f_size>4096</f_size>
	<f_psize>1</f_psize>
	<ee_size>128</ee_size>
	<f_start>0</f_start>
	<ee_start>002100</ee_start>
	<ee_type>0</ee_type>
	<conf1>002007</conf1>
	<conf2>none</conf2>
	<conf3>none</conf3>
	<conf4>none</conf4>
	<conf5>none</conf5>
	<conf6>none</conf6>
	<conf7>none</conf7>
	<oscal1>none</oscal1>
	<oscal2>none</oscal2>
	<oscal3>none</oscal3>
	<delay>4</delay>
	<word>3FFF</word>
  </name>

Как видите, параметров много, хотя если сравнить с подобным файлом настроек программатора K150, то и не особо.

На данный момент в программе не реализованы функция сохранения считанного в HEX-файл, работа с oscal байтами калибровки. По поводу сохранения HEX-а я уже приблизительно себе представляю как это сделать. Oscal пока даже не в ближайшей перспективе.

Что касается прошивки атмеги. Никаких скетчей для arduino вы не увидите, вопреки названию статьи. Код написан на Си. Для написания кода я использовал среду Eclipse с плагином для AVR (использует AVR-GCC, точно такой же как и Atmel studio). Поэтому все *.h и *.c файлы проекта могут быть спокойно перенесены в Atmel studio без изменений. Также можно с минимальными изменениями перенести код на другие модели AVR с бОльшим объёмом флеш памяти (например, ATMEGA64, ATMEGA128 и др.). Из специфических функций там только USART (настроен на скорость 57600, передача и приём плюс прерывание по приёму байта). И то модуль USART у большинства атмег почти одинаковый, достаточно подправить названия регистров (например UDR на UDR0, UCSR0A на UCSRA и т.д.). Все остальные функции - реализованы с помощью "ногодрыга". Настройка пинов PGD,PGC,PGM,VPP и VDD реализована с помощью макросов:

#define PGD_PIN		1		//D9
#define PGD_PORT	PORTB
#define PGD_DDR		DDRB
#define PGD_IDR		PINB
#define PGC_PIN		2		//D10
#define PGC_PORT	PORTB
#define PGC_DDR		DDRB
#define PGM_PIN		0		//A0
#define PGM_PORT	PORTC
#define PGM_DDR		DDRC
#define VDD_PIN		7		//D7
#define VDD_PORT	PORTD
#define VDD_DDR		DDRD
#define VPP_PIN		6		//D6
#define VPP_PORT	PORTD
#define VPP_DDR		DDRD

#define PGD_HIGH	PGD_PORT |= (1 << PGD_PIN);
#define PGC_HIGH	PGC_PORT |= (1 << PGC_PIN);
#define PGM_HIGH	PGM_PORT |= (1 << PGM_PIN);
#define VDD_HIGH	VDD_PORT |= (1 << VDD_PIN);
#define VPP_HIGH	VPP_PORT |= (1 << VPP_PIN);
#define PGD_LOW		PGD_PORT &= ~(1 << PGD_PIN);
#define PGC_LOW		PGC_PORT &= ~(1 << PGC_PIN);
#define PGM_LOW		PGM_PORT &= ~(1 << PGM_PIN);
#define VDD_LOW		VDD_PORT &= ~(1 << VDD_PIN);
#define VPP_LOW		VPP_PORT &= ~(1 << VPP_PIN);

Поэтому переназначить ножки микроконтроллера на любые другие не представляет особого труда. Достаточно переписать номер пина и букву порта. 

Прошить сам программатор HEX-файлом можно двумя способами: любым программатором для AVR, если это чистая атмега или с помощью программ для загрузки HEX-а в arduino, таких как XLoader, ArduinoUploader и других (можно найти, например, тут. Это не реклама стороннего сайта!). 

На данный момент прошивка занимает 5 Килобайт с небольшим из 30 доступных в ATMEGA328Р (2 Кб занимает bootloader arduino). Так что места ещё навалом, можно добавить поддержку многих семейств.

Теперь - самое главное. Поддержку каких камней удалось добавить? Скажу сразу, пока - не густо. Так как пока что от начала разработки до момента написания статьи прошло около недели, и то я вёл разработку в свободное время, на данный момент добавлена поддержка и проверена работа (с реальным устройством на данном МК) PIC16F628A (в его подсемействе есть ещё два камня 627A и 648A). PIC16F73 (проверена работа методом сравнения прочитанного и записанного с референсным JDM программатором), у этого "камня" есть ещё три одногрупника (F74, F76, F77). Также добавлена поддержка и проверена работа с PIC18F4550, добавлен PIC18F2550 (так как это в плане программирования одно и то же). Единственное, не смог победить чтение ID у этого семейства, возможно, мой экземпляр работает некорректно. У последних двух "камней" в одногрупниках - несколько десятков МК, поддержку которых легко сделать всего лишь правкой конфигурационного файла без изменения прошивки атмеги. Должны работать, но мне пока не на чем проверить.

В ближайших планах добавить поддержку таких старичков как PIC16F84A и его одногрупников (так как он у меня есть для тестов), PIC16F87X. Дальнейшая поддержка будет зависеть от интереса к устройству и, возможно, помощи в тестировании программатора. Так как мне одному не под силу и не по карману сделать это самому (покупать разнообразные PIC-и только для тестов). 

На этом пока всё. Спасибо за внимание. Адекватная критика в комментариях приветствуется.

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
Схема №1 (на arduino nano)
U1 Плата Arduino
Arduino Nano 3.0
1 Поиск в магазине ОтронВ блокнот
Q1, Q2 Биполярный транзистор
КТ3102
2 Поиск в магазине ОтронВ блокнот
Q3, Q4 Биполярный транзистор
КТ502Е
2 Поиск в магазине ОтронВ блокнот
U2 Линейный регулятор
LM78M05
1 Поиск в магазине ОтронВ блокнот
D1 Диод Шоттки
1N5819
1 Поиск в магазине ОтронВ блокнот
R1-R4 Резистор
1 кОм
4 Поиск в магазине ОтронВ блокнот
R5, R6 Резистор
4.7 кОм
2 Поиск в магазине ОтронВ блокнот
R7, R8 Резистор
10 кОм
2 Поиск в магазине ОтронВ блокнот
C1, C2 Конденсатор0.1 мкФ2 Поиск в магазине ОтронВ блокнот
Схема №2 (на atmega328p)
U1 МикросхемаCH340E1 Поиск в магазине ОтронВ блокнот
U2 МК AVR 8-бит
ATmega328P
1 Поиск в магазине ОтронВ блокнот
D1 Диод Шоттки
1N5819
1 Поиск в магазине ОтронВ блокнот
Led1 Светодиодлюбой1 Поиск в магазине ОтронВ блокнот
C1 Конденсатор0.1 мкФ1 Поиск в магазине ОтронВ блокнот
C2, C3 Конденсатор16 пФ2 Поиск в магазине ОтронВ блокнот
R1 Резистор
560 Ом
1 Поиск в магазине ОтронВ блокнот
R2 Резистор
10 кОм
1 Поиск в магазине ОтронВ блокнот
XT1 Кварцевый резонатор16MHz1 Поиск в магазине ОтронВ блокнот
KEY1 Тактовая кнопкалюбая1 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 9
Я собрал 2 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 1 чел.

Комментарии (98) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
+2
vavaav #
Большой труд проделан. Автору респект и уважуха.
Ответить
0
Irokess #
сразу извиняюсь за остатки флюса и ваты, которой я пытался отмыть флюс
Можно это делать старой зубной щёткой, брызгая спиртом, потом промыть под краном водой (после спирта можно и не мыть)
Ответить
0

[Автор]
AndrejChoo #
Спасибо за отзывы.
Пока статья ждала публикации, Я не сидел сложа руки. Список поддерживаемых устройств значительно расширился. Также были исправлены некоторые ошибки в сотовой части. Удалось сделать более-менее стабильной работу первой версии платы (с преобразователем напряжения, не требует внешнего БП, питание только usb). Буду выкладывать свежие версии ПО на форуме при наличии интереса со стороны читателей.
Ответить
+1
Shida #
Спасибо, что откликнулись на мой вопрос в первой статье по вопросу возможности программирования ПИКов. Респект Вам и уважуха. С уважением Альберт Расимович.
Ответить
0

[Автор]
AndrejChoo #
Спасибо за отзыв, не забывайте ставить "Я собрал", если решите повторить устройство. Удачи
Ответить
0
111284 #
pic18f47q84 прошьёт?
Ответить
0

[Автор]
AndrejChoo #
На данный камень я даже не смог найти Programming manual. Поэтому даже не представляю, с какой стороны к нему подойти.
Ответить
0
111284 #
Камень два года назад вроде вышел, но PICKIT4 под него дорого брать сегодня.
Ответить
0

[Автор]
AndrejChoo #
Я нашёл programming manual на это семейство. Бегло его посмотрел, вроде бы как, ничего сложного. Но всё равно, мне нужен подопытный камень, чтобы над ним поизголяться как следует. И есть небольшая проблемка - там очень много конфигурационных слов, а моё по поддерживает максимум 7.
Ответить
0
111284 #
Да есть такое с конфигурацией, причем первые базы данных на этот камень не вносили изменения в последние конфигурационные слова. В общем если получится добавить современные камушки вы обломаете микрочип с PICKIT4 и т.д.
Ответить
0

[Автор]
AndrejChoo #
Если у Вас есть возможность проверить (есть данный камень, Андуина и паяльник), то я на досуге попробовал бы для начала добавить функцию чтения id, config, а вы бы протестили.
Ответить
0
111284 #
Готов помочь да и камень есть, да и еще некоторые новые камни есть, а вот Ардуина к сожалению пока нет. Если ждать из Китая где то через месяц появится.
Ответить
0

[Автор]
AndrejChoo #
А какая-нибудь атмега есть? Я бы перекомпилировал код под любую, хотя бы с 8кБ флеша?
Мне самому интересно стало, судя по описанию, это семейство пиков прошивается ещё проще pic16.
Сам я не сильно горю желанием заказывать пики с Али, он там от и недорого, чуть больше 3$ стоит, но он мне потом не нужен будет, Я их не использую от слова совсем.
Ответить
0
111284 #
Есть atmega8
Ответить
0

[Автор]
AndrejChoo #
Этого достаточно. Пишите в личку или в ВК (https://m.vk.com/andrejchoo), когда созреет собрать хотя бы на макете, Я перекомпилю прошивку. Будем тестить.
Ответить
0
URII81 #
Вы собрали данный программатор на атмеге8? Он заработал?
Ответить
+1
111284 #
Здраствуйте, пака нет, никак не приобрету usb - uart конвертер.
Ответить
+1
Andro #
Спасибо за проделанную работу и труд, просьба если можно, сюда выложить обновлённые версии и прошивку под atmega88p.
Ответить
+1

[Автор]
AndrejChoo #
Последняя версия ПО выложена на форуме (ссылка в первом комментарии). В атмеге88 слишком мало флешь, всего 8 кБ. На данный момент прошивка уже занимает 12 кБ. Под атмега8 я обещал перекомпилировать прошивку исключительно для тестов на новых моделях пик, которые есть у участника под ником 111284, он согласился провести тесты, но у него нет ничего кроме 8 атмеги. Для этого придётся урезать часть функций, чтобы это все впихнуть в 8 кБ. Могу переписать под атмега16/32/64/168/644/328/128. Но это все равно будет промежуточная версия прошивки. Очень сложно компилировать под разные камни и вести поддержку нескольких прошивок на стадии разработки.
Ответить
0
andro #
Спасибо за ответ, я бы порекомендовал использовать систему контроля версий, так намного удобней. Скажите пожалуйста, а можно на атмеге88 сделать полнофункциональный программатор, но для ограниченного числа разновидностей чипов?
Ответить
0

[Автор]
AndrejChoo #
Да, достаточно больная группа однотипно программируемых pic10/12/16 вполне может влезть.
Напишите, какие модели pic Вас интересуют, а я попробую скомпилировать что-нибудь подходящее.
Отредактирован 14.01.2023 14:30
Ответить
0
Андрей #
Работа впечатляет, НО...
Автор говорит - "микроконтроллеры PIC довольно старые". Это как это? Затем, 20$ - это что, огромные деньги? Один раз заплатить и забыть обо всех этих костылях на LPT, СОМ (попробуй найди сейчас компы с этими портами!), а также на Ардуино. Да, работа проделана большая, это видно, но чтобы достичь возможностей хотя бы 2-го ПикКита, автору придётся приложить ещё кучу усилий, и чем это закончится, мы не знаем.
Ответить
+2

[Автор]
AndrejChoo #
У меня и не стояла задача объять необъятное, то есть всё разнообразие пиков. Я всего лишь предложил альтернативу для радиолюбителей, у которых возникает необходимость прошить какой-нибудь старенький пик, может быть один-два раза в год. Что касаемо PicKit2 то он у меня есть (самодельный). За б.у pic18f2550, который является сердцем данного программатора я отдал без малого 10$, сумма вроде бы небольшая, но меня душит жаба, что он теперь лежит без дела. А делал я его в качестве референсного программатора, для проверки своего.
Что касаемо старости пик: не самый старый pic16С84 был представлен в 1993 году, а это как-никак 30 лет!
В целом, для меня разработка данного устройство - это просто развлечение, тренировка для мозгов. А если оно будет хоть кому-то полезный, тогда - мне плюсик в карму
Ответить
0
vavaav #
Не соглашусь. И в поддержку автора замечу имхо, что сделанное самостоятельно гораздо ближе чем купленное хоть и недорого.
Ответить
0
andro #
Иногда бывает нужно запрограммировать какой-то один определённый чип, и по моему мнению нет смысла покупать для этого универсальный программатор.
Ответить
+1
Alex3120 #
Программатор собран. Работает быстро.
Прикрепленный файл: 1.jpg
Ответить
0
Юрий #
Здравствуйте Андрей! Не могли бы вы поделиться прошивкой на ATmegа8 и фьюз биты. Заранее спасибо. Или на сайте выложили бы, у многих нету ардуино.
Ответить
0
Олег #
Здравствуйте Андрей!
Прошу Вашего шефства в вопросе программирования PIC17C756A (68 pin PLCC). Погорел в приборе этот контроллер. Есть прибор с рабочим контроллером. Надо считать прошивку с рабочего и потом зашить ее в новый чип.
Ответить
0

[Автор]
AndrejChoo #
Здравствуйте. Про 17 серию пока ничего не знаю. Посмотрю документацию на досуге. Судя по букве "С" - это однократно программируемый микроконтроллер. В рабочем устройстве, скорее всего, прошивка будет залочена битами защиты и читаться будут нули.
Напишу, если что-нибудь узнаю.
Ответить
0
Олег #
Спасибо за ответ. Плата в которой стоит PIC17 от 2001 года, может есть надежда на отсутствии защиты. Пока не прочитаешь не выяснишь.
Чем можно прочитать прошивку в рабочем PIC? Есть мысли использовать PICKIT™ 3.
Ответить
0

[Автор]
AndrejChoo #
В общем: programming manual для данного камня я не нашёл, из краткого описания в даташите, я понял, что он программируется в параллельном режиме. Ваш единственный шанс - это программатор PICSTARTER+, по которому есть все материалы
https://www.5v.ru/psp.htm
Но шанс один на миллион, что память не залочена.
А что за устройство, если не секрет?
Ответить
0
Олег #
Гранд мерси за "тропинку", которой посоветовали идти. По поводу устройства...не секрет. Это гидроакустический аппарат - сонар бокового обзора.
https://mind-technology.com/klein/
Ответить
0
URII81 #
В общем собрал программатор на ATmega8, работает с вашей прошивкой для ATmega8. Но при верификации выдает ошибки. Вопрос так и должно быть? Есть частотомер на PIC16F628A, залил в новый PIC16F628A, прошивку все работает, но нету одной функции. Вопрос так будет со всеми микроконтроллерами в вашей программе? И можно ли убрать не нужные микроконтроллеры в вашей программе? А так вы большой молодец!
Ответить
+1

[Автор]
AndrejChoo #
Спасибо за отзыв.
Прошивка для atmega8 сделана только "по просьбам трудящихся" в виде исключения, поэтому редактировать список в программе для нее Я не планирую. Я предупреждал, что функциональность будет ограничена.
Не забудьте поставить галочку "Я собрал" в шапке комментариев.
Ответить
0
Владимир #
А возможно добавить прошивку для pic16f18445?
Ответить
0

[Автор]
AndrejChoo #
Если мне не изменяет память, этот чип уже добавлен. Скачайте последнюю версию софта и прошивки на гитхабе: https://github.com/AndrejChoo/USB-PIC-Programmer-on-Arduino
Ответить
0
Владимир #
Действительно, данный чип добавлен, правда hex весит 42кб...
Ответить
0

[Автор]
AndrejChoo #
Hex - это текстовый документ. Если он весит 42кБ, это не значит, что прошивка занимает в памяти столько же. Прошивка помещается в атмега328. Пробуйте прошить. Удачи.
Ответить
0
Ruslik935 #
Собрал! Нужно прошить pic16f1938 вместе с eeprom.
После попытки прошить стало ясно что eeprom не пишется. И даже при открытии hex в области data пусто (одни ff). Как я понял в xml есть ee_start который по идее должен браться из programming manual. Там указано что то типа "The physical address range of the 256 byte data
memory is 0000h-00FFh. However, these addresses
are logically mapped to address 1E000h-1E1FFh in the hex file" только такого адреса нет в hex. на каком то забугорном сайте сказано "To get the physical address in the PIC, divide the Hex file address by 2.
This means the data eeprom starts at 0xF000." Почему так разбираться не стал. Однако если в xml поменять 01E000 на 00F000 то секция DATA коректно заполняется при открытии heх. Осталось проверить коректно ли пишется. Но попробую отпишусь.
Ответить
0

[Автор]
AndrejChoo #
Из какого компилятора ваш hex? Я точно не помню насчёт 1938, но проверял с помощью xc8 по какому адресу он пишет eeprom в hex. Возможно есть моя ошибка, но и не исключен "зоопарк" компиляторов.
1Е000 = F000*2, так как карта памяти у 16х не побайтная а пословная.
Ответить
0
Ruslik935 #
Файл с просторов интернета, но по всей видимости судя по исходникам скомпилирован вот этим https://github.com/cobrce/Mikroc-compile. Если надо собственно файл вышлю. Но даже если ваше предположение верно, то почему тот же самый файл в mplab корректно открывается.
Ответить
0
Ruslik935 #
И да сейчас проверил eeprom шьется корректно устройство стартануло.
Ответить
0

[Автор]
AndrejChoo #
Ну Вы не равняйте мою самоделку, которой я занимался в одиночку ради развлечения и софт, разработанный корпорацией.
Отредактирован 31.10.2023 11:55
Ответить
0
Ruslik935 #
Ну тем не менее пригодилось спасибо! Ради прошивки одного пика покупать всякие там pickit не хотелось. Может кому будет полезно кто так же как и я с этим столкнется. Еще бы можно было отдельно eeprom читать писать цены б не было.
Ответить
0

[Автор]
AndrejChoo #
Спасибо за хорошую оценку моей работы.
По поводу отдельной прошивки flash и eeprom - нет желания. Слишком большие трудозатраты, по новой перелопатить кучу даташитов из-за кардинально разных методов стирания.записи у каждой линейки и переписать кучу функций. Оно того не стоит.
Ответить
0
daomsk #
Извините за глупый вопрос - чем отличаются PIC_PROG_SW от PIC_PROG_FW? И как их использовать? И хотелось бы знать, в статье последние версии софта, или нет?
Спасибо,
Отредактирован 16.11.2023 11:37
Ответить
+1

[Автор]
AndrejChoo #
SW это программа для ПК, FW это прошивка ардуины. Последние версии на гитхабе, смотрите ссылку в комментариях. Как использовать подробно написано в тексте этой статьи.
Ответить
0
daomsk #
Ок, спасибо, нашёл. На гитхабе схема немного модернизирована, питание программатор берет от зарядки смартфона. А к компу подключаться через USB на плате Ардуины, правильно? И куда подключить ZIF-панель?
Отредактирован 17.11.2023 12:14
Ответить
0

[Автор]
AndrejChoo #
Я не совсем уверен, что мы говорим об одном и том же. На гитхабе есть три версии программатора: на ардуине с отдельной подачей питания 12 вольт, на ардуине с преобразователем напряжения и питанием только от USB и на атмеге328, где на схеме не нарисованы транзисторные ключи.
Что Вы имеете под ZIF-панелью? Универсальную колодку для пиков в DIP корпусах? Тогда, я не знаю, как она выглядит и какая у неё распиновка. К любому пику (кроме низковольтных вариантов) для программирования необходимо подключить: +/- 5 вольт питания, сигналы PGC,PGD и MCLR (последний имеет уровень напряжения 12 вольт). Иногда ещё нужен сигнал PGM, но его можно не подключать. Все эти сигналы нарисованы на схемах.
Не знаю, как я могу объяснить ещё доступнее.
Отредактирован 17.11.2023 14:35
Ответить
0
daomsk #
Я имею в виду - на ардуине с преобразователем напряжения и питанием только от USB, скачал zip архив отсюда: https://github.com/AndrejChoo/USB-PIC-Programmer-on-Arduino.
Вот по нему и вопрос-питание +5В берется откуда? Я понял что от зарядки сотового, а Ардуина подключается к USB порту компа, т.е. нужен кабель USB/miniUSB, правильно?
Что касается ZIF-панели, можете посмотреть тут: https://radiokot.ru/circuit/digital/pcmod/18/. Она нужна чтобы не плодить кучу DIP панелек.
Другой вопрос- у ВАс выводы ICSP поименованы PG(C.D.M), V(DD,PP) и GND. В других программаторах другие обозначения - DATA, CLK, VPP1,VPP2. Чтобы использовать плату с ZIF-панелью, хотелось бы узнать соответствие выводов ICSP у Вас и у других.
Спасибо,
Ответить
0

[Автор]
AndrejChoo #
По вашей ссылке - это вариант pickit2, он питается по usb, в схеме там есть умножитель напряжения для 12 вольт. Его сигналы data - pgd, clock -pgc, vpp(1,2) - mclr, vdd - +5 v к пику.
Про какой сотовый вы пишете, Я не понимаю?
В моей схеме, которая подписана как SchematicArduino - ардуины подключается к ПК usb кабелем, а на плату с транзисторным ключами дополнительно подаётся 12 вольт (стабилизированное напряжение 12+/-0.5В). Пик записывается 5в через линейный стабилизатор lm7805, который нарисован на схеме и транзисторный ключ на ножку vdd пика. А 12 вольт подаётся через транзисторный ключ на ножку mclr пика. Это самая простая схема с минимальной обвязкой.
Ответить
0
daomsk #
Мы говорим про разные схемы - я собираю Schematic_DC_DC. Там разъем 5V_IN, про него я и спрашиваю, откуда приходит 5В - от USB через Ардуину или от внешнего источника?
Ответить
+1

[Автор]
AndrejChoo #
От usb с ножки ардуино 5v. Только обязательно записать преобразователь через диод Шоттки. И располагать его (преобразователь) на плате подальше от колодок ардуино. Иначе от наводок будет зависеть usb.
Отредактирован 17.11.2023 17:25
Ответить
0
URII81 #
Андрей.Я забыл про фьюзы в прошивке на ATmega8 L=FF H=D9 ? Так или нет?
Ответить
0

[Автор]
AndrejChoo #
Да, такие должны работать. Я посмотрел по калькулятору вузов.
Ответить
0
URII81 #
Собрал JDM программатор на 155ла3 как у вас в статье, подключил СР2102. И не работает. Пользовался программами PICPgm, IC-Prog, WINPIC800. Какой программой пользовались вы? У меня виндовс 7 32бит.
Ответить
0

[Автор]
AndrejChoo #
Picpgm
Ответить
0
URII81 #
Пробовал Picpgm - программа определяет JDM программатор. Пробовал PIC16F73 не хочет считывать, светодиод мигает при считывании. Может все дело в СР2102?
Ответить
0

[Автор]
AndrejChoo #
Вряд ли. А pic впаян в плату или просто в программаторе? Если впаян, то надо освобождать сигнальные линии, особенно pgd и mclr.
Если не впаян, надо попробовать в настройках программы инвертировать сигнал mclr, о же vpp
Отредактирован 08.12.2023 09:03
Ответить
0
URII81 #
pic отпаян в настройках сигнал mclr, о же vpp менял все бестолку
Ответить
0
Юрий #
В вашей плате, разьем для программирования атмеги328 имеет нестандартную распиновку? Или я ошибаюсь?
Ответить
0

[Автор]
AndrejChoo #
Да. Но сигналы подписаны.
Отредактирован 23.01.2024 11:45
Ответить
0
Юрий #
Ясно, надо будет не ошибиться при программировании
Ответить
0
Борис #
Андрей, добрый день.
PIC16F716 совместим с какой-либо серией из присутствующих в ПО?
В списке его нет.
Ответить
0

[Автор]
AndrejChoo #
Так на вскидку не скажу. По мануалу похож на 16f73. Попробуйте. Потом постараюсь добавить, только без проверки.
Ответить
0
Борис #
Попробовал шить как 16F73, читает, правильно определяет ID, стирает, не уверен, что правильно после стирания все ячейки FF3F, но не пишет.
Vdd 5В, Vpp 11,7В. Программатор с DC-DC преобразователем, пробовал также с Vpp от внешнего источника 12В.
Ответить
+1

[Автор]
AndrejChoo #
Я постараюсь сегодня добавить. Напишите свой email. Скину ссылку, когда добавлю.
Ответить
0

[Автор]
AndrejChoo #
Пробуйте
Прикрепленный файл: PIC_PROG.rar
Ответить
0
BoNy #
Залил прошивку, обновил файл XML, появился в списке 16F713.
При чтении нули, ID тоже 0x0000.
Пробовал также выбирать 16F73, с новой прошивкой тоже нули. Откатил старую прошивку, с выбором 16F73 ID читается правильно 0x1145.
Ответить
0
sollaris #
Извиняюсь если можно добавить pic16f876 спасибо!
Ответить
0

[Автор]
AndrejChoo #
Если мне не изменяет память, этот камень уже есть. Скачайте крайние версии софта и прошивки: https://github.com/AndrejChoo/USB-PIC-Programmer-on-Arduino. Я позже посмотрю, если ещё не добавил, постараюсь добавить. Правда, у меня нет этого камня, проверить не смогу. Если Вы можете протестировать работу программатора с этим pic, свяжитесь со мной в личке.
Ответить
0

[Автор]
AndrejChoo #
Я добавил pic16f87x, можно скачать на github (ссылка выше). Поддерживайте, пожалуйста, обратную связь, мне нужно знать результаты.
Ответить
0
sollaris #
Спасибо за pic16f876 проверить пока не могу не читает. Ещё если можно добавьте pic16f628 без буквы A и pic16f876 с буквой A , а то не читаются не тот id пишет. Спасибо за труд!
Ответить
0
sollaris #
Интересный факт pic16f628A-l/so пишет и читает id 0x1068 , а pic16f628-20l/so не пишет и не читает id 0x07C0.
Ответить
0

[Автор]
AndrejChoo #
628А и просто 628 в плане программирования имеют значительные отличия. Чтение должно быть нормальным, а запись и стирание не будут.
Отредактирован 14.03.2024 19:56
Ответить
0

[Автор]
AndrejChoo #
Если у Вас есть возможность, протестируйте pic16f628(без А) с этим файлом. У меня просто нет такого камня.
Прикрепленный файл: pic.zip
Ответить
0

[Автор]
AndrejChoo #
Добавил поддержку pic16f87xA на git. Там есть изменения, теперь свежий файл "pic.xml" находится в новой папке, в архивах не самые свежие версии.
Тестируйте, пишите о результатах.
По поводу неправильного ID, может не совпадать только 4-й бит (rev id), но если ID отличный от нуля, должно работать.
Ответить
0
sollaris #
Вы не добавили pic16f628 без буквы А я не могу считать чип он с защитой от чтения и стереть не могу что бы записать.
Ответить
0

[Автор]
AndrejChoo #
Собрал всё в один архив для теста. Не смог отправить на email, почтовые клиенты не пропускают архив.
Прикрепленный файл: test_pic_prog.zip
Ответить
0
sollaris #
Спасибо pic16f628 стёр , а записывается что на pic16f628 что на pic16f628A одинаково , а вот pic16f876-04/sp id 0x09E5 не пишет и не читает.
Ответить
0
sollaris #
Спасибо за работу pic16f628 стёр и записал.
Ответить
0
Юрий #
Прошу прощения. иАтмега328 фьюзы при программировании не надо изменять?
Ответить
0

[Автор]
AndrejChoo #
Если вы используете плату Arduino, то не надо. Если будете использовать просто атмегу328, то конечно же надо: Low - FF, High - D9.
Ответить
0
Юрий #
Вроде бы работает как описано выше, но не светит светодиод. Хотел бы уточнить
Ответить
0

[Автор]
AndrejChoo #
Какой светодиод? На схеме его нет. На плате Ардуино могут светиться только rx/tx во время чтения/записи.
Ответить
0
юрий #
с 6 ноги CH340E ИДЕТ
Ответить
0
Юрий #
CH340 -6PIN
Ответить
0

[Автор]
AndrejChoo #
Ааа! Я про него забыл. Может быть, полярность светодиода перепутали? Активный уровень этой ноги - высокий, т.е. анод должен быть к 6й ноге, катод на минус.
Ответить
0
юрий #
Светодиод исправен и правильно впаян. Он должен индицировать когда идет программирование или должен светиться всегда.
Ответить
0

[Автор]
AndrejChoo #
Он светится, только в процессе программирования.
Ответить
0
Юрий #
Программирую PIC16F628A, пишет, что запись прошла успешно. Но при нажатии кнопки верификация,пишет,что не с чем сравнивать. Не могу понять записался контроллер, или нет. Как проверить прошивку в контроллере?
Добавлю, что вопрос возник из-за того, что контроллер в схеме не работает.
Ответить
0

[Автор]
AndrejChoo #
Просто после записи нужно сначала прочитать, а потом сравнивать.
Ответить
0
Юрий #
Пишет, прочитано 128 байт. Потом на верификации пишет не с чем сравнивать. Помогите разобраться.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Программатор Pickit3 Печатная плата для усилителя "LM3886 + AD825"
вверх