Мегаклон программатор AVRISP MKII для микроконтроллеров AVR.
Долгое время я программировал микроконтроллеры AVR клоном программатором STK500. Он прекрасно уживается с AvrStudio4. И работает прямо из среды этой программы. Так что я программировал AVR чипы и был очень счастлив. Но время шло и появилась AtmelStudio5, потом AtmelStudio6 , и постепенно я переехал на более новую версию AtmelStudio6. Переехал не потому, что перестала устраивать AvrStudio4, а просто удобство писания прог на СИ в 6-ой версии, как мне показалось малек удобнее чем на 4-ке. Есть и подсветка синтаксиса и всплывающие подсказки ну и куча разных фишек при отладке.
Но к сожалению мой любимый программатор-клон STK500 работал с новой 6-ой версией через пень-колоду. То подключится, то не подключится. Ну и писал я поэтому проги на 6-ой версии, а зашивал чипы из под 4-ой. Со временем меня это достало. И я решил сделать себе новый программатор для 6-й версии студии.
Требования к программатору были таковы:
1. Чтоб был прост, без лишних наворотов и не нужных примочек.
2. Чтоб работал надежно как кувалда, долго и счастливо.
3. Высокая скорость прошивания чипов. Ибо мой клон STK-500 не шибко быстрый.
4. Должен очень стабильно работать с AvrStudio4 и AtmelStudio6.
Рытье гугла привело меня к программатору AVRISP MKII. Далее я нарыл вагон схем этого программатора. Все нарытые мной схемы оказались похожи друг на друга, отличия были в мелочах. Из всех этих схем я соорудил свою схему, простую, без наворотов, без лишних кнопок и кучи мигающих светодиодов. Ну скажите пожалуйста, зачем мне аж 7 светодиодов на программаторе, если в самом окне программирования есть прогресс-бар показывающий сколько осталось до конца процесса программирования. Над прогресс-баром есть еще лог сообщений, в котором тоже пишется, что происходит с чипом. Ну и если что то не так с программатором, то сама студия выдает отдельное окно с сообщением в котором написано в чем проблема. Итак, я решил снести из схемы все эти светодиоды и кнопочки. Достаточно одного светодиода для визуализации процесса прошивания.
Срезал так же интерфейсы TPI(для некоторых Attiny) и PDI для Xmega, ибо не планирую в ближайшем будущем с ними работать. Пока Atmega хватает. Схема моего программатора вся на 5 вольт. Однако я уже несколько лет программировал своим древним STK500 на 5 вольт и схемы на 3.3 вольта, проблем не было, ничего не сжег. Но это уж сами решайте, шить таким образом или не шить. Кстати на выводах стоят гасящие резисторы, поэтому, по идее можно шить схемы с чипами запитанными на 3.3 вольта. Итак вот сама схема.
Как видим программатор получился 3 детали 2 запчасти. Вот и весь программатор.
Все конденсаторы керамические. Микроконтроллер ATUSB162-16AU я использовал б/у. Термофеном из какого-то устройства выпаял. Так как у меня есть старый программатор, то прошивку я залил им. И меня не сильно интересовало, есть ли в ATUSB162-16AU загрузчик. Но если вы собираете свой первый программатор, то с завода изготовителя в этих чипах ATUSB162-16AU стоит загрузчик. И можно залить прошивку в чип без программатора. Для этого надо воспользоваться программой скачанной у Atmel. Называется она FLIP. Таким образом, можно одним движением руки собрать этот программатор, не имея в наличии второго программатора. Проблема «курица и яйца» не возникает.
Вот сама плата.
Уже спаянная.
Вид сверху.
Готовый полностью.
Прошивку для программатора я взял из проекта LUFA. Понятно что там нет готового файла *.HEX для заливки в ATUSB162-16AU. Поэтому я скомпилировал его так, как писал об этом здесь. Но вам этого делать не надо, так как прошивка, разводка платы в (Sprint-Layout) и схема в нормальном виде в топике. Кстати, если не ошибаюсь, то вроде как загрузчик в ATUSB162-16AU работает на 8MHz, а сам программатор работает на 16MHz. Учитывайте это. Но в топике есть прошивка и для 8ми Мгц
Грабли которые возникли при сборке и тестировании программатора: Граблей в общем то не возникло, поэтому особо писать нечего.
Настройки FUSE BIT для ATUSB162-16AU:
HIGH 0xD9
LOW 0xDE
Но если в чипе стоит загрузчик, то значения FUSE BIT будут другие.
Перед тем как втыкать программатор в USB порт вашего любимого компьютера, надо сперва поставить AtmelStudio6. Потом втыкаем программатор. Драйвера подхватываются автоматически. Если нет, то вручную указываем папку в которой находится установленная AtmelStudio6. Программатор я протестировал с AvrStudio4 и с AtmelStudio6.0, 6.1, 6.2. Тест происходил на Windows XP (32bit) и Windows 7 (64bit). В обоих случаях все поставилось и разу стало работать. На днях (16.12.2013) опробовал на Windows 8 (64bit), заработал как миленький.
Результат:
1. Схема получилась как и хотелось, с минимумом деталей. Для начинающих само то.
2. Испробован под 3 платформами WINDOWS. Нареканий не возникло.
3. Если честно, то я впечатлился скорости прошивания программатора. 54 кило прошивки программатор засандалил в кристалл за 4-5 сек (без верификации). Мой старый клон STK500 такой же объем прошивал где то за 60 сек.(без верификации). Разница в скорости прошивания явно очевидна.
4. Студии работают с ним, как с родным. Ошибок не появлялось пока не одной.
Так что считаю, что данный программатор достиг поставленных перед ним целей.
Вот видео-тест работы программатора с AvrStudio4 и с AtmelStudio6. На видео при тесте с AvrStudio4 винда глюканула малек. Она в принципе на том компе тормозит постоянно.
Так что, уважаемые начинающие радиолюбители и не очень начинающие, пробуйте. Надеюсь вам понравится. Желаю удачи.
P.S.
Забыл сказать. На схеме есть два вывода RESET. Так вот, чтоб прошивать чипы используем тот RESET, который прикреплен к ноге PB4. Аппаратный RESET используется только лишь один раз, при загрузке прошивки в ATUSB162-16AU другим программатором.
Попытался запустить данный программатор в связке AVRDUDE 5.11.1 с привлекательной утилитой AURDUDE_PROG 3.2. Но пока не работает. Возможно если получится нарыть причину, то напишу.
P.S. №2
Заметил что каждые пол года AtmelStudio обновляется следующим сервис паком. И после каждого такого обновления программатор отказывается работать, ибо не совпадает версия прошивки программатора с требуемой. И каждый раз приходится заново перекомпилировать проект из LUFA. Потом заливать новую прошивку в программатор. Версия прошивки меняется в файле V2ProtocolParams.h
Это несколько неудобно. Вот на днях обновил Studio, воткнул программатор, хрясь а он не работает. Ибо студия требует обновить прошивку программатора. Засада. Вот я решил сразу этот параметр firmvare_version_minor поменять с запасом на последующие обновления студии. Сделал его 0x50. Прошил, проверил все работает. Надеюсь этого надолго хватит. В аттаче лежат прошивки для кварца на 8 и 16 MHz.
Источник
Isp программатор для avr своими руками
Универсальный AVR-программатор на Arduino.
Автор: AV_K
Опубликовано 31.10.2016
Создано при помощи КотоРед.
Как то понадобилось мне позаливать скетч из 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.
Для начала этот программатор нужно “прописать” в 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).
В IDE открываем скетч ScratchMonkey.ino и прежде чем залить в Arduino добавим одну строчку. Дело в том, что при высоковольтном последовательном программировании было выявлено, что пин D11Arduino, подающий напряжение питания на мк при обращении к нему остается в 1, а значит программируемый мк остается под напряжением все время, что «не есть гуд». Я не знаю с какой целью автор это упустил, но при параллелном программировании питание отключается после обращения к мк. Открываем вкладку с файлом SMoHWIF_HVSP.h, находим функцию Stop() и добавляем строку digitalWrite(HVSP_VCC, LOW) Рис.6.
Компилим и заливаем скетч в Arduino (без шилда). Вставляем Arduino в шилд, подключаем к разъему (ISP или HVSP) через переходник Attiny. Для режима HVSP подключаем 12V. В пункте Инструменты/Программатор выбираем соответствующий программатор (Рис.5). В пункте «Плата» выбираем предварительно установленные тини. Как добавить ATTiny в IDE здесь. Открываем в IDE файл скетча для тини и заливаем в мк кнопкой «Загрузка» или «Загрузить через программатор».
Что бы сделать действительно универсальный программатор AVR микроконтроллеров из Arduino родилась такая схема, Рис.7, реализующая все возможности ScratchMonkey.
Как видим схема гораздо проще, по сравнению с программаторами с аналогичными возможностями. На линии портов установлены ограничительные резисторы 1кОм, с целью предотвращения кз на этих линиях при неблагоприятных условиях. DD2 – dc/dc конвертер на микросхеме ME2149F 5/12V c Aliexpres Рис.8.
Или самодельный на MC34063, Рис.9. Рис.9
SA1 включает высокое напряжение и переключает низковольтный и высоковольтный режимы. Светодиоды показывают состояние программатора. Разъем XR1 (Debag) для дополнительной отладки программатора, если что-то пойдет не так и сообщений avrdude не достаточно. Подключается к выводам RX и общий конвертера USB/UART, например к такому, Рис.10:
На компе запускается еще один ArduinoIDE и включается монитор предварительно выбранного порта. В мониторе будет выводиться информация ввиде как на рис. 11 слева. Расшифровка этой информации также показана на рисунке. Режим отладки «включается» в файле SmoConfig.h, где в одной из строк
#undef DEBUG_ISP
#undef DEBUG_HVSP
#undef DEBUG_HVPP
#undef DEBUG_TPI
#undef DEBUG_COMM
#undef нужно заменить на #define . Залить скетч заново в Arduino. Следует отметить, что процессы чтения/записи в режиме отладки замедляются раз в 100.
При параллельном программировании к разъему HVPP контроллеры подключаются согласно таблице 1 и даташиту.
Чтобы работали индикаторы и программатор 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
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
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
Готово. В списке программаторов IDE должны добавиться три программатора:
При программировании должны работать индикация и TPI программирование.
Так как ScratchMonkey использует avrdude, то он будет работать и с оболочками дуды. Например с AVR8-Barn-O-Mat (барномат), необходимо только в установках указать пути расположения файлов avrdude, тогда при следующем запуске «барномата» в списках программаторов увидим ScratchMonkey. Оболочки удобны при заливке HEX-файлов.
Источник