Параллельный программатор для avr своими руками – Еще раз о параллельном программаторе на базе STK500

О всяком… — Параллельный высоковольтный программатор для AVR

В процессе работы с микроконтроллёрами с архитектурой AVR производства Atmel рано или поздно возникает необходимость работы в параллельном режиме программирования. ISP и JTAG в этот случае не позволяют провести отладку. Так же могут оказывается не достаточными возможности по восстановлению фьюзов, реализованными в AVR fusebit doctor 

Статья рассказывает о моей версии популярного параллельного программатора HVProg. Статья появилась, как интерактивная. Впервые опубликована она была ещё 23.02.2015

В сети встречал и гибриды «доктора» с обычным ISP программатором. Но многие из схем не имеют реализации в «железе», содержат ошибки как в разводке, так и в проектировании. Т.к. мне не особо было и нужно, то рабочую схему такого гибрида специально не искал и не собирал. 

Тем не менее перейдем непосредственно к параллельным программаторам. 

В сети, как не странно, довольно мало статей и авторских схем по этому вопросу. Видать не пользуются они популярностью. В отличие от ISP-программаторов, коих создано просто тьма-тьмущая. И на базе ATTiny 2313 и на базе ATmega8/88 с различными вариациями вроде введения оптической развязки и/или введения в схему FT232 (USBasp, USB TinyISP, AVR ISP MkII (или тут), ucGoZilla (с ней у меня свои счеты 🙂 ), AVR910 (или тут) и т.д.). По параллельным программаторам история иная. На одном из форумов собраны ссылки на существующие любительские параллельные программаторы. Дополнительно я нашел еще и еще. Что можно сказать? За исключением ParaProg собранной на FT232DT (реализация USB- интерфейса) и Mega16, остальные версии, которые все же содержат МК, собраны на ATMega8535. В варианте RA4NAL видимо в качестве интерфейсной введена отдельная AT90S2313 (предок Tiny2313), как пишет автор: «для записи новых версий прошивок в основной контроллер». Остальная обвязка тривиальна. К тому же все тот же вездесущий RS232-интерфейс на входе. Так что схема меня не впечатлила и перетаскивать ее к себе для наглядности я не буду. 

Так что мой выбор пал на HVProg тем более, что на упомянутом форуме имеется весьма положительный отзыв:

Der Hammer, HVProg — STK500 for ATMEL. Parallels and serial’s High-Voltage Programmer. 
http://www.der-hammer.info/hvprog/

Наверное, самый лучший из доступных для повторения радиолюбителями средней квалификации.
Урезанный вариант STK500 от фирмы-производителя ATMEL.
У меня запустился без проблем, чего и Вам желаю.

пройдусь еще раз по рунету, но уже по конкретным запросам по HVProg.

  1. «Программатор HVProg by Hammer» —  статья является сокращенным переводом сайта, с которого я взял схемы программатора. Есть архив с файлами схемы и платы, а также. что ценно, с прошивкой. Любопытно, что в статье так же как и к меня, но гораздо раньше по времени, добавлены те же самые схемы. 🙂
  2. Сообщение на форуме — тоже перевод. Авторство переводов и пословное сличение я не проводил.
  3. HV-Prog от Der Hammer — опять перевод статьи с приложенным файлом схем и прошивки. Странно что архив носит то же название. что и в ссылке в пункте 1, но имеет другой размер.
  4. Сообщение на форуме — практическая реализация программатора. В схему внесены минимальные изменения — выкинут один конденсатор, — остальное без изменений. Добавлена отладочная панель для целевых процессоров в DIP-корпусах. Сообщение датировано мартом 2014 т.е.  достаточное свежее — есть еще интерес к данной теме :).
  5. Тема на форуме — есть много полезных ссылок, например, на конверторы форматов прошивок.
  6. Доработка программатора HVProg — очень глубоко переработанная схема программатора с добавлением USB-интерфейса на основе FT232. Так же автор постарался избавиться от внешнего питания и впихнул повышающий преобразователь на MC34063. Схема получилась красивой — фото платы есть по ссылке. Статья датирована еще 2008 годом. (Пост. прим. введение импульсного преобразователя в схему авторы мотивируют тем, что никаких больших токов не  нужно. Нужно именно напряжение. Ну вроде как в регуляторах на базе tl431. И что такие схемы с успехом работают в программаторах для микроконтроллеров PIC. Может быть и так. Не буду спорить т.к. на настоящий момент ещё не разбирался в этом вопросе.)

 

Как обычно перенесу родную схему к себе (публикация картинки с сайта автора)

Прокрутим страничку чуть вниз и найдем ссылку на стороннюю реализацию этого программатора (картинка ниже представляет собой скрин окна редактора, потому даты указаны на момент пересохранения файла для дальнейшего редактирования, а не на момент, когда автор его создавал):

Видно, что схемы различаются. в первом случае единый 20-ти выводной интерфейс, а во-втором выделены отдельные подкасты. Возможно. что в первом варианте 20-ти выводной разъем полностью соответствует «родному» STK500, но у меня все равно нет ни одной отладочной платы с готовым портом параллельного программирования, так что повторять оригинальную распиновку смысла особого нет. Возьму пожалуй за основу вторую разводку.

Итак, интерфейс RS232 на MAX232 удаляем и заменяем ее знакомым по AVR JTAG ICE my clone  USB-интерфейсом на СР2102 (собственно сам обвес микросхемы полностью повторяет рекомендации даташита).

Теперь попробуем разобраться с питанием. Питание должно быть внешним, как это в схемах выше. Какое выбрать? В первой схеме два линейный стабилизатора стоят параллельно, а на входе установлен диодный мост, что позволяет не заботиться о полярности. Во второй схеме в качестве защиты от переплюсовки использован один диод Шоттки. Но там есть еще один ньанс: стабилизатор на пять вольт выбран в корпусе ТО92 и стоит последовательно после стабилизатора на 12 В. Это не есть хорошо. Т.к. на 78L05 «гаситься» не менее 7 В напряжения, что при незначительной нагрузке, скажем 100 мА уже требует рассеять 0,7 Вт энергии. Да и из-за последовательного включения линейных стабилизаторов общий потребляемый ток возрастает. С другой стороны стабильность шины +5 В конечно же возрастает. Но я всё-таки буду использовать вариант питания из первой схемы, но с диодом Шоттки.

Вот что получилось — вид сверху должен быть примерно таким:

На практике плата получилось такой:

И вид снизу

Уделив повышенное внимание разводке сигнальных линий я откровенно прозевал шины питания +12В и +5 В :(.Так что выкладывать схему (проект) не буду. Может быть позже, когда переделаю его. 

ovsjakom.info

Параллельной программатор для AVR

В данной работе описывается конструкция параллельного программатора, единственной задачей которого является восстановление значений фьюзов микроконтроллера «по умолчанию», т.е. записанных на заводе. К достоинствам прибора следует отнести его простоту, автономность (независимость от ПК), а также возможность постоянно модернизировать и усовершенствовать, в зависимости от поставленных задач. Недостатком является, пожалуй, необходимость задействования достаточно большого количества линий связи с микроконтроллером, но иначе нельзя, ведь это — параллельное программирование.

Идея разработки этого устройства родилась после ошибочной записи значений фьюзов в ATmega8, после которой вывод сброса стал обычным вводом/выводом порта, синхронизация предусматривала внешний источник, да ещё и запрещалось программирование по SPI — короче говоря «полный набор». Поиск схем параллельного программатора по интернету и в печати не дал практически ничего, что удовлетворяло бы заданным условиям простоты и повторяемости. После изучения соответствующих даташитов решено было разработать устройство на одном микроконтроллере, которое восстанавливало бы значения фьюзов, необходимые для работы на обычном последовательном программаторе. Вообще-то, честно говоря, параллельный программатор больше ни для чего и не нужен в любительском конструировании — все функции программирования успешно выполняют широко распространённые последовательные «5 проводков», «STK-200», «AVR910», «usbasp» иже с ними.

Итак, задача поставлена — ищем решение. Начинаем, конечно, с выбора контроллера. Для параллельного программирования необходимо иметь как минимум 19 выводов ( см. таблицу).

Восьмивыводные кристаллы сразу отпадают. Можно, открывая ключи +5В и +12В от одного вывода, использовать 18 линий- в этом случае появляется возможность использовать 20-ти выводные корпуса, ATtiny2313, например. В своей же конструкции я использовал ATmega8515, исходя исключительно из удобства расположения портов (на одной стороне) и линий питания — всё для упрощения разводки печатной платы. Можно применить и 28-ми выводные контроллеры, но я изначально планировал последующее подключение LCD-индикатора и 4-х кнопочной клавиатуры. А, в принципе, собрать устройство можно на любом имеющемся кристалле с необходимым количеством выводов — длина кода — 330 байт.

Кроме того, для коммутирования напряжений питания 5 В и программирования 12 В необходимы соответствующие ключи. Изобретать велосипед я не стал, и использовал широко известное схемное решение в виде транзисторного ключа.
Как и в любой диалоговой системе необходимы устройства ввода и вывода — добавляем, соответственно, кнопку и светодиод.
В результате родилась схема, представленная на рисунке:

Схема, как вы видите, проста до безобразия и особых разъяснений не требует. Единственное, что вызовет определенные конструктивные затруднения — это подключение программируемых контроллеров к программатору. Можно это сделать, например, коммутацией проводниками на макетной плате, а можно (и гораздо удобнее) собрать универсальную плату расширения для основных типов контроллеров (или для тех, с которыми постоянно работаешь), подключаемую к программатору шлейфом.
Питать устройство необходимо от стабилизированного источника 12 В. На микросхеме IC1 собран стабилизатор напряжения питания 5 В. Кнопка SA1 «PROG»- даёт команду на перезапись фьюзов, светодиод зелёного свечения VD1 «DONE» — сигнализирует об успешном перепрограммировании. На транзисторах VT1 — VT4 собраны ключи для коммутации напряжений питания и программирования. Сразу оговорюсь, что схему можно совершенствовать сколько душе угодно. Допустим, установить стабилизатор на 12 В — в этом случае можно питать устройство от нестабилизированного источника 16-22 В. Возможно заменить транзисторные ключи на микросхему коммутатора тока и пр.

Конструкция программатора может быть любой — в зависимости от Ваших возможностей и умения. Я сам программатор сделал на печатной плате, а программируемые микроконтроллеры подключал через макетку. В дальнейшем планирую сделать универсальную плату расширения и подключать к программатору 20-ти жильным шлейфом. Детали любые малогабаритные, номиналы указаны на схеме.
Пару слов о программной части. Программа написана на языке С в оболочке WinAVR. Порядок действий в ней полностью соответствует даташиту ATmega8 (раздел о параллельном программировании).
Работать с программатором очень просто. Контроллер, в котором необходимо переписать фьюзы, вставляется в соответствующую панельку. Включается питание и нажимается кнопка «PROG». Загоревшийся светодиод «DONE» сигнализирует об успешной перезаписи. Питание выключается и, после изъятия из панельки, контроллер используется обычным способом.
В своей конструкции я подключал к программатору, кроме панели для ATmega8 ещё панель для ATmega16, поскольку алгоритм программирования для него почти такой же и прошиваемые значения фьюзов позволяют работать с последовательным программатором. В результате устройство даже в такой представленной «игрушечной» версии успешно «реанимирует» кроме ATmega8 ещё и ATmega8535, ATmega16, ATmega32 — это то, что я лично пробовал перепрограммировать
В дальнейшем я планирую дополнить программатор некоторыми функциями, расширить номенклатуру «реанимируемых» контроллеров. В планах добавить функцию считывания байта сигнатуры и, в зависимости от типа контроллера, прошивать его своими «даташитовскими» значениями. А, вообще, приведённых сведений более чем достаточно, чтобы пользователь мог сам модернизировать программатор — хоть в схемной, хоть в программной части.

Источник

shemu.ru

AVR. Учебный курс. Трактат о программаторах

Программа для микроконтроллера пишется на любом удобном языке программирования, компилируется в бинарный файл (или файл формата intel HEX) и заливается в микроконтроллер посредством программатора.
 

Итак, первым шагом в освоении микроконтроллера обычно становится программатор. Ведь без программатора невозможно загнать программу в микроконтроллер и он так и останется безжизненным куском кремния.
 

Что же представляет из себя это устройство?
В простейшем случае программатор это девайс который связывает микроконтроллер и компьютер, позволяя с компа залить файл прошивки в память контроллера. Также нужна прошивающая программа, которая по специальному протоколу загонит данные в микроконтроллер.
 

Программаторы бывают разные под разные семейства контроллеров существуют свои программаторы. Впрочем, бывают и универсальные. Более того, даже ту же простейшую AVR’ку можно прошить несколькими способами:
 

Внутрисхемное программирование (ISP)
Самый популярный способ прошивать современные контроллеры. Внутрисхемным данный метод называется потому, что микроконтроллер в этот момент находится в схеме целевого устройства — он может быть даже наглухо туда впаян. Для нужд программатора в этом случае выделяется несколько выводов контроллера (обычно 3..5 в зависимости от контроллера).


К этим выводам подключается прошивающий шнур программатора и происходит заливка прошивки. После чего шнур отключается и контроллер начинает работу.
У AVR прошивка заливается по интерфейсу SPI и для работы программатора нужно четыре линии и питание (достаточно только земли, чтобы уравнять потенциалы земель программатора и устройства):
 

  • MISO — данные идущие от контроллера (Master-Input/Slave-Output)
  • MOSI — данные идущие в контроллер (Master-Output/Slave-Input)
  • SCK — тактовые импульсы интерфейса SPI
  • RESET — сигналом на RESET программатор вводит контроллер в режим программирования
  • GND — земля

Сам же разъем внутрисхемного программирования представляет собой всего лишь несколько штырьков. Лишь бы на него было удобно надеть разъем. Конфигурация его может быть любой, как тебе удобней.
Однако все же есть один популярный стандарт:

 

Для внутрисхемной прошивки контроллеров AVR существует не один десяток разнообразных программаторов. Отличаются они в первую очередь по скорости работы и типу подключения к компьютеру (COM/LPT/USB). А также бывают безмозглыми или со своим управляющим контроллером.
 

Безмозглые программаторы, как правило, дешевые, очень простые в изготовлении и наладке. Но при этом обычно работают исключительно через архаичные COM или LPT порты. Которые найти в современном компьютере целая проблема. А еще требуют прямого доступа к портам, что уже в Windows XP может быть проблемой. Плюс бывает зависимость от тактовой частоты процессора компьютера.
 

Так что твой 3ГГЦ-овый десятиядерный монстр может пролететь, как фанера над Парижем.
 

Идеальный компьютер для работы с такими программаторами это какой-нибудь PIII-800Mhz с Windows98…XP.
Вот очень краткая подборка проверенных лично безмозглых программаторов:
 

  • Программатор Громова.
    Простейшая схема, работает через оболочку UniProf(удобнейшая вещь!!!), но имеет ряд проблем. В частности тут COM порт используется нетрадиционно и на некоторых материнках может не заработать. А еще на быстрых компах часто не работает. Да, через адаптер USB-COM эта схема работать не будет. По причине извратности подхода 🙂
  • STK200
    Надежная и дубовая, как кувалда, схема. Работает через LPT порт. Поддерживается многими программами, например avrdude. Требует прямого доступа к порту со стороны операционной системы и наличие LPT порта.
  • FTBB-PROG.
    Очень надежный и быстрый программатор работающий через USB, причем безо всяких извратов. C драйверами под разные операционные системы. И мощной оболочкой avrdude. Недостаток один — содержит редкую и дорогую микросхему FTDI, да в таком мелком корпусе, что запаять ее без меткого глаза, твердой руки и большого опыта пайки весьма сложно. Шаг выводов около 0.3мм. Данный программатор встроен в демоплаты Pinboard

Программаторы с управляющим контроллером лишены многих проблем безмозглых. Они без особых проблем работают через USB. А если собраны на COM порт, то без извращенских методик работы с данными — как честный COM порт. Так что адаптеры COM-USB работают на ура. И детали подобрать можно покрупней, чтобы легче было паять. Но у этих программаторов есть другая проблема — для того чтобы сделать такой программатор нужен другой программатор, чтобы прошить ему управляющий контроллер. Проблема курицы и яйца. Широко получили распространение такие программаторы как:

  • USBASP
  • AVRDOPER
  • AVR910 Protoss

Внутрисхемное программирование, несмотря на все его удобства, имеет ряд ограничений.
Микроконтроллер должен быть запущен, иначе он не сможет ответить на сигнал программатора. Поэтому если неправильно выставить биты конфигурации (FUSE), например, переключить на внешний кварцевый резонатор, а сам кварц не поставить. То контроллер не сможет запуститься и прошить его внутрисхемно будет уже нельзя. По крайней мере до тех пор пока МК не будет запущен.
Также в битах конфигурации можно отключить режим внутрисхемной прошивки или преваратить вывод RESET в обычный порт ввода-вывода (это справедливо для малых МК, у которых RESET совмещен с портом). Такое действо тоже обрубает программирование по ISP.
 

Параллельное высоковольтное программирование
Обычно применяется на поточном производстве при массовой (сотни штук) прошивке чипов в программаторе перед запайкой их в устройство.
 

Параллельное программирование во много раз быстрей последовательного (ISP), но требует подачи на RESET напряжения в 12 вольт. А также для параллельной зашивки требуется уже не 3 линии данных, а восемь + линии управления. Для программирования в этом режиме микроконтроллер вставляется в панельку программатора, а после прошивки переставляется в целевое устройство.
 

Для радиолюбительской практики он особо не нужен, т.к. ISP программатор решает 99% насущных задач, но тем не менее параллельный программатор может пригодиться. Например, если в результате ошибочных действий были неправильно выставлены FUSE биты и был отрублен режим ISP. Параллельному программатору на настройку FUSE плевать с высокой колокольни. Плюс некоторые старые модели микроконтроллеров могут прошиваться только высоковольтным программатором.
Из параллельных программаторов для AVR на ум приходит только:

  • HVProg от ElmChan
  • Paraprog
  • DerHammer

 

А также есть универсальные вроде TurboProg 6, BeeProg, ChipProg++, Fiton которые могут прошивать огромное количество разных микроконтроллеров, но и стоят неслабо. Тысяч по 10-15. Нужны в основном только ремонтникам, т.к. когда не знаешь что тебе завтра притащат на ремонт надо быть готовым ко всему.
 

Прошивка через JTAG
Вообще JTAG это отладочный интерфейс. Он позволяет пошагово выполнять твою программу прям в кристалле. Но с его помощью можно и программу прошить, или FUSE биты вставить. К сожалению JTAG доступен далеко не во всех микроконтроллерах, только в старших моделях в 40ногих микроконтроллерах. Начиная с Atmega16.
 

Компания AVR продает фирменный комплект JTAG ICEII для работы с микроконтроллерами по JTAG, но стоит он (как и любой профессиональный инструмент) недешево. Около 10-15тыр. Также есть первая модель JTAG ICE. Ее можно легко изготовить самому, а еще она встроена в мою демоплату Pinboard.

 

Прошивка через Bootloader
Многие микроконтроллеры AVR имеют режим самопрошивки. Т.е. в микроконтроллер изначально, любым указанным выше способом, зашивается спец программка — bootloader. Дальше для перешивки программатор не нужен. Достаточно выполнить сброс микроконтроллера и подать ему специальный сигнал. После чего он входит в режим программирования и через обычный последовательный интерфейс в него заливается прошивка. Подробней описано в статье посвященной бутлоадеру.
Достоинство этого метода еще и в том, что работая через бутлоадер очень сложно закосячить микроконтроллер настолько, что он не будет отвечать вообще. Т.к. настройки FUSE для бутлоадера недоступны.
 

Бутлоадер также прошит по умолчанию в главный контроллер демоплаты Pinboard чтобы облегчить и обезопасить первые шаги на пути освоения микроконтроллеров.
 

Pinboard II
Прошивка AVR с помощью демоплаты Pinboard II (для Pinboard 1.1 все похоже)

 

easyelectronics.ru

РадиоКот :: «РЕАНИМАТОР» для AVR.

РадиоКот >Лаборатория >Цифровые устройства >

«РЕАНИМАТОР» для AVR.

Идея разработки этого устройства родилась после ошибочной записи значений фьюзов в ATmega8, после которой вывод сброса стал обычным вводом/выводом порта, синхронизация предусматривала внешний источник, да ещё и запрещалось программирование по SPI — короче говоря «полный набор». Поиск схем параллельного программатора по интернету и в печати не дал практически ничего, что удовлетворяло бы заданным условиям простоты и повторяемости. После изучения соответствующих даташитов решено было разработать устройство на одном микроконтроллере, которое восстанавливало бы значения фьюзов, необходимые для работы на обычном последовательном программаторе. Вообще-то, честно говоря, параллельный программатор больше ни для чего и не нужен в любительском конструировании — все функции программирования успешно выполняют широко распространённые последовательные «5 проводков», «STK-200», «AVR910», «usbasp» иже с ними.
Итак, задача поставлена — ищем решение. Начинаем, конечно, с выбора контроллера. Для параллельного программирования необходимо иметь как минимум 19 выводов ( см. таблицу).

Восьмивыводные кристаллы сразу отпадают. Можно, открывая ключи +5В и +12В от одного вывода, использовать 18 линий- в этом случае появляется возможность использовать 20-ти выводные корпуса, ATtiny2313, например. В своей же конструкции я использовал ATmega8515, исходя исключительно из удобства расположения портов (на одной стороне) и линий питания — всё для упрощения разводки печатной платы. Можно применить и 28-ми выводные контроллеры, но я изначально планировал последующее подключение LCD-индикатора и 4-х кнопочной клавиатуры. А, в принципе, собрать устройство можно на любом имеющемся кристалле с необходимым количеством выводов — длина кода — 330 байт.
Кроме того, для коммутирования напряжений питания 5 В и программирования 12 В необходимы соответствующие ключи. Изобретать велосипед я не стал, и использовал широко известное схемное решение в виде транзисторного ключа.
Как и в любой диалоговой системе необходимы устройства ввода и вывода — добавляем, соответственно, кнопку и светодиод.
В результате родилась схема, представленная на рисунке:

Схема, как вы видите, проста до безобразия и особых разъяснений не требует. Единственное, что вызовет определенные конструктивные затруднения — это подключение программируемых контроллеров к программатору. Можно это сделать, например, коммутацией проводниками на макетной плате, а можно (и гораздо удобнее) собрать универсальную плату расширения для основных типов контроллеров (или для тех, с которыми постоянно работаешь), подключаемую к программатору шлейфом.
Питать устройство необходимо от стабилизированного источника 12 В. На микросхеме IC1 собран стабилизатор напряжения питания 5 В. Кнопка SA1 «PROG»- даёт команду на перезапись фьюзов, светодиод зелёного свечения VD1 «DONE» — сигнализирует об успешном перепрограммировании. На транзисторах VT1 — VT4 собраны ключи для коммутации напряжений питания и программирования. Сразу оговорюсь, что схему можно совершенствовать сколько душе угодно. Допустим, установить стабилизатор на 12 В — в этом случае можно питать устройство от нестабилизированного источника 16-22 В. Возможно заменить транзисторные ключи на микросхему коммутатора тока и пр.
Конструкция программатора может быть любой — в зависимости от Ваших возможностей и умения. Я сам программатор сделал на печатной плате, а программируемые микроконтроллеры подключал через макетку. В дальнейшем планирую сделать универсальную плату расширения и подключать к программатору 20-ти жильным шлейфом. Детали любые малогабаритные, номиналы указаны на схеме.
Пару слов о программной части. Программа написана на языке С в оболочке WinAVR. Порядок действий в ней полностью соответствует даташиту ATmega8 (раздел о параллельном программировании).
Работать с программатором очень просто. Контроллер, в котором необходимо переписать фьюзы, вставляется в соответствующую панельку. Включается питание и нажимается кнопка «PROG». Загоревшийся светодиод «DONE» сигнализирует об успешной перезаписи. Питание выключается и, после изъятия из панельки, контроллер используется обычным способом.
В своей конструкции я подключал к программатору, кроме панели для ATmega8 ещё панель для ATmega16, поскольку алгоритм программирования для него почти такой же и прошиваемые значения фьюзов позволяют работать с последовательным программатором. В результате устройство даже в такой представленной «игрушечной» версии успешно «реанимирует» кроме ATmega8 ещё и ATmega8535, ATmega16, ATmega32 — это то, что я лично пробовал перепрограммировать
В дальнейшем я планирую дополнить программатор некоторыми функциями, расширить номенклатуру «реанимируемых» контроллеров. В планах добавить функцию считывания байта сигнатуры и, в зависимости от типа контроллера, прошивать его своими «даташитовскими» значениями. А, вообще, приведённых сведений более чем достаточно, чтобы пользователь мог сам модернизировать программатор — хоть в схемной, хоть в программной части.

Файлы:
Прошивка МК.

Вопросы, как обычно, складываем тут.


Как вам эта статья?

Заработало ли это устройство у вас?

www.radiokot.ru

РадиоКот :: Универсальный AVR-программатор на Arduino.

РадиоКот >Схемы >Цифровые устройства >Примочки к ПК >

Универсальный AVR-программатор на Arduino.

 

  Как то понадобилось мне позаливать скетч из Arduino IDE в мелкий восьминогий ATTiny85, как правило, для этого используется Arduino с соответствующим скетчем ArduinoISP.  Несколько китайских клонов Arduino Nano у меня имелось, поэтому и использовал их. Все бы хорошо, но мне не недоставало одного вывода. Точнее он имеется у тини (вывод RESET), но чтобы задействовать его как цифровой вход, нужно запрограммировать соответствующий фьюз. С помощью  ArduinoISP это можно сделать только один раз, и последующие попытки заливки скетчей с помощью этого и других программаторов ISP становятся невозможными, поскольку вывод с функцией RESET становится не доступным. Если дальнейшей модификации скетча (программы) не требуется, то и проблем нет, но в процессе разработки какого то устройства требуется неоднократная перепрошивка мк.   Выход из этой ситуации один – использование высоковольтного программатора. Для AVR контроллеров с выводами 8, 14 используется высоковольтное последовательное программирование, а для мк с выводами 20 и больше – высоковольтное параллельное. Я озадачился поиском подобного программатора, но для меня было принципиально важно, чтобы он был на основе Arduino и работал из под Arduino IDE.  Рассматривал вариант использования восстановителя фьюзов для тини, но уж очень хлопотная получается перепрошивка. Это нужно сначала восстановить фьюз, затем перепрошить мк, затем фьюз и т.д. В силу своих скромных способностей в программировании, вариант самому написать скетч для высоковольтного программатора на Arduino отпадал. А вот поиск в инете увенчался успехом.  Спасибо парню по имени Matthias Neerache, который создал для нас этот уникальный софт для ардуино.

  Итак, какие функции умеет выполнять Arduino под управлением этой «подопытной обезьяны» (ScratchMonkey). Из мануала —

 ScratchMonkey использует расширенную версию протокола STK500v2. Он реализует следующие методы программирования:

— ISP (In-Sistem Programming) внутрисхемное программирование использует 4х проводный протокол SPI для программирования и поддерживается почти всеми AVR мк. Главный недостаток – при определенных установках фьюзов может быть не пригодным для использования. В ISP режиме ScratchMonkey работает аналогично встроенному в IDE ArduinoISP программатору. Однако, ScratchMonkey немного более универсальный, поддерживает микроконтроллеры с более чем 128КБ флэш-памяти, и может работать с различными настройками фьзов определяющих режим генератора тактовой частоты мк. Имеет дополнительный выход XTAL (сигнал тактовой частоты), что позволяет запрограммировать мк с настройкой фьюзов на внешний генератор. Кроме того, ScratchMonkey может эмулировать SPI (на те же пины) на более низкой частоте чем аппаратный SPI (Limp Mode), что позволяет программировать мк с внутренним генератором тактовой частоты, настроенным на 128 кГц.

— HVSP (High Voltage Serial Programming) высоковольтное последовательное используется для программирования мк 8 и 14 пин и не зависит от состояния фьюзов. Требует внешний источник 12В и транзисторный ключ для подачи высокого напряжения на RESET пин.

— HVPP (High Voltage Parallel Programming) высоковольтное параллельное используется для программирования мк от 20 пин и выше, не зависит от состояния фьюзов. Также требует внешний источник 12В и транзисторный ключ для подачи высокого напряжения на RESET пин.

— TPI (Tiny Programming Interface) Тини программный интерфейс для мк семейства ATtiny4/5/9/10 (SOT23-6 package). ТПИ использует только 3 вывода, и может работать либо в режиме низкого напряжения или в режиме высокого напряжения. RESET пин может использоваться как обычные линии ввода/вывода.

  Более чем достаточно функций для моих целей. Для начала тестирования составил простейшую схему (рис.1) на основе диаграммм из мануала ScratchMonkey и изготовил на макетке типа шилда для Arduino Nano (клона), Рис.2,3 (только ISP и HVSP режимы). Транзистор любой n-p-n.

Рис.1

Рис.1

 

Рис.3

 

  Для начала этот программатор нужно “прописать” в ArduinoIDE . Делаем так: в папке ScratchMonkey/hardware/scratchmonkey , находим и открываем файл programmers.txt , копируем из него строки:

scratchmonkey_stk500v2.name=ScratchMonkey (STK500 Mode)
scratchmonkey_stk500v2.communication=serial
scratchmonkey_stk500v2.protocol=stk500v2

scratchmonkey_stk500v2_hvsp.name=ScratchMonkey HVSP (STK500 Mode)
scratchmonkey_stk500v2_hvsp.communication=serial
scratchmonkey_stk500v2_hvsp.protocol=stk500hvsp

  Вставляем эти строки в аналогичный файл IDE: arduino-1.6.12/hardware/arduino/avrp/rogrammers.txt. Добавляем к этим строчкам еще по 3 строки (выделены на рис.4), без них не работает. Открываем ArduinoIDE и видим, что добавились два программатора ScrstchMonkey (Рис.5).

Рис.4

Рис.5

    В IDE открываем скетч ScratchMonkey.ino и прежде чем залить в Arduino добавим одну строчку. Дело в том, что при высоковольтном последовательном программировании было выявлено, что пин D11Arduino, подающий напряжение питания на мк при обращении к нему остается в 1, а значит программируемый мк остается под напряжением все время, что «не есть гуд».   Я не знаю с какой целью автор это упустил, но при параллелном программировании питание отключается после обращения к мк. Открываем вкладку с файлом SMoHWIF_HVSP.h,  находим функцию Stop() и добавляем строку digitalWrite(HVSP_VCC, LOW) Рис.6.

Рис.6

   Компилим и заливаем скетч в Arduino (без шилда). Вставляем Arduino в шилд, подключаем к разъему (ISP или HVSP) через переходник Attiny. Для режима HVSP подключаем 12V. В пункте Инструменты/Программатор выбираем соответствующий программатор (Рис.5). В пункте «Плата» выбираем предварительно установленные тини. Как добавить ATTiny в IDE здесь. Открываем в IDE файл скетча для тини и заливаем в мк кнопкой «Загрузка» или «Загрузить через программатор».

   Что бы сделать действительно универсальный программатор AVR микроконтроллеров из Arduino родилась такая схема, Рис.7, реализующая все возможности ScratchMonkey.

Рис.7

  Как видим схема гораздо проще, по сравнению с программаторами с аналогичными возможностями. На линии портов установлены ограничительные резисторы 1кОм, с целью предотвращения кз на этих линиях при неблагоприятных условиях. DD2 – dc/dc конвертер на микросхеме ME2149F 5/12V c Aliexpres Рис.8.

Рис.8

Или самодельный на MC34063, Рис.9. Рис.9

   SA1 включает высокое напряжение и переключает низковольтный и высоковольтный режимы. Светодиоды показывают состояние программатора. Разъем XR1 (Debag) для дополнительной отладки программатора, если что-то пойдет не так и сообщений avrdude не достаточно. Подключается к выводам RX и общий конвертера USB/UART, например к такому, Рис.10:

Рис.10

  На компе запускается еще один ArduinoIDE и включается монитор предварительно выбранного порта. В мониторе будет выводиться информация ввиде как на рис. 11 слева. Расшифровка этой информации также показана на рисунке. Режим отладки «включается» в файле SmoConfig.h, где в одной из строк
#undef DEBUG_ISP
#undef DEBUG_HVSP
#undef DEBUG_HVPP
#undef DEBUG_TPI
#undef DEBUG_COMM
#undef нужно заменить на #define. Залить скетч заново в Arduino. Следует отметить, что процессы чтения/записи в режиме отладки замедляются раз в 100.

Рис.11

При параллельном программировании к разъему HVPP контроллеры подключаются согласно таблице 1 и даташиту.

Рис.12

Чтобы работали индикаторы и программатор TPI, как заявляет автор, необходимо пропатчить исходники avrdude, заново собрать и скомпилировать.

Кому интересно как это делается можно посмотреть здесь , но сначала  нужно пропатчить ( внести изменения в исходники avrdude). Patch –файл можно найти в папке ScratchMonkey — avrdude.patch.

 

Пропатченные и скомпилированные файлы avrdude.exe и avrdude.conf  вставляются в папки ArduinoIDE вместо штатных файлов. В файл programmers.txt  вставляются строки:

scratchmonkey.name=ScratchMonkey ISP/TPI
scratchmonkey.communication=serial
scratchmonkey.protocol=scratchmonkey
scratchmonkey.program.protocol= scratchmonkey
scratchmonkey.program.tool=avrdude
scratchmonkey.program.extra_params=-P{serial.port}

scratchmonkey_hvsp.name=ScratchMonkey HVSP
scratchmonkey_hvsp.communication=serial
scratchmonkey_hvsp.protocol=scratchmonkey_hvsp
scratchmonkey_hvsp.program.protocol= scratchmonkey_hvsp
scratchmonkey_hvsp.program.tool=avrdude
scratchmonkey_hvsp.program.extra_params=-P{serial.port}

scratchmonkey_hvpp.name=ScratchMonkey HVPP
scratchmonkey_hvpp.communication=serial
scratchmonkey_hvpp.protocol=scratchmonkey_pp
scratchmonkey_hvpp.program.protocol= scratchmonkey_hvpp
scratchmonkey_hvpp.program.tool=avrdude
scratchmonkey_hvpp.program.extra_params=-P{serial.port}

 

Готово. В списке программаторов  IDE должны добавиться три программатора:

ScratchMonkey ISP/TPI

ScratchMonkey HVSP

ScratchMonkey HVPP

При программировании должны работать индикация и TPI программирование.


Так как ScratchMonkey использует avrdude, то он будет работать и с оболочками дуды. Например с AVR8-Barn-O-Mat (барномат), необходимо только в установках указать пути расположения файлов avrdude, тогда при следующем запуске «барномата» в списках программаторов увидим  ScratchMonkey. Оболочки удобны при заливке HEX-файлов.

 Успехов.

 

Файлы:
Пропатченная дуда
Схемы

Все вопросы в Форум.


Как вам эта статья?

Заработало ли это устройство у вас?

www.radiokot.ru

ParaPROG

ParaPROG
AVR ParaPROG
Параллельный программатор для микроконтроллеров AVR
 
Новую версию управляющей программы для PC смотрим внизу странички.
Что и зачем:
Поводом для создания данного устройства послужило появление новых чипов AVR поддерживающих отладку по протоколу debugWIRE. Так как он не является протоколом программирования, то после смены исходного кода во время отладки и, естесственно, забыв отключить фуз DWENAVRStudio не может заново «подключиться» к отлаживаему кристаллу. Это значит, что фуз DWEN не может быть «сброшен» и, следовательно, отлаживаемый чип больше не может быть запрограммирован через SPI.
После «убийства» двух tiny2313 была написана программа для mega16, которая позволяла, подключившись к меге через житаг, в AVRStudio перепрограммировать фузы тини в параллельном режиме.
Правда это было несколько неудобно и была написана программа для PC, в которой была возможность программирования всех бит фузов для tiny2313.
Дальнейшим развитием стало введение возможности программирования, проверки и чтения Flash памяти, а также введена поддержка других МК.
Поддержка программирования EEPROM не вводилась в виду ненадобности. Вообще программа для МК должна быть написана таким образом, чтоб она сама устанавливала начальные значения EEPROM.
 
Самым очевидным недостатком данного устройства является то, что для сборки программатора AVR необходимо запрограммировать mega16. Однако такой подход имеет право на существование, т.к. даже Atmel предлагает для своего программатора AVRISP схему на своем же микроконтроллере.
Mega16, используемая в данном устройстве, может быть запрограммирована при помощи программатора AVReal и схемы FBPRG («6 проводков на LPT»). Или через интерфейс JTAG с помощью AVR miniICE
К сожалению COM порт компьютера не позволил реализовать «супербыстрое» программирование. Однако на глаз все равно оно проходит быстрее чем последовательное.
DIP корпуса использованы исключительно потому, что автором при отладке используются именно они. Желающие могут сами переделать всю эту конструкцию под SMD.
 
Все приводимое на этой страничке программное обеспечение распространяется свободно. Автор не несет никакой ответсвенности за возможный причиненный ущерб.
Исходные коды программного обеспечения не распространяются.
Дальнейшее развитие этого проекта будет производиться по мере необходимости автора и наличия свободного времени.
 
По всем вопросам можно писать на [email protected]

Особенности:

  • Программирование AVR в параллельном режиме.
  • Возможность «безболезненно» программировать фузы DWEN и RSTDISBL
  • Возможность программирования фуза SPIEN

Поддерживаемые микроконтроллеры:

  • ATtiny 2313
  • ATmega32, ATmega16, ATmega8515, ATmega8535, ATmega8, ATmega48, ATmega88, ATmega168

Схема:

Схема проста и не имеет каких то особенностей.

  • На микросхеме DA1 собран стабилизатор напряжения +5V
  • На транзисторах VT1 и VT2 реализован конвертер TTL — RS232
  • Микросхема DD2 может быть применена с любым буквенным индексом
  • Разъем XS2 служит для подключения к COM порту компьютера
  • К разъему XS3 подключается программируемый микроконтроллер.
  • Разъем XS4 предназначался для внутрисхемной отладки и может быть исключен или же использован для программирования mega16 по интерфейсу JTAG
  • Питание устройства осуществялется от внешнего стабилизированного источника +12V
Mega16 должна быть запрограммирована файлом code.hex из прилагаемого архива.
Фузы mega16 должны быть запрограммированы следующим образом:
В архиве также имеется схема в форматах PDF и PCAD2002, разведенная печатная плата для головного модуля устройства и адаптеров для различных видов МК.

Пример реализации:

центральный модуль

плата адаптеров


Работа с устройством:

Перед началом работы необходимо вставить программируемый микроконтроллер в соответсвующую панельку. Соединить центральный модуль устройства с платой адаптеров 20-ти проводным кабелем. Подать питание и запустить управляющую программу ParaPROG.exe

После старта управляющая программа имеет следующий вид:

Доступна только одна кнопка «Read Chip». При нажатии на эту кнопку программа ParaPROG осуществляет поиск программируемого микроконтроллера и пытается прочесть фузы и лок биты.

Если поиск устройства был неудачным программа выводит сообщение о неудачной попытке и остается в прежнем состоянии.

При удачном поиске осуществляется автоопределение подключенного микроконтроллера, считываются фузы, лок биты и вся эта информация выводится в основном окне программы. Становятся доступны все остальные кнопки.

Значения фузов и лок битов выводятся в формате принятом Atmel. Т.е. 1 = бит не запрограммирован (соответсвует установленному флажку) и 0 = бит запрограммирован (соответсвует снятому флажку)

Кнопки выполняют следующие функции:

Read Chip
Нажатие на эту кнопку осуществляет синхронизацию управляющей программы и центрального модуля программатора, поиск программируемого микроконтроллера, читает сигнатуру, фузы и лок биты
Write Fuses
Запись фузов в соответсвии со значениями заданными флажками для фузов
Write Lock Bits
Запись лок битов соответсвии со значениями заданными флажками для фузов
Chip Erase
Стирает Flash память программируемого микроконтроллера и сброс лок битов
Write Flash
Программирование Flash памяти в соответсвии с файлом, имя которого задано в поле рядом с этой кнопкой
Verify Flash
Сравнение Flash памяти с содержимым файла, имя которого задано в поле рядом с кнопкой Write Flash
Read Flash
Считывание Flash памяти в файл, имя которого задано в поле рядом с этой кнопкой

Программа принимает для записи/сравнения, а также выходным для чтения Flash является файлы binary формата. Получить их можно при помощи утилиты hex2bin из прилагаемого архива.

Во время работы программой выводятся сообщения в строке состояния, диалоговых окнах помогающие пользователю сориентироваться в работе программы.


Замеченные и пока не устранненные ошибки:

  • Так как при постоянно поданном напряжении +12V на Reset программируемые МК довольно сильно грелись, алгоритм работы устройства был сменен на временное включение режима программирования и немедленное выключение его после выполнения действия. Вледсвие этого при работе с некоторыми МК (например мега48) происходит рассинхронизация управляющей программы и основного модуля программатора. Поэтому рекомендуется иногда нажимать кнопку «Read Chip» проводя этим повторную синхронизацию (желательно перед каждым новым действием)
  • Иногда имя выходного файла при операции «Read Flash» самопроизвольно меняется на имя «Reading Flash»

Прилагаемые файлы:

Прошивка, управляющая программа, схема и печатные платы


Дополнения:

09.01.2006


Новая версия управляющей программы 0.2.0.7

Добавлено:

  • Поддержка ATmega162.
  • Возможность добавления пользователем новых кристаллов. Поддержка различных процессоров вынесена в INI-файлы. Теперь для добавления нового процессора достаточно создать для него файл. В этом файле помимо всего прочего есть дефолтные значения для фузов (из даташита).
  • После считывания битов конфигурации с чипа для каждого байта отображается его HEX-представление (для более удобного переноса значений, например, в скрипт пакетной прошивки PonyProg).
  • Значения фузов, не соответствующие дефолтным, отображаются красным цветом.
  • Окошко ввода ком-порта и сохранение этой информации, а также путей к файлам BIN и HEX, в файл конфигурации.
  • Ручной выбор программируемого кристалла. Это полезно, когда у программируемого чипа испортились байты сигнатуры и обычным способом он не видится программатором (иногда бывает 🙂 ).
  • Автоматический запуск конвертера hex2bin при выборе для заливки во флэш файла типа HEX.
  • Исправлена ошибка самопроизвольного изменения имени выходного файла при операции «Read Flash».

 

 

ParaPROG v 0.2.0.7

13.03.2007


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

Дополнения от Sailanser.

22.02.2008


pol-sem.narod.ru

Параллельной программатор для AVR

В данной работе описывается конструкция параллельного программатора, единственной задачей которого является восстановление значений фьюзов микроконтроллера «по умолчанию», т.е. записанных на заводе. К достоинствам прибора следует отнести его простоту, автономность (независимость от ПК), а также возможность постоянно модернизировать и усовершенствовать, в зависимости от поставленных задач. Недостатком является, пожалуй, необходимость задействования достаточно большого количества линий связи с микроконтроллером, но иначе нельзя, ведь это — параллельное программирование.

Идея разработки этого устройства родилась после ошибочной записи значений фьюзов в ATmega8, после которой вывод сброса стал обычным вводом/выводом порта, синхронизация предусматривала внешний источник, да ещё и запрещалось программирование по SPI — короче говоря «полный набор». Поиск схем параллельного программатора по интернету и в печати не дал практически ничего, что удовлетворяло бы заданным условиям простоты и повторяемости. После изучения соответствующих даташитов решено было разработать устройство на одном микроконтроллере, которое восстанавливало бы значения фьюзов, необходимые для работы на обычном последовательном программаторе. Вообще-то, честно говоря, параллельный программатор больше ни для чего и не нужен в любительском конструировании — все функции программирования успешно выполняют широко распространённые последовательные «5 проводков», «STK-200», «AVR910», «usbasp» иже с ними.
Итак, задача поставлена — ищем решение. Начинаем, конечно, с выбора контроллера. Для параллельного программирования необходимо иметь как минимум 19 выводов ( см. таблицу).

Восьмивыводные кристаллы сразу отпадают. Можно, открывая ключи +5В и +12В от одного вывода, использовать 18 линий- в этом случае появляется возможность использовать 20-ти выводные корпуса, ATtiny2313, например. В своей же конструкции я использовал ATmega8515, исходя исключительно из удобства расположения портов (на одной стороне) и линий питания — всё для упрощения разводки печатной платы. Можно применить и 28-ми выводные контроллеры, но я изначально планировал последующее подключение LCD-индикатора и 4-х кнопочной клавиатуры. А, в принципе, собрать устройство можно на любом имеющемся кристалле с необходимым количеством выводов — длина кода — 330 байт.
Кроме того, для коммутирования напряжений питания 5 В и программирования 12 В необходимы соответствующие ключи. Изобретать велосипед я не стал, и использовал широко известное схемное решение в виде транзисторного ключа.
Как и в любой диалоговой системе необходимы устройства ввода и вывода — добавляем, соответственно, кнопку и светодиод.
В результате родилась схема, представленная на рисунке:

Схема, как вы видите, проста до безобразия и особых разъяснений не требует. Единственное, что вызовет определенные конструктивные затруднения — это подключение программируемых контроллеров к программатору. Можно это сделать, например, коммутацией проводниками на макетной плате, а можно (и гораздо удобнее) собрать универсальную плату расширения для основных типов контроллеров (или для тех, с которыми постоянно работаешь), подключаемую к программатору шлейфом.
Питать устройство необходимо от стабилизированного источника 12 В. На микросхеме IC1 собран стабилизатор напряжения питания 5 В. Кнопка SA1 «PROG»- даёт команду на перезапись фьюзов, светодиод зелёного свечения VD1 «DONE» — сигнализирует об успешном перепрограммировании. На транзисторах VT1 — VT4 собраны ключи для коммутации напряжений питания и программирования. Сразу оговорюсь, что схему можно совершенствовать сколько душе угодно. Допустим, установить стабилизатор на 12 В — в этом случае можно питать устройство от нестабилизированного источника 16-22 В. Возможно заменить транзисторные ключи на микросхему коммутатора тока и пр.
Конструкция программатора может быть любой — в зависимости от Ваших возможностей и умения. Я сам программатор сделал на печатной плате, а программируемые микроконтроллеры подключал через макетку. В дальнейшем планирую сделать универсальную плату расширения и подключать к программатору 20-ти жильным шлейфом. Детали любые малогабаритные, номиналы указаны на схеме.
Пару слов о программной части. Программа написана на языке С в оболочке WinAVR. Порядок действий в ней полностью соответствует даташиту ATmega8 (раздел о параллельном программировании).
Работать с программатором очень просто. Контроллер, в котором необходимо переписать фьюзы, вставляется в соответствующую панельку. Включается питание и нажимается кнопка «PROG». Загоревшийся светодиод «DONE» сигнализирует об успешной перезаписи. Питание выключается и, после изъятия из панельки, контроллер используется обычным способом.
В своей конструкции я подключал к программатору, кроме панели для ATmega8 ещё панель для ATmega16, поскольку алгоритм программирования для него почти такой же и прошиваемые значения фьюзов позволяют работать с последовательным программатором. В результате устройство даже в такой представленной «игрушечной» версии успешно «реанимирует» кроме ATmega8 ещё и ATmega8535, ATmega16, ATmega32 — это то, что я лично пробовал перепрограммировать
В дальнейшем я планирую дополнить программатор некоторыми функциями, расширить номенклатуру «реанимируемых» контроллеров. В планах добавить функцию считывания байта сигнатуры и, в зависимости от типа контроллера, прошивать его своими «даташитовскими» значениями. А, вообще, приведённых сведений более чем достаточно, чтобы пользователь мог сам модернизировать программатор — хоть в схемной, хоть в программной части.

Источник

shemu.ru

0 comments on “Параллельный программатор для avr своими руками – Еще раз о параллельном программаторе на базе STK500

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *