Программаторы. Опыт изготовления AVRISP mkII.

Программатор — важнейший инструмент разработчика устройств на микроконтроллерах. Можно даже сказать — главный инструмент, я думаю, доказывать это никому не нужно. Для своих первых конструкций я собирал известный всем STK-200, который работает исправно и надёжно и по сей день. Всем он хорош: и простотой изготовления, и отсутствием дефицитных дорогих комплектующих, и, конечно, поддержкой множества средств разработки. Но наряду с этим у него два больших недостатка: необходимость портов  LPT или COM, и невысокая скорость записи (считывания). В современных ноутбуках, как правило, вышеуказанных портов нет, они довольствуются USB. ?, хотя, можно собрать преобразователь интерфейса COM — USB, благо схемных решений хватает, но проблема скорости записи (считывания) остаётся,  и с этой проблемой сталкиваются все, кто движется по лестнице освоения микроконтроллеров вверх))) Для работы в оболочке Algorithm Builder собирался программатор Громова — простейшая и надёжная конструкция. Он тоже отлично работает, но ему присущи те же недостатки, что и для STK-200. В последующем изготавливались пару экземпляров USBasp. Этот программатор работает в общем-то довольно шустро, к тому же с ним можно работать прямо не выходя из редактора Programmer Notepage  пакета WinAVR , но частенько отмечалась нестабильная работа. Причём закономерности сбоев я так и не увидел — это могло зависеть и от компьютера и от конкретного типа или даже экземпляра микроконтроллера. Кроме того записывать фьюзы с помощью USBasp в Programmer Notepage довольно муторно — нужно вручную прописывать в makefile  проекта. Есть оболочка для работы с USBasp, называется она USBASP_AVRDUDE_PROG, но там список поддерживаемых контроллеров достаточно скуден((( На странице сайта товарища Medved я обнаружил описание его варианта клона AVRISP mkII, который разработал  Dean Camera в рамках своего проекта LUFA. Плату я перерисовал в Sprint Layout, добавив по совету Medved светодиод активности программатора. Также добавил джампер для отключения питания программируемого контроллера от порта USB, т.к. изначально планировал его использовать для прошивки контроллеров семейства ATXmega (об этом ниже). Печатную плату сделал методом ЛУТ, который прекрасно описан здесь товарищем DI HALT. Собрал программатор, получилось вот что.

Прошивать AT90usb162 через бутлоадер мне не захотелось, и вот по какой причине. Т.к. придётся менять фьюзы (по умолчанию включен CKDIV8), всё равно нужно подключаться к каком-нибудь программатору. А если это так, то и прошится лучше сразу через ISP. Решил всё это сделать через CVAVR программатором STK-200. Подключился – и тут первая засада – CVAVR не видит контроллера. Пораскинул мозгами, прочитал ещё раз соответствующую ветку у Medved. Ага, вывод RESET не тот, что нужен. Бросил RESET с колодки ISP прямо на кристалл отдельным проводником. Кликаю «read chip signature»  — всё в порядке, кристалл читаеться. Решил сначала прописать фьюзы, но поскольку в CVAVR почти не работаю, набокопорил и отключил вывод RESET, к тому же затактировал чип от внешнего источника)))) Полный набор! С досады хотел выкинуть уже всю плату в мусорку, но вспомнил, что полтора года назад разрабатывал приборчик под громким названием «Реаниматор для AVR» (в своё время я его выкладывал на Радиокот). Это устройство исправляет криво настроенные фьюзы по умолчанию, т.е. как указано в даташите. ?, хоть делал я его по алгоритму, описанному для ATmega8, но он лихо реанимировал ATmega8535, 16, 32, 8515. Раз такое дело, терять нечего, то решил испробовать его и на залоченой  AT90USB162. В исходнике для Реаниматора поменял значение младшего фьюза (старший, где находится и RSTDSBL, оказался таким же как и в меге8). Самой мозготёркой оказалось подпаяться к ногам USB162-й на плате, но я мужественно это преодолел))) Подаю питание, дрожащей рукой нажимаю кнопку «Перезапись», и, о чудо !!! – загорелся зелёный светодиод «Done». Реанимация принесла свои плоды, работоспособность по ISP восстановлена. После этого вдумчиво настроил фьюзы, залил прошивку. Подключил клон к своему нетбуку. Нетбук, как ему и полагается обнаружил новое устройство, сам установил драйвера и выдал сообщение, что устройство готово к работе. Зашёл в AVRStudio, законнектился с первого раза, начал проверять… Уважаемые коллеги, впечатления самые, что ни есть лучшие! Шьёт, читает с несравнимой с USBasp скоростью! Работа стабильная. Отмечу один момент. На вкладке main окна AVRISP

есть кнопочка Settings. Под ней указана частота работы программатора по ISP. Так вот эта частота, должна быть не более четверти от частоты, на которую настроена работа, программируемого Вами контроллера с помощью фьюзов. Т.е. если контроллер работает на 1 МГц , то выставленная с помощью вышеуказанной кнопки Settings частота ISP не может быть более 250 кГц, контроллер просто на будет видится программатором и студия будет выдавать, что-то типа:

Это требование нужно обязательно учитывать. Проверял на чипе с внешним кварцем 16 МГц, устанавливал частоту ISP 4 МГц – работает великолепно! Прошивку можно скачать хоть на LUFA, хоть у Medved.

Ну, и напоследок пару слов о режиме PDI, необходимом для работы с семейством Xmega. Как выяснилось после обращения к первоисточнику LUFA, товарищ Medved в своей схеме просто не вывел соответствующие ноги интерфейса PDI с контроллера. Но мы его за это ругать не будем, поскольку его статья оказалась толчком  к новым исследованиям))). А славянская привычка читать инструкцию по эксплуатации и техописание после того как уже всё сломано (имею в виду себя) заставит меня в ближайшем будущем доработать печатку и собрать ещё один AVRISP mkII, т.к. осваивать Xmega просто необходимо.

Да, народ на форумах жалуется, что AT90USB162 пропали из продажи. Посмотрел на «Космодроме» — действительно исчезли, но остались 82-е. Так вот, если удалось достать любой микроконтроллер AVR c аппаратным USB (AT90USB82, ATmega16USB и др.), то LUFA для этих случаев приводит исходники. Поменять тип контроллера, перекомпилировать заново и зашить не составит труда. Успехов, друзья!

Печатная плата в формате Sprint Layout 5.0

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

78 комментариев на «Программаторы. Опыт изготовления AVRISP mkII.»

  1. Medved говорит:

    Отличная работа 🙂
    А вот возможность комментить незарегистрированным пользователям, лучше включить!

  2. admin говорит:

    Спасибо:) Сайтосторением раньше не занимался, поэтому много не знаю — учту.

  3. maksbunin говорит:

    Будьте добры, выложите пожалуйста, печатную плату

  4. admin говорит:

    Выложил:) Качайте на здоровье! Удачи!

  5. Sergei_ говорит:

    Некоторый ахтунг по поводу совета использовать AT90USB82…
    Читаем файл AVRISP-MKII.txt в проекте LUFA… видим авторское предупреждение «While this application can be compiled for USB AVRs with as little as 8KB of FLASH, for full functionality 16KB or more of FLASH is required. On 8KB devices, ISP or PDI/TPI programming support can be disabled to reduce program size».

    Сергей.

  6. admin говорит:

    Вы правы, Сергей))) Если воспользоваться 82-й мегой, то какой-то из режимов — либо ISP, либо PDI нужно исключить. После компиляции полного варианта выходит 9940 байт флеша. Для реализации ISP проще всего в файле XPROGProtocol.c закомментить содержимое функций, т.е. не удалять, а оставить пустыми, и можно смело компилить под 82-ю. Куплю данный кристалл — отпишусь по результатам. Спасибо за справедливое замечание))).

  7. Sans говорит:

    Здравствуйте! Собирал программатор по вашей схеме, только с не большими изменениями под smd . Спаял, подключил и винда пишет, что устройство не определено, попробовал снова подключить, определила как AT90USB162. Установил драйвера, в диспетчере устройств появилась строчка Atmel и AT90USB162, только почему то в инструкции по установки драйверов в папке Flip’a такой строчки нету,и выглядит она как и тут http://microsin.ru/content/view/685/44/
    Решил прошить через Flip и когда выбираю Select a Communication Medium — usb — open выдает сообщение Could not open usb device.
    Если Вы знаете в чем проблема, то подскажите пожалуйста, а то я уже совсем отчаялся, не знаю то ли когда плату переделывал ошибся, то ли спаял криво((((

  8. admin говорит:

    Уважаемый Sans! Я прошивал не через бутлоадер, а через ISP программатором STK-200, используя Code Vision — мне так показалось проще, ведь всё равно нужно установить фьюзы тактирования на внешний кварц (только для работы ISP нужно бросить временную перемычку с 5-й ноги ISP-разъёма на RESET непосредственно контроллера). Да и для работы по бутлоадеру нужно было вывести на плате две кнопки — с RESET-а и вывода HWB на корпус для выхода в этот режим:
    — нажимаем кнопку SW1 RESET
    — удерживая кнопку SW1 RESET, нажимаем кнопку SW2 HWB
    — удерживая кнопку SW2 HWB, отпускаем кнопку SW1 RESET
    — отпускаем SW2 HWB
    это цитата с microsin.
    Программируйте через ISP — мой вам совет. Удачи!

  9. aleksasm говорит:

    Собрал программатор, тоже кое где переделал плату под смд, программировал через ISP. Проверил с микроконтроллером Atmega8 на CodeVisionAVR и AVR studio, все классно работает!

  10. admin говорит:

    На днях с «Космодрома» должны прислать AT90USB82. Попробую её в AVRISP mkII. О результатах отпишусь. Всем удачи!

  11. Аноним говорит:

    Здравствуйте!
    А можете добавить информацию о правильных установках FUSE (допустим скрин из CVAVR), чтобы другие не ошибались при программировании.
    Заранее спасибо.

  12. admin говорит:

    По умолчанию фьюзы такие: CKSEL = «1110», SUT = «01», CKDIV8 = «0». — нужно перепрограммировать CKDIV8 — записать туда 1, т.е. отменить деление на 8.

  13. S.D. говорит:

    Здравствуйте!
    Негде нету схеми данного програматора с TPI/PDI раземами!! Оч нужно!! Помогите найти!

  14. admin говорит:

    PDI_DATA — это соединённые вместе через резисторы 390 Ом выводы RxD1 и TxD1, а PDI_CLC — XCK, т.к. PDI реализован на USART. Загляните сюда: http://clock.cc.ua/

  15. David говорит:

    Спасибо большое за Вашу статью…
    ? все-таки, хотелось бы уточнить применение для программирования xMega…
    Ведь xMega, как я понял, имеют питание до 3.6 Вольта, а AT90USB162 питается от 5 Вольт. Можно ли подавать 5-вольтовые сигналы на xMeg-у? Если нет, то как с этим бороться?
    Заранее спасибо!

  16. David говорит:

    Прошу прощения… Посмотрел внимательно на схему.
    http://avrdevices.ru/usb-programmator-dlya-avr/
    Там контроллер питается от Ucap, как я понимаю, это 3.3 Вольта. То есть, с уровнем сигнала все должно быть в порядке.
    Кстати, увидел новую версию:
    http://avrdevices.ru/analog_avrisp_mkii_v20/
    Там использован кварц на 16 МГц. При этом допускается питание разным напряжением 3.3/5 Вольт.
    Можно ли питать контроллер от выхода LM1117IDT-3.3 ?
    Будет ли при напряжении питания 3.3 Вольта работать на 16 МГц?

  17. s_black говорит:

    Здравствуйте, David! Отвечаю на Ваши вопросы. Обращаю Ваше внимание, что в данном варианте программатора, равно, как и в описанных на avrdevices, не выведены необходимые для режима PDI (программирование Xmega) выводы. Если Вы соберёте полный вариант (и для ISP, и для PDI), то при программировании Xmega снимайте джампер, подводящий питание к разъёму программирования (если это будет 5В), а схему с Xmeg-ой питайте отдельным источником 3,6В. Не обязательно использовать кварц 16 МГц — поставьте 8 МГц, сделайте изменения в mikefile, перекомпилируйте и заново зашейте. С выхода LM1117IDT-3.3 питать можно, но правильно подключитесь (стр. 186 даташита AT90USB162). В даташите написано:• Maximum Frequency
    – 8 MHz at 2.7V — Industrial range
    – 16 MHz at 4.5V — Industrial range
    хотя я думаю, что работать на 16 Мгц от 3,3В будет — нужно проверять на конкретном камне. Удачи Вам!

  18. Андрей говорит:

    Собрал, 16 Мгц 3,3В работает нормально, прошил 128 мегу

  19. Ярослав говорит:

    А вот кто сможет объяснить предназначение всех джамперов? Заранее спасибо

  20. Ярослав говорит:

    ? ещё, у тебя нету схемки???

  21. s_black говорит:

    Джампер на 13-й ноге — управление загрузчиком. Второй джампер коммутирует напряжение питания на программируемую плату. Ссылка на схему указана в статье. Удачи!

  22. Ярослав говорит:

    Спасибо.
    Вот моё устройство
    http://upwap.ru/1362108
    http://upwap.ru/1362105

    Последовательность действий:
    Установил драйвера
    Во флипе выбрал хекс файл и нажал Ран
    Когда прошилось, нажал Старт Апликейшен
    Устройство определилось
    В студии тоже оно нашлось

    Вопрос в том что я не закидывал файл ЕЕПРОМ и не выставлял фьюзы. Как это можно сделать? Помогите плз, вся работа стоит)

  23. Ярослав говорит:

    Спасибо.

    Последовательность действий:
    Установил драйвера
    Во флипе выбрал хекс файл и нажал Ран
    Когда прошилось, нажал Старт Апликейшен
    Устройство определилось
    В студии тоже оно нашлось

    Вопрос в том что я не закидывал файл ЕЕПРОМ и не выставлял фьюзы. Как это можно сделать? Помогите плз, вся работа стоит)

  24. s_black говорит:

    EEPROM и фьюзы запрограммируйте в Code Vision (он поддерживает AT90USB162) через STK-200.

  25. Ярослав говорит:

    То есть сторонний программатор так и так нужен?

  26. s_black говорит:

    Цитата из статьи: …Т.к. придётся менять фьюзы (по умолчанию включен CKDIV8), всё равно нужно подключаться к каком-нибудь программатору. А если это так, то и прошится лучше сразу через ISP…

  27. Ivan говорит:

    Здравствуйте.
    Разрешите поинтересоваться, какие успехи у автора с AT90USB82 в AVRISP mkII?

  28. s_black говорит:

    Здравствуйте! Готовлю расширенную статью по вышеописанному программатору. Общался по «мылу» с автором LUFA — кое что он мне подсказал. 82-ю мне прислали, блин, в MLF-корпусе (5х5 мм!), но программатор успешно собран))) ?дут испытания — скоро отпишусь.

  29. David говорит:

    Позавчера приехали микросхемы. После двух дней мучений все заработало. ?спользовал кварц 16 МГц и питание 3.3 Вольта.
    Правда, когда попытался подать на входы Vcc и AVcc 3.3 Вольта от внешнего стабилизатора 2950A, а на UVcc подал 5 Вольт с питания USB, то ничего не работало. Но потом сделал питание от Ucap (по схеме) и все заработало.
    Большое спасибо!

  30. Алексей говорит:

    Добрый день
    Добавьте пожалуйста информацию о правильных установках FUSE (в CVAVR), только напишите напротив какого фьюза ставить галочку, объясните на пальцах проще говоря.? если есть возможность дайте схемку на которой указано какие элементы использованы.
    Заранее спасибо.

  31. s_black говорит:

    Если кристалл новый (что скорее всего у вас и есть), то считайте значения фьюзов, и напротив фьюза CKDIV8 измените значение на противоположное. Элементы используйте ЛЮБЫЕ малогабаритные.

  32. geovas говорит:

    Уважаемый Sans, подскажите пожалуйста назначение перемычки, которая подтягивает ногу PD7 к земле, зачем она нужна?)
    ? еще один вопрос: я поставил кварц на 8МГц и прошил через FLIP прошивкой с сайта Medved-а, нужно ли еще что-нибудь делать? Просто не имею возможность прямо сейчас опробовать приборчик, т.к. надо еще изготовить кабель для соединения программатора с тем разъемом, который я использую в своих проектах.

  33. s_black говорит:

    Я отвечу за Sansa, если он не против))) Перемычка нужна для запуска бутлоадера. После прошивки через FLIP Вам нужно правильно выставить фьюзы. Выше по ветке всё написано. Удачи Вам!

  34. geovas говорит:

    Фьюз CKDIV8 выставил, как надо. Теперь новый, очень глупый вопрос 🙂 Хочу затестить девайс, какой прогой можно воспользоваться? Я хочу просто прочитать содержимое ATmega8. Попробовал SinaProg — почему-то не получилось.

  35. s_black говорит:

    Глупых вопросов не бывает, а вот ответов…))) Пользуйтесь AVRStudio — качайте с атмеловского сайта. Удачи.

  36. geovas говорит:

    Урааа!!! Все получилось и работает 🙂 По крайней мере данные читаются / фьюзы прошиваются. STK200 послужил мне верой и правдой 2 года, надеюсь этот будет не менее надежен 🙂 Наконец-то можно прямо с ноута прошивать новые контроллеры! раньше мог делать это только через bootloader, но его еще надо откомпилить и прошить! Спасибо авторы за статью и s_black за подсказки!

  37. s_black говорит:

    Пожалуйста! Но я и есть автор, поэтому мне два спасиба))) Успехов в начинаниях!

  38. geovas говорит:

    Оу, сори я сначала пишу, потом читаю… Буду двигаться дальше и следить за минералами сайта!

  39. Аноним говорит:

    Сделал, а подключить не выходит — не видит его студия. Все пишут о драйверах. Где их взять??

  40. s_black говорит:

    Драйвера уже установлены в Студии. ?щите ошибку монтажа или назначение ног в исходниках.

  41. ?лья говорит:

    доброго времени суток!
    разработка отличная на вид. все спаял, решил прошить через isp при посредстве code vision. все нормально, нашелся, определился, но при заливке стал выдавать ошибки что-то в стиле «по адресу такому -то type mismatch. ошибок таких много. что бы это значило?

  42. s_black говорит:

    Точно сказать тяжело((( Посмотрите монтаж.

  43. ?лья говорит:

    Все нормально, правда, так и не понял, почему. прошил через другой code vision, кстати более ранней версии. прошилось тоже с третьего раза. всегда такая нестабильная работа с микроконтроллерами?
    однако, программатор работать под code vision все равно отакзывается. под avr studio 5 — работает отлично.
    спасибо за статью, это мой первый программатор, который сделан по вашей схеме и печатке.

  44. s_black говорит:

    Мой Вам совет — выбросьте КодВижн в топку! Мало того, что там синтаксис С перекручен, так ещё и генератор начального кода голову думать отучает! А с прошивкой фьюзов я тоже попал (см. статью выше). Хотя, конечно, выбор платформы дело личное — прямо вижу горящие взоры эмбеддеров, пользующих CV)))
    Завсегда пожалуйста!

  45. j-pet говорит:

    Ох и завёл всех в заблуждение s_black
    Цитата: Прошивать AT90usb162 через бутлоадер мне не захотелось, и вот по какой причине. Т.к. придётся менять фьюзы (по умолчанию включен CKDIV8), всё равно нужно подключаться к каком-нибудь программатору.

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

  46. s_black говорит:

    Здравствуйте! Т.к. варианты прошивок я видел с частотами 8 и 16 МГц, то, соответственно CKDIV8 отключать всё равно нужно. Если Вы приведёте мне кусок кода где показано как отключается этот фьюз программно, я с удовольствием Вам скажу — да, дружище, Вы абсолютно правы, программатор можно не подключать вообще. Но даже, если это окажется и так, статья изначально называется «…. опыт (т.е. МОЙ опыт) изготовления….», а не «Руководство по изготовлению…»

  47. ?лья говорит:

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

  48. s_black говорит:

    Да, это распространённые грабли. Я недавно в Кейле чуть голову не сломал — всё не мог понять почему проект не собирается. Причина оказалась такая же — путь к workspace лежал через папку с названием Мои документы.

  49. N.I.K. говорит:

    А AVRStudio 5 увидит этот программатор?

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.