Официальный сайт компании Arduino по адресу arduino.cc
Делаем программатор AVRISP MKII за 5 минут
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
На нашем форуме уже была инфа про то, что платы Arduino Leonardo, Micro и ProMicro легко переделываются в программатор AVRISP MKII. Но никаких подробностей никто не рассказывал, хотя очевидно, что это будет интересно всем. Мне как раз нужен был программатор для АтмелСтудии, и я на выходных разобрался сам, и результатами хочу поделиться.
Есть такая библиотека "LUFA" для МК с USB на борту, в ней куча примеров работы через USB, один из которых собссно наш программатор. Но есть одна засада, те исходники что выложены не работают с atmega32u4 на котором собраны все вышеупомянутые ардуины. Хотя официально нигде про это не написано. Но оказывается есть некая подпаченная версия исходников, которая с этим мк работает. Уже не помню, где я её нашёл, главное с ней всё завелось без проблем.
В чём плюсы этого программатора -он умеет шить все AVR, работает в разных программах, а главное в atmel студии и конечно с avrdude. Правда были какие-то версии avrdude с которыми он не работает, но с последней 6.3 точно работает. Это нужно учитывать. Последний avrdude так же используется в ArduinoIDE 1.6.12 Так что с ним так-же удобно работать, с тиньками можно просто нажимать кнопку "загрузка" без выбора пункта "загрузить через программатор"
Программатор быстрый, и у него нет заморочек с джамперами что б читать медленные МК. Учитывая что дешевая плата промикро стоит сейчас порядка 200 рублей, и кроме неё больше в принципе ничего не нужно -программатор получается ещё и очень дешевым. В общем очевидный конкурент народному программатору USBAsp. На фото -прошивка тини25 ардуиной микро в качестве программатора avrisp mk2
Схема подключения проста:
Все выводы ISP на программаторе соединяются с одноимёнными на программируемом чипе кроме Reset,
его нужно подключить на вывод 8 (portb,4). Ещё можно измерять напряжение на программируемом чипе (в атмел студии) для этого вывод А5 (ADC0) подключить к целевому MK, при условии конечно что он питается от своего источника. Иначе будет измеряться напряжение с программатора.
Ардуино MICRO/LEONARDO | ЦЕЛЕВОЙ МК |
MISO | MISO |
MOSI | MOSI |
SCK | SCK |
pin8 (PB4) | Reset |
Gnd | Gnd |
Vcc | Vcc |
A5 | Vcc* |
На фото работа с модулем программатора в атмел студии 7.
Прошить ардуино микро можно без программатора, собственным её загрузчиком. Например воспользоваться avrdude и командной строкой :
avrdude -v -patmega32u4 -cavr109 -PCOM5 -b57600 -D -Uflash:w:AVRISP_MKII.hex:i
Пути и номер компорта разумеется исправить на свои. Прошивать нужно так: нажать ресет на плате, и после треньков винды "пабабам-пам-пам-пам" выполнить команду. Нужно помнить, что комп-порт бутлоадера доступен секунд 7 после ресета. Я узнал номер порта просто посмотрев лог загрузки блинка в ардуино ide. Для переделки вам понадобится сама прошивка, драйверы из последней библиотеки. Cкачать архив, дрова лежат по пути Projects/AVRISP-MKII/WindowsDriver Система сама находит программатор, но нужен обязательно правильный драйвер. Корректно установленный программатор выглядит в системе вот так:
Выяснил почему не работала прошивка из свежих исходников програматора. На это ушло 2 дня, я уже просто пошёл на принцип. Владельцы Teensy писали что у них всё работает, значит с мк нет проблем, проблема в чём-то ещё. Выяснилось, что на выводе SlaveSelect ISP интерфейса на плате Arduino Micro висит светодиод. А программа делает pull-up этой ноги, но из-за светодиода уровень не дотягивает до лог.1, и поэтому SPI не выходил в готовность. Вписал в исходник пару команд, и проблемы нет. Исправленная часть на всякий случай, файл \lufa-master\LUFA\Drivers\Peripheral\AVR8\SPI_AVR8.h
Так что выкладываю прошивку собранную из самого последнего релиза.
Скомпмилил свежую прошивку для платы промикро. Скачать. Выяснилось что светодиоды на этой плате включены не как по схеме "к земле", а к плюсу. Соответссно нет всех тех заморочек, о которых я писал во 2м посту.
Светодиоды кстати работают, но они бесполезны, т.к. отображают и без того очевидные вещи:
Оба горят - USB USB interface is enumerating или interface is busy
Светик около 14 ноги горит -USB interface is ready
Светик около 7 ноги горит USB interface is not ready
Изменил ногу измерения напряжения на А0.
Итого все ноги для этой платы задействованные в качестве ног программатора:
A0 -для измерения напряжения на целевом МК (видно в Атмел студии)
15 -SCK
14-MISO
16-MOSI
8 -к ресету целевого МК
9 -меандр 4 МГц
Так же сделал платку, что б программатор стал более менее цивилизованным . Фотка кликабельна. Сначала хотел буфер 74hc244 на выход поставить, но потом передумал, вполне достаточно токоограничительных резисторов на случай всяких коротышей. Печатка в спринте, вдруг кому пригодится.
dimax Спасибо за полезный девайс и то что делитесь наработками.!
При измерении напряжения девайс сильно врал из-за того, что запитан был через диод, и вместо 5 вольт реально было порядка 4.6в. Мелочь вроде, но неприятно. Решил перевести измерение на внутренний ИОН, но потребовалось поставить на вход резисторный делитель. Конечная схема ниже, номинал резисторов в делителе не принципиален, важно что бы оба были одинаковыми, и желательно 1% ными. На остальных ногах номинал резисторов тоже не критичен, чем меньше тем тяжелее будет перенести МК какой нибудь коротыш. Чем больше, тем сильнее будут скругляться фронты, и следовательно падать надёжность. 100-200 Ом оптимально.
Печатку даже не пришлось переделывать, один резистор на ноге А0 уже был разведён, второй допаял на проходящую мимо землю.
И ещё вернул загорание светодиода при чтении/записи, так интереснее. Но в авторской версии он не мигает.
Прошивка.
Повторил программатор на базе такой же платы Pro Micro. Спасибо за прошивку из предыдущего поста, всё работает. Windows 10 x64, Arduino 1.8.2, Atmel Studio 7. Из того, с чем столкнулся:
1. "Сходу" не залил прошивку через avrdude. Как выяснилось, для Pro Micro нужно перед загрузкой выполнить двойное нажатие Reset (дважды замкнуть RST и GND) для переключения контроллера в режим bootloader'а. Режим устанавливается на 8 секунд, при этом формируется новый виртуальный COM-порт. С первого раза может не заработать, Windows понадобится время для настройки драйвера. После второй (или третьей, как повезёт) попытки всё должно получиться. Подробности есть на сайте Sparkfun.
2. После загрузки прошивки плата определилась в диспетчере устройств как AVRISP mkII (появилась новая группа Atmel USB Devices). До подключения платы уже была предустановлена Atmel Studio 7, видимо, соответствующий драйвер был загружен вместе с ней.
3. Попытка заменить установленный драйвер на драйвер из проекта LUFA (Projects/AVRISP-MKII/WindowsDriver) к успеху не привела - в указанной папке подходящий драйвер не был найден.
4. При помощи Zadig установленный драйвер был заменён на libusb-win32 (v1.2.6.0).
5. После выполненной замены, обновление драйвера на драйвер из проекта LUFA прошло успешно. Всё работает.
Надеюсь, приведённая выше информация окажется кому-то полезной.
P.S. Небольшой вопрос к автору проекта. Обратил внимание, что измерение напряжения происходит некорректно. На контактах А0...А3 присутствует потенциал, стремящийся к напряжению питания (зависит от входного сопротивления измерительного прибора). В результате резистивный делитель, подключенный к А0, не даёт значения, равного половине питающего напряжения, итоговое значение завышено. В каком режиме работают аналоговые интерфейсы платы? Возможно, проблема в этом (цитата из datasheet на 32U4): Port F serves as analog inputs to the A/D Converter. ...... Port pins can provide internal pull-up resistors (selected for each bit).
SergeIO, Ну автор проекта живёт в австралии и не читает наш форум :) А я лишь использовал его библиотеку. По сути вашего вопроса -это не проблема прошивки/библиотеки. У меня на входах А1-А3 ноль вольт. На А0 соответсно пол-питания. И измеряет напряжение программатор точно, показывает столько же, сколько и дорогой мультиметр. Так что смотрите коротыши/непромытости от флюса итд итп.
Коротышей/непромытостей нет, высокий потенциал висит на аналоговых входах А0...А3 "чистой" платы контроллера, без обвязки.
Судя по всему, китайские производители могуть поставлять Pro Micro с разными загрузчиками. В моём варианте, вероятно, загрузчик подключал внутренние pull-up резисторы к аналоговым входам, а прошивка AVRISP просто оставляет настройки входов A0...A3 "как есть".
Проблема решилась подключением платы Pro Micro к внешнему программатору ISP, в качестве которого использовался Arduino Uno, прошивкой загрузчика (Arduino IDE 1.8.2, целевой платой выбрана SparkFun Pro Micro) и последующей повторной перепрошивкой AVRISP mkII от автора.
Теперь монитор показывает точно 3,3V или 5,0V в зависимости от напряжения питания.
К слову, мне попалась Pro Micro с кварцем на 16 МГц и микросхемой стабилизатора на 3,3 Вольта, т.е. контроллер по умолчанию работает в нештатном режиме. Будьте внимательны при покупке.
Попробовал перенести сигнал PDI/TPI CLOCK на другую ногу, но успехом не увенчалось, оказалось это был аппаратный сигнал CTS, и перенести его на другой пин невозможно.
Но на конкретно моей плате PD5 удобно перехватить прямо на токоограничивающем резисторе светодиода.
На всякий случай перекомпилил прошивку, теперь программа не использует светодиод на ноге PD5 для отображения состояний USB-подключений , правда по прежнему светится от клоков XCK1. Сам по себе светодиод не мешает клокам, стало быть потенциальных конфликтных ситуаций не должно быть. Итоговая схема и прошивка.
Проверил на attiny10 -TPI программирование работает.
Привет, а для флешек 25\24 и прочих серий программатор на базе этой же платы можно сделать. Хорошо бы было на одной ардуинки и устройство покрывающее потребности 50% мастеров.
ojakov, не интересовался. Но эти еепромки вообще чем угодно шьются, посмотрите тут http://forum.easyelectronics.ru/viewtopic.php?f=17&t=10947
Спасибо.
Ссылка битая, не могли бы вы перезалить ?
Прошу прощения, видимо что то с форумом. https://yadi.sk/d/iNjBHWCJ3JHNMD
А как бы ей прошить ATXMEGA не сгорит ли чип ? На выходе 4.2В по линии TPI Data, а рабочее напряжение 3.3в у ATXMEGA. Простите за такие вопросы я первый раз занимаюсь прошивкой чипа.
И еще вопросик вам, надеюсь ответите. Правильно ли я подпаял вывод PDI Clock ? Моя Micro выглядит немного иначе -
Немного покопался по форумам и нашел датащит atmega 32u4 ногу верно угадал, теперь знаю точно :) Держу в курсе, да и вдруг кому
то полезно будет))
InternetFor
Получилось у Вас Atxmegu зашить?
Я прошил ее по другому немного, тут понадобится стабилитрон , либо диоды. Я делал проект WX mouse а там уже готовый программатор с фьюзами собирается, схема такая же. ТАк что думаю и тут будет работать прошивка atxmega.
Сегодня шил ATXmega32A4 , все отлично прошилось . И не надо городить всякие делители , просто дополняете схему стабилизатором на 3.3v и запитуете ими программируемый контроллер .
Сегодня шил ATXmega32A4 , все отлично прошилось . И не надо городить всякие делители , просто дополняете схему стабилизатором на 3.3v и запитуете ими программируемый контроллер .
Т.е. по этой схеме из поста выше, просто по VСС ставим стаб и всё (даже на этой печатке можно https://yadi.sk/d/1mdrqnFC3JJctj)? Про меандр 4МГц не понял, это просто подать с генератора нужно при прошивке?
Да , я дополнительно поставил AM1117 3.3V и джампером переключаю 3.3v или 5v . Насчет меандра не знаю , я шил контроллер на плате устройства , где уже имелся кварц .
Всем привет. Успешно прошил ProMicro, подцепились дрова из папки Lufa собствено он на скрине ниже.
Проблема в другом, AVR студия 4 и 6 не видит его, система Вин10, на Вин7 тоже самое. Драйвера стоят все.
На собранном программаторе 3.3В через стаб есть, всё остальное звонится, но программы для прошивки не видят сам программатор.
За час с небольшим подружил программатор с Вин 10. Теперь проблема новая, не читает сигнатуры и вольтаж в АВР студии 6.
Собственно брал 2 нужные мне вывода кроме питания (кварц распаян на плате):
PDI\DATA с Rx и Tx
PDI\CLK с резистора светодиода PD5
folks
может у Вас кокое фото есть того что Вы собрали, не смог я побороть. Питание на плату приходит с камнем, там распаен и кварц, но прошивать не хочет.
Я собрал на макетной плате , не знаю , но там все просто . И да , питание я подавал с программатора .
Доброго времени. Уважаемые. Подскажите в каком случае на РВ5 появляется клок? у меня нет почему
то.
gaalx, похоже я его случайно выключил в последней версии. Сейчас перекомпилил, но не проверял. Прошивка старой ссылке .
Спасибо. На РВ5 появился. Но на PD5 пропал. А нужны ли они оба или хватит одного?
gaalx, внешний клок по задумке автора выводится либо на PD5 либо на PB5.
dimax, если я правильно понял то заморочек с пайкой PD5 можно избежать. или он нужен для некоторых контроллеров?
gaalx, там сидят интерфейсы PDI и TPI , первый для Xмег , второй для очень мелких тинек, типа tiny10
Добрый день, подскажите, как скомпилировать свою прошивку? Например, если вносить изменения в \lufa-master\LUFA\Drivers\Peripheral\AVR8\SPI_AVR8.h Мне необходимо вывести сигнал о начале программирования на внешнюю ногу ProMicro.
random1234, луфа через winavr компилится, просто дать команду "make". Под Win10 какую-то кучу апдейтов пришлось поставить...
Спасибо, буду изучать мануал к winavr...
Получилось скомпилировать прошивку для promicro из исходников lufa в первом посту. Действительно, winavr под win10 сходу не работал. Делал под win7.
Скачал winavr и установил в C:/
Через командную строку перешёл в папку: cd C:/lufa-master/Projects/AVRISP-MKII/ make all
В этой папке предварительно поправил makefile:
MCU = atmega32u4
F_CPU = 16000000
Затем avrdude.exe и полученный .hex тоже положил в C:/ и выполнил действия как в первом посту. Работает)
Подскажите, для изменения функциональных ножек в прошивке вы исправляли только SPI_AVR8.h (тоже из первого поста) ?
random1234, уже не помню, 4 года прошло.
подскажите, не правильно залил фюзы в atmegu328p, этим прогромматором можно поднять мк328?
данный программатор уже собрал на мантажке и залил прошивку.
если можно поделитесь как мне это реализовать.
Зависит от того что у вас за фьюзы получились ... Если Reset отключен или есть запрет на программирование через SPI, то поможет только высоковольтный программатор.