26 июля 2013 г.
Как запрограммировать AVR микроконтроллер с помощью usbasp
Здесь я расскажу как запрограммировать микроконтроллер на примере ATmega32 с помощью «Khazama AVR Programmer», «eXtreme Burner- AVR» и «usbasp».
usbasp — это программатор который можно собрать самому, либо купить (на ebay 3$). Драйвера и дополнительная информация на сайте создателя
Khazama AVR Programmer и «eXtreme Burner- AVR» это программы которые заливают прошивку в микроконтроллер, нужно использовать только 1 из них на выбор, ниже я расскажу как с ними работать.
Сперва нужно поставить необходимый драйвер для USBASP, который можно найти по ссылке выше. Далее нужно написать код который будет управлять нашим микроконтроллером, для этого я использую ATMEL STUDIO.
После того как мы скомпилируем наш код, создастся прошивка для МК (.hex файл) которую нужно залить в МК, её работоспособоность можно проверить в самой AVR студии или любой среде моделирования для этого предназначенной , к примеру Proteus.
Далее нужно подключить программатор к МК, для этого необходимы только 6 проводов USBASP (если их 10 то 3, 4, 6 и 8 выводы не используются ).
Ниже представлена схема программатора если вы решите собрать его самостоятельно:
Если купить готовый программатор, то чаще всего он уже с готовым разъёмом, который осталось подключить к микроконтроллеру. Лучше прозвонить кабель который выходит из программатора и найти землю, остальное можно найти с помощью распиновки.
Когда известно какой вывод за что отвечает осталось подключить их к ножкам микроконтроллера, для этого нужно свериться с даташитом и проверить распинову, нам нужны контакты MOSI, SCK, MISO, RESET, GND и VTG (это VCC +5 В питание). К примеру необходимые ножки ATmega8:
Когда всё готово нужно запустить Khazama AVR Programmer и проверить видит ли он МК.
Главное окно:
Сперва нужно выбрать в выпадающем меню в центре наш микроконтроллер. Затем нужно нажать command -> read chip signature:
Если не выдаст никаких ошибок то всё в порядке.
Теперь нужно показать ему наш .hex файл, для этого нужно нажать File -> load flash file to buffer. Выбрать нужный файл и нажать ОК:
Теперь нужно разобраться с fuse битами (про них можно почитать Здесь).
Чтобы зайти в меню fuses нужно нажать Command -> fuse and lock bits (CTRL + A):
В появившемся окне нажать LOAD после чего мы увидим биты уже выставленные в микроконтроллере:
Галочка значит что бит НЕ выставлен, как по нотации ATMEL, пустой квадратик значит что бит ВЫСТАВЛЕН. «Write all» записать в МК выставленные биты.
Мне не нужно ничего менять, так что я нажимаю cancel и жму «auto programm» для того чтобы запрограммировать МК.
Всё, микроконтроллер получает напряжение от программатора и сразу начинает работать.
Если появляется ошибка «error setting usbasp isp clock» нужно либо перепрошить программатор, либо сменить программу для программатора, но даже с этой ошибкой МК можно прошивать как и раньше, только нельзя прочитать и выставить Fuse биты.
Небольшая программа, созданная с целью быстрой прошивки микроконтроллеров Atmel AVR.
Приложение Khazama AVR Programmer имеет простой и удобный минималистичный оконный интерфейс. Данный программатор является графической оболочкой программы avrdude и отлично подходит для начинающих разработчиков. В настоящее время Khazama AVR Programmer поддерживает около восьмидесяти моделей микроконтроллеров AVR, относящихся к семействам ATmega, ATxmega, ATtiny и AT90. Программатор имеет минимальное количество функций, однако выгодно отличается скоростью работы и стабильностью. Программное обеспечение позволяет: загружать в буфер сохраненные hex-файлы прошивки для EEPROM и FLASH памяти, записывать hex-файлы в EEPROM и FLASH память микроконтроллера, смотреть содержимое EEPROM и FLASH памяти чипа, очищать память контроллера, менять конфигурацию FUSE и LOCK битов, проводить верификацию EEPROM и FLASH памяти. Все операции можно осуществлять либо с помощью меню, либо с помощью кнопок на панели инструментов, внешний вид которых срисован с аналогичных кнопок в ПО PonyProg.
Среди прочих функций программы Khazama AVR Programmer стоит отметить: наличие контекстных подсказок и клавиш быстрого доступа, возможность установки данного приложения поверх всех остальных окон, наличие просмотрщика EEPROM и FLASH hex-файлов (без редактирования), визуализация и расшифровка значений битов конфигурации микроконтроллеров. Настраиваемая кнопка «AutoProgram» запускает на исполнение набор операций, заданных в окне «Program Options» (по умолчанию установлена очистка чипа и запись во FLASH память). Программа Khazama AVR Programmer работает с программатором USBasp, поддерживается программирование по TPI. Тактовая частота программирования по интерфейсу ISP задается в пределах от 500 Гц до 1,5 МГц.
Процедура программирования FUSE битов не требует разбирательств с шестнадцатиричными значениями и заключается в выборе необходимых параметров из выпадающих списков, что снижает вероятность залочить микроконтроллеры по ошибке. Также FUSE биты можно изменять, устанавливая галочки в нижнем поле. При этом поставить галки на несуществующие конфигурации нельзя, что также является плюсом в плане безопасности. В окне программирования FUSE битов присутствуют функции: записи фьюзов в память контроллера, сохранения текущей конфигурации в буфер, вызова сохраненной конфигурации из буфера, восстановления стандартной конфигурации FUSE битов, то есть той, с которой микроконтроллер поступил с завода. Приложение Khazama AVR Programmer работает с файлами дампов памяти *.hex.
Приложение было написано арабским программистом по имени Behzad Khazama (Иран, провинция Хорасан-Резави, город Себзевар). Последняя версия данного программатора вышла в середине 2011 года.
Программа представлена лишь на английском языке и не имеет русификатора.
Софт Khazama AVR Programmer поддерживается операционными системами семейства Microsoft Windows – XP, Vista, 7, 8 (32- и 64-разрядными).
Распространение программы: бесплатная
Для прошивки своих поделок на AVR я использую программатор USBasp, купленный сто лет назад за 100р на AliExpress. Пользоваться очень удобно, никаких тебе древних COM или LTP портов, современный USB!
Вот так выглядит это чудо китайской промышленности!
Ну а теперь по подробнее)
Автором данного программатора является немец Thomas Fichl, страничка его разработки со схемами, файлами печатных плат и драйверами.
Работает этот программатор через ISP.
Распиновка контактов на самом программаторе
Поэтому я всегда стараюсь выводить этот разъем если сам развожу плату. Очень удобно, прошивать и отлаживать можно на ходу. Прошил, не заработало, подправил код, прошил еще раз. Не нужно снимать контроллер вставлять в программатор….
В работе и железе выглядит примерно так
Ну а теперь рассмотрим с каким же софтом работает данная поделка!
Скачиваем драйвера с офф сайта, страничка для загрузки.
Устанавливаем. Внимание! Компьютер будет ругаться на то что драйвер без цифровой подписи. В Windows 7 просто подтверждаем что хотим продолжить,
а для Windows 8 и новее используем инструкцию.
Все теперь программатор готов к работе.
Я использую бесплатный прошивальщик Khazama AVR Programmer. Отличная прога с минималистичным дизайном!
Выбираем чип и поехали!
Тут можно поиграться с FUSES битами, все с описаниями за что отвечают!
Ну вот пожалуй и все!
Не знаю как у всех, но именно на мой экземпляр USBASP v2.0, Khazama ругается при перепрошивке Error Setting USBASP ISP Clock…
Игра с выставлением разной частоты не дает результатов.
После недолгих поисков в интернете наткнулся таки на такую же проблему у других людей.
Для исправления этого досадного косяка, нужно перепрошить программатор)) Для такого трюка нам понадобится еще один USBasp!
Вот так нужно все соеденить. Теперь заливаем прошивку
Выставляем Fuse биты и прошиваем!
После этого доставучие ошибки пропадут!
Update 2016
После отличной работы программатора, внезапно стала вываливаться новая ошибка вот такого вида
error: usbasp_transmit: libusb0-dll:err [contorl_msg]
Решение было найдено не незамедлительно, нужно понизить частоту программирования. Идем в Command — > Program Options — > ISP CLK Speed и выставляем 187.5 KHZ (или AUTO).
После этого все снова работает!
Update 2017
Вставляем новую не разу не прошитую Atmega8 и видим такое!
100500 раз проверяем схему и программатор, все в норме! И у же почти сдавшись, находим косяк! При первом включении Atmega8 работает от внутреннего генератора на частоте 1 Mhz, она просто не успевает определиться в программе. Решение простое, нужно уменьшить частоту чтения в Khazama.
После этого прошиваем контроллер на 8 Mhz и выставляем AUTO.
И решение еще проще))) Нужно замкнуть контакты на программаторе JP3, для понижения частоты, а после выставления фьюзов на более высокую частоту работы atmega, разомкнуть.
Программатор USBasp. : 7 комментариев
Спасибо за статью.Такой же случай.Только не было 2го usbasp.Сначала прошил AVR910 в usbasp,этой
прошивкой(usbasp.atmega8.2011-05-28),а потом им исправил прошивку в usbasp по вашей инструкции.
Рад что вам помогло!
А у меня на проце atmega 48 20au. работал, после перепрошивки никак не определяется. не пойму как оживить. Можете подсказать?
Вы FUSES правильно выставили? Если после перепрошивки не определяется то скорее всего выставили работу не от кварца а от внешнего генератора. я в таком случае делал из Ардуино простейший генератор и подавал сигнал на мертвый чип, а уж потом спокойно прошивал.
Автору от души огромное спасибо, благодаря тебе вернул к жизни 3 штуки attiny2313, у которых из-за незнания выставил (при помощи фьюзов) слишком маленькую тактовую частоту. Программатор из-за старой прошивки работал только со старой казамой (1.6.2), в которой нельзя выбрать частоту ISP. Теперь обновил прошивку и новая версия (1.7) работает как надо. Жму руку, братишка.
Добрый день!
Имеются два программатора USPasp.
С родной прошивкой ведут себя так
Если прошить последнюю, то в AVRdude можно сделать только одну операцию. То есть, например, прочитали микроконтроллер — и всё, все последующие попытки что-либо сделать выдают вот такую ошибку
Если программатор вынуть/вставить, то опять можно выполнить одну операцию.
Есть у кого-нибудь мысли, что это и как с этим бороться?
Обновил прошивку прогером dapa, не надо народ пугать вторым usbasp, всё нормально любым путём. Интересуют простые и дешёвые hvsp & hvpp, бывают ли?
В моём случае это абсолютный рекордсмен по скорости доставки — около 5 месяцев беспечного блуждания непонятно где. Несмотря на чудовищную задержку по времени, пакет я всё-таки получил, чему несказанно рад, не взирая на недочёты, о коих поведаю ниже. Поскольку у меня весьма плохая память, то нужно было объединить найденную полезную информацию где-то в одном месте в виде памятки, собирать её по крупицам в разных закоулках сети оказалось делом нетривиальным, поэтому оформлю всё это отдельным постом.
USB ISP — самый дешёвый программатор контроллеров AVR, что можно найти в продаже, брался для расширения кругозора и более углубленного изучения AVR.
Обзор в себя включает: описание программатора, как его подключить к чипу, настройку его работы в программах AvrDude Prog, Khazama, Atmel Studio 7, и не только это.
Конечно вместо него можно использовать Arduino UNO с прошитым в него скетчем ArduinoISP, но это не удобно, возня с проводами, особенно если UNO всего одна, отбивает энтузиазм. Проще было заиметь отдельно такой программатор, точнее два. По двум причинам:
1) Ещё перед покупкой уже из отзывов было понятно, что качество пайки этих устройств страдает, а некоторым ещё и с расколотыми стабилитронами они приходили. Решено было подстраховаться, заказав два.
2) Один программатор к тому же можно шить другим, переставив перемычку на ведомом устройстве.
Технические характеристики
Поддерживаемые ОС: Windows, MacOS, Linux
Процессор: Atmega8A
Интерфейс подключения к ПК: USB
Интерфейс программирования: ISP (внутрисхемное)
Напряжение программирования: 5В или 3.3В (в зависимости от положения перемычки JP2)
Частота программирования: 375кГц (по умолчанию) и 8кГц (при замкнутой перемычке JP3)
Поддерживаемые контроллеры: все AVR с интерфейсом SPI
Описание: ссылка
Список поддерживаемых микроконтроллеров
ATmega серия
ATmega8 ATmega48 ATmega88 ATmega168 ATmega328
ATmega103 ATmega128 ATmega1280 ATmega1281 ATmega16
ATmega161 ATmega162 ATmega163 ATmega164 ATmega169
ATmega2560 ATmega2561 ATmega32 ATmega324 ATmega329
ATmega3290 ATmega640 ATmega644 ATMEGA64 ATmega649
ATmega6490 ATmega8515 ATmega8535
Tiny серия
ATtiny12 ATtiny13 ATtiny15 ATtiny26 ATTINY25
ATtiny45 Attiny85 ATtiny2313
Серия Classic
AT90S1200 AT90S2313 AT90S2333 AT90S2343 AT90S4414
AT90S4433 AT90S4434 AT90S8515
AT90S8535
CAN серия
AT90CAN128
PWM серия
AT90PWM2 AT90PWM3
Внешний вид
Комплект поставки минимальный — программатор + шлейф без резинки. В моём случае в удвоенном количестве.
Культура исполнения и вправду хромает, мне в глаза сразу бросились криво припаянные гребёнки. Везде где только можно — имеются следы флюса, причём с окислами, по всей видимости, программаторы давно валялись на складе, а сборка их производилась с присущей китайцам быстротой.
Некоторые отверстия не целиком заполнены припоем
SMD-элементы тоже криво припаяны
Гребёнку чуть позже выровнял, уж больно неприятно на такую раскосую смотреть, элементы пропаял, а плату затем отмыл
Размеры платы несколько больше USB-TTL-конвертера на CP2102
Длина шлейфа около 30см, бытует мнение, что чем короче шлейф, тем лучше. Некоторые его специально укорачивают. Если заказать оригинальный USBASP — там комплектный шлейф уже 50см.
Органы управления на плате
На плате имеются три перемычки, задающие разные режимы работы программатора:
JP1 — замыкается в случае обновления прошивки самого программатора
JP2 — тройная перемычка, здесь выбирается, какое напряжение будет подаваться на прошиваемый микроконтроллер, либо 5В (левое положение) и 3.3В (правое положение)
JP3 — если её замкнуть, то программирование контроллера будет происходить с пониженной частотой, однако китайцы не стали сюда впаивать гребёнку, т.к. на данной прошивке она не требуется
Программатор, как можно заметить, построен на базе Atmega8 с кварцем на 12МГц. Самый правый верхний элемент, подписанный F1, с перевёрнутой цифрой 4 — самовосстанавливающийся предохранитель, защищает USB-порт ПК/ноутбука, если на прошиваемой плате вдруг произошло короткое замыкание. Под перемычкой JP2 находится LDO-стабилизатор 662К, понижающий напряжение с 5В до 3.3В, если перемычка установлена в правое положение.
Установка драйверов
Чтобы начать пользоваться программатором, необходимо сперва поставить на него драйвера. Вставляю любой программатор в USB-порт ПК, звучит сигнал о новом оборудовании, на самом девайсе горит светодиод, но автоматического поиска драйверов не происходит.
примечание. перед установкой драйвера необходимо отключить проверку цифровой подписи в Windows
1) Скачать драйвера, распаковать в удобное место.
2) Зайти в «Диспетчер устройств», например навести курсор на главную кнопку (Win10), нажать ПКМ и выбрать пункт «Диспетчер устройств».
3) В ветке «Другие устройства» можно увидеть неопознанное устройство USBASP с оранжевым треугольничком — > навести на него курсор, нажать ПКМ -> «Обновить драйверы…»
4) Указать путь до раннее распакованной папки с драйверами — «libusb_1.2.4.0», нажать «ОК»
5) «Всё равно установить этот драйвер»
6) Готово, теперь оранжевый треугольничек пропал, драйвера поставлены
Прошивка собрата
Мне уже было известно до этого, что китайцы продают эти программаторы с не самой свежей прошивкой. Решил сперва обновить прошивку на одном из них, а затем ради интереса сравнить оба программатора в работе. Для этого соединяю шлейфом оба устройства, на ведущем (который вставляю в USB-порт) никакие перемычки не трогаются, а на ведомом программаторе (на котором будем обновлять прошивку) я переставил перемычку с JP2 на JP1:
Захожу в программу Khazama AVR Programmer, выбираю из выпадающего списка ATmega8 и сперва считаю Flash-память через пункт меню «Command» -> «Read FLASH to Buffer», чтобы cохранить китайскую заводскую прошивку у себя. На всякий случай.
При этом периодически будет выпадать такая ошибка, закрыв окно, программа продолжит работу.
Идёт считывание, которое завершается всплывающим окном об успешном считывании FLASH-памяти в буфер
Теперь нужно сохранить содержимое буфера: «File» -> «Save FLASH Buffer As…». Выбрать удобное место, куда старая прошивка сохранится, дать имя (я например её назвал firmware_1) и дописать расширение *.hex — если его не писать, то она сохранится как просто файл без расширения.
Скачиваю прошивку для программатора с этой странички, архив
usbasp.2011-05-28.tar.gz
(в этом же архиве есть драйвера для Windows, распаковываю содержимое в удобное место.
Тем временем в Khazama загружу скачанную прошивку в буфер. «File» -> «Load FLASH File to Buffer». Выбираю прошивку, где в названии написано atmega8, поскольку прошиваемый программатор на этом чипе.
Как видно, здесь три прошивки — для Atmega8, 48 и 88. В нашем случае Atmega 8 — её и выбираю.
Прошиваю. «Command» -> «Write FLASH File to Buffer». Снова возникает ошибка, но после идёт процесс, завершающийся успехом.
Поскольку в обычном понимании «запрограммировать» означает выставить 1, то при работе со фьюзами всё ровно наоборот, от чего возникает путаница и в этом случае можно по неосторожности заблокировать контроллер и прошить потом его будет уже нельзя. Программа Khazama AVR Programmer удобна просмотром фьюз-битов — там наглядно видно и
расписано
, какие из них установлены, а какие нет.
Находятся они по пути «Command» -> «Fuses and Lock Bits…», откроется окно:
Где по нажатии кнопки «Read All» считаются фьюз- и лок-биты, а пресловутая ошибка успеет вылезти аж 5 раз подряд. Ошибки сыпятся именно на заводской китайской прошивке. Но если вставить в USB-порт недавно прошитый программатор, прошивкой скаченной по ссылке выше, то этих ошибок вылазить уже не будет, однако баги вылезут в другом месте, но о них позже.
Связь с платой Pro Mini (Atmega 168, 3.3V/8MHz)
В этом случае выводы программатора соединяются с выводами платы Pro Mini, как проиллюстрировано на схематичном рисунке ниже. Перемычки не переставляются, т.е. остаётся в положении 5В.
Несмотря на то, что плата Pro Mini подписана как 3.3В, на 168-ю Атмегу можно подавать и 5В. Стабилизатор AMS1117 на 3.3В кстати вообще выпаян из платы.
AVRDUDE PROG 3.3
Консольная программа для прошивки микросхем, своего графического интерфейса не имеет, в стоке работает из командной строки, но энтузиастами было написано немало оболочек на неё, для удобства работы с ней. Одна из таких оболочек называется AVRDUDE PROG, созданная русскоязычными разработчиками. Эта оболочка, на мой взгляд удобна как раз для Flash-перепрошивки МК. После её запуска выбирается контроллер, в данном случае Atmega168 и тип программатора — USBasp. После чего можно заниматься записью/считыванием памяти. Что на заводской прошивке, что на новой — в обоих случаях никаких проблем с общением с Atmega168 не возникло. Прошил ради интереса ардуиновский стандартный blink-скетч, экспортированный в бинарный HEX-файл. Всё гладко.
Khazama AVR Programmer
Здесь достаточно выбрать микроконтроллер из выпадающего списка и можно уже работать с памятью/битами.
Однако если на самом программаторе установлена заводская прошивка, периодически будут сыпаться ошибки, о чём выше уже было упомянуто, на новой прошивке — данных ошибок уже нет.
Связь с контроллером ATtiny13A в корпусе SOIC8
Соединение согласно схеме ниже. Но тут всё немного интереснее.
Поскольку голый чип в SMD-корпусе SOIC8, в данном случае я поместил его в переходник SOIC8-DIP8 для удобства соединения с программатором в дальнейшем. Обзор на этот переходник можно почитать здесь.
AVRDUDE PROG 3.3
Тут выбирается из списка одноимённый контроллер, программатор USBasp и, если программатор прошит заводской китайской прошивкой, то все операции проходят ровно и гладко. Однако стоит заменить программатор на другой, с обновлённой прошивкой, то при любой операции возникает ошибка.
Появляется она из-за того, что ни программа, ни программатор не могут автоматически перейти в режим медленного программирования, необходимый для ATtiny13. Но есть как минимум два выхода:
1) Железный: замкнуть перемычку JP3
2) Программный: отредактировать файл «programm.ini» в папке с программой AVRDUDE PROG 3.3
Внести туда четыре строчки кода и сохранить. (взято отсюда)
progisp=jtag2pdiportprog=COM1portenabled=1[UsbaspSpeed]
progisp=Usbasp -B 3
portprog=usb
portenabled=0
Примечание. Здесь применён ключ «-B», который и занимается переводом программатора на пониженную частоту программирования. Значение «3» — время в микросекундах
После этого снова запустить AVRDUDE PROG 3.3 и в выпадающем списке программаторов выбрать UsbaspSpeed. Теперь работа с ATtiny13 на программаторе с новой прошивкой будет уже без ошибок, а перемычку JP3 замыкать больше не потребуется в этом случае.
Khazama AVR Programmer
Выбирается контроллер из списка и почти та же ситуация.
Программатор с заводской прошивкой нормально работает с ATtiny13, если не считать постоянно появляющихся окон с ошибкой, о чём раннее уже рассказывал.
Но с программатором на новой прошивке уже появляется иная ошибка с невозможностью прочесть сигнатуру (цифровую подпись) контроллера.
Но стоит замкнуть перемычку JP3, и можно спокойно работать
Или просто задать частоту работы из выпадающего списка по пути «Command» -> «Programm Options», я выставил частоту 187.5кГц.
Примечание. Частота программирования должна быть меньше тактовой частоты прошиваемой микросхемы не менее, чем в 4 раза. Но если посмотреть на считанные с ATtiny13 фьюзы, то на последней строчке Int.Rc.Osc. указано 9.6МГц.
Как минимум, у новичка возникнет вопрос — почему на выставленных в KHazame 1.5МГц — появляется та же ошибка? А также почему, если в AtmelStudio написать например код мигания светодиода с частотой раз в секунду и в макросе прописать:#define f_cpu 9600000
то загрузив код на Attiny13, светодиод будет мигать очень медленно?
— посмотрим на предпоследнюю строчку, где Divide Clock by 8 Internally [CKDIV8=0] — это включенный предделитель частоты, который делит эти 9.6МГц на 8, и поэтому реальная частота чипа здесь — 1.2МГц. Поэтому при выборе частоты 187.5кГц или меньше, ошибки исчезают и можно работать нормально с контроллером.
Примечание 2. Способ с выбором частоты в KHazame по скорости работы в несколько раз выигрывает у метода с физическим замыканием перемычки JP3, потому как в последнем случае частота понижается до 8кГц.
Интеграция программатора в Atmel Studio 7
Atmel Studio — среда разработки от фирмы Atmel, но напрямую работать с USBASP, тем более китайским, она не может. Однако благодаря той же программе AVRDUDE, входящий в состав пакета AVRDUDE PROG 3.3, которая будет играть здесь роль посредника, можно соорудить «костыль», а уже в самой среде затем добавить возможность прошивать МК, подключенный через USBASP.
Сперва нужно запустить среду, предполагается, что некий код у нас уже написан и собран. В моём примере это простая мигалка светодиодом — Blink.
На верхней панели инструментов выбрать «Tools» — «External Tools…»
Откроется небольшое окно, нажать «Add»
В самом верхнем поле «Title:» ввести любое удобное название, я написал «Atmega168», т.к. та конфигурация, что приведу чуть ниже относится конкретно к этому контроллеру, и для любого другого контроллера она настраивается индивидуально.
В большом поле наверху, название инструмента будет автоматически продублировано.
Вторая строка, поле «Command:» — здесь нужно указать путь до файла «avrdude.exe», который находится в папке с вышерассмотренной программой
Третья строка, поле «Arguments:» необходимо ввести собственно саму конфигурацию
Конфигурация для Atmega168
-p m168 -c usbasp -P usb -U flash:w:$(ProjectDir)Debug$(TargetName).hex:a
-p — наименование контроллера
-с — какой программатор
-P — порт, через который будет заливаться прошивка
-U — какая операция с какой памятью будет производится (в данном случае запись во Flash)
Если нужно настроить для другого МК, то параметр «m168» нужно изменить на соответствующий контроллер, который будет прошиваться. Например «m8» для Atmega8 или «m328p», если Atmega328p. Параметры для других МК смотрите здесь — также там найдёте описания ключей AVRDUDE.
Конфигурация для ATtiny13
-p t13 -c usbasp -B 3 -P usb -U flash:w:$(ProjectDir)Debug$(TargetName).hex:a
Здесь можно заметить уже два изменения: помимо «t13», добавился уже знакомый ключ «-B» со значением «3» для снижения скорости программирования
После заполнения полей нажать «Apply» и «ОК». Окно закроется
Теперь, если снова кликнуть по «Tools», там появится только что созданный инструмент. И по нажатии по нему откомпилированный код будет автоматически прошит в контроллер.
Но эта операция происходит в два клика, что не очень удобно. Надо вынести этот инструмент на главную панель инструментов, чтобы он был всегда на виду.
Для этого нужно снова зайти в «Tools», затем кликнуть по пункту «Customize…»
Откроется следующее окно:
Перейти во вкладку «Commands» — нажать кнопку «Add Command…»
Ещё одно окно появится. В нём — в левой колонке выбрать «Tools», а в правой колонке выделить «External Command 1». Нажать «OK»
«External Command 1» окажется наверху списка, и, обратите внимание на саму панель инструментов — в интерфейсе появился пункт «Atmega168».
Но как мне кажется, место ему отведено не совсем удачное, желательно его сдвинуть вправо, для этого нажимается кнопка «Move Down» (одно нажатие = сдвиг на одну позицию вправо). После этого можно закрывать окно по кнопке «Close» и шить чип прямо из студии в один клик через обозреваемый программатор.
При перепрошивке чипа таким методом, на секунду появляется консольное окно AVRDUDE. Но может возникнуть необходимость как-то сохранить этот лог для дальнейшего его просмотра — тогда в окне «External tools» нужно поставить галку на «Use Output window».
И теперь лог будет отображаться в окне вывода, что внизу программы ATmel Studio 7. Данная галка может задаваться отдельно для каждого добавленного в «External tools» контроллера.
Дополнение по фьюзам программатора
Из документа READMI, идущего в комплекте с драйверами и прошивкой для USBASP, позже выяснилось, что разработчик рекомендует выставить определённую конфигурацию фьюз-битов, определяющих работу внешнего резонатора.
Минусом khazam’ы является то, что в окне со фьюзами не отображаются HEX-значения выставленных битов. Это уже можно посмотреть в AVRDUDE PROG. Заводские фьюзы, выставленные китайцами, выглядят так (обязательно поставить точку «инверсные» — выделил синим прямоугольником):
Как рекомендует выставить разработчик:
HFUSE=0xc9
LFUSE=0xef
Это нужно снять две галки с «BODEN» и «SUT1» (выделено красным овалом),
поставить две галки на «CKOPT» и «SUT0» (выделено зелёным прямоугольником),
справа в колонке при этом будут отображаться HEX-значения изменённых битов (выделено жирным красным прямоугольником): Lock Byte: 3F, Fuse High Byte: C9, Fuse Low Byte: EF.
Если всё сходится, можно нажимать «программирование»
ВНИМАНИЕ. Злой фьюз-бит RSTDISBL — не трогать ни в коем случае, иначе его установка заблокирует контроллер и прошить потом через USBASP его уже будет нельзя.
_____________________________________
Выводы
Опробовано, работает. Если khazam не планируется использовать, то в обновлении прошивки для программатора — смысла нет, благо и так прекрасно работает, причём в случае с ATtiny13 никаких правок и перемычек вносить не требуется. Последняя прошивка — почему-то оказалась более капризна в этом плане. Единственное, после получения, плату надо пропаять и отмыть.
Список ссылок
1) Описание USBASP
2) AVRDUDE PROG 3.3 (форум)
3) Khazama AVR Programmer 1.7
4) Китайская стоковая прошивка (10кб)
5) Архив с прошивками для USBASP и драйверами для Windows — сайт создателя проекта
Раньше, для прошивки AVR микроконтроллеров я использовал AvrUsb500 by Petka (STK500) и AVR Studio 4. Всё было нормально, пока микросхема FTDI FT232RL не дала сбой и не хотела работать. После этого начал искать альтернативы и наткнулся на Khazama AVR Programmer и USBasp V2.0. Программа сразу понравилась именно своим минимализмом, имеет простой и интуитивно понятный интерфейс. Маленькая да удаленькая. Вот с тех пор и пользуюсь этим замечательным АВР программатором.
Khazama AVR Programmer — возможности
Khazama работает со всеми ходовыми микроконтроллерами AVR, позволяет программировать flash и eeprom, прочитать содержимое памяти flash и eeprom, стирать чип, а также менять конфигурацию фьюз-битов (Fuses and Lock Bits). Всё необходимое для прошивки микроконтроллеров AVR. Настройка фьюзов осуществляется выбором источника тактирования из выпадающего списка, таким образом, вероятность «убить» контроллер по ошибке резко снижается. Фьюзы можно менять и расстановкой галок в нижнем поле, при этом нельзя расставить галки на несуществующую конфигурацию, что делает конфигурацию фьюзов более безопасной. И это тоже большой плюс.
Запись фьюзов (Fuses)
Запись фьюзов в память микроконтроллера осуществляется при нажатии кнопки Write All. Для сохранения текущей конфигурации есть кнопка Save, а Load возвращает сохраненную. Кнопка Default предназначена для записи стандартной конфигурации фьюзов, такой, с какой микроконтроллеры идут с завода, обычно это 1МГц от внутреннего RC.
В общем, за все время пользования этим программатором, он показал себя с наилучшей стороны в плане стабильности, безопасности и скорости работы. Рекомендую пользоваться всем, кто хочет программировать AVR микроконтроллеров.
Скачать
драйвера KhazamaAVRProgrammer.rar
Похожие записи
Время на прочтение
4 мин
Количество просмотров 593K
Как театр начинается с вешалки, так программирование микроконтроллеров начинается с выбора хорошего программатора. Так как начинаю осваивать микроконтроллеры фирмы ATMEL, то досконально пришлось ознакомится с тем что предлагают производители. Предлагают они много всего интересного и вкусного, только совсем по заоблачным ценам. К примеру, платка с одним двадцатиногим микроконтроллером с парой резисторов и диодов в качестве обвязки, стоит как «самолет». Поэтому остро встал вопрос о самостоятельной сборке программатора. После долгого изучения наработок радиолюбителей со стажем, было решено собрать хорошо зарекомендовавший себя программатор USBASP, мозгом которого служит микроконтроллер Atmega8 (так же есть варианты прошивки под atmega88 и atmega48). Минимальная обвязка микроконтроллера позволяет собрать достаточно миниатюрный программатор, который всегда можно взять с собой, как флэшку.
Автором данного программатора является немец Thomas Fichl, страничка его разработки со схемами, файлами печатных плат и драйверами.
Раз решено было собрать миниатюрный программатор, то перерисовал схему под микроконтроллер Atmega8 в корпусе TQFP32 (распиновка микроконтроллера отличается от распиновки в корпусе DIP):
Перемычка J1 применяется, в случае если необходимо прошить микроконтроллер с тактовой частотой ниже 1,5МГц. Кстати, эту перемычку вообще можно исключить, посадив 25 ногу МК на землю. Тогда программатор будет всегда работать на пониженной частоте. Лично для себя отметил, что программирование на пониженной скорости на доли секунды дольше, и поэтому теперь перемычку не дёргаю, а постоянно шью с ней.
Стабилитроны D1 и D2 служат для согласования уровней между программатором и USB шиной, без них работать будет, но далеко не на всех компьютерах.
Светодиод blue показывает наличие готовности к программированию схемы, red загорается во время программирования. Контакты для программирования выведены на разъем IDC-06, распиновка соответствует стандарту ATMEL для 6-ти пинового ISP разъема:
На этот разъем выведены контакты для питания программируемых устройств, здесь оно берется напрямую с USB порта компьютера, поэтому нужно быть внимательным и не допускать кз. Этот же разъем применяется и для программирования управляющего микроконтроллера, для этого достаточно соединить выводы Reset на разъеме и на мк (см. красный пунктир на схеме). В авторской схеме это делается джампером, но я не стал загромождать плату и убрал его. Для единичной прошивки хватит и простой проволочной перемычки. Плата получилась двухсторонняя, размерами 45х18 мм.
Разъем для программирования и перемычка для снижения скорости работы программатора вынесены на торец устройства, это очень удобно
Прошивка управляющего микроконтроллера
Итак, после сборки устройства осталось самое важное — прошить управляющий микроконтроллер. Для этих целей хорошо подходят друзья у которых остались компьютеры с LPT портом Простейший программатор на пяти проводках для AVR
Микроконтроллер можно прошивать с разъема программирования, соединив выводы Reset микроконтроллера (29 нога) и разъема. Прошивка существует для моделей Atmega48, Atmega8 и Atmega88. Желательно использовать один из двух последних камней, так как поддержка версии под Atmega48 прекращена и последняя версия прошивки датируется 2009 годом. А версии под 8-й и 88-й камни постоянно обновляются, и автор вроде как планирует добавить в функционал внутрисхемный отладчик. Прошивку берем на странице немца. Для заливки управляющей программы в микроконтроллер я использовал программу PonyProg. При программировании необходимо завести кристалл на работу от внешнего источника тактирования на 12 МГц. Скрин программы с настройками fuse перемычек в PonyProg:
После прошивки должен загореться светодиод подключенный к 23 ноге микроконтроллера. Это будет верный признак того, что программатор прошит удачно и готов к работе.
Установка драйвера
Установка велась на машину с системой Windows 7 и никаких проблем не возникло. При первом подключении к компьютеру выйдет сообщение об обнаружении нового устройства, с предложением установки драйвера. Выбираем установку из указанного места:
Выбираем папку где лежат дрова и жмем Далее
Мигом появится окно с предупреждением о том, что устанавливаемый драйвер не имеет цифровой подписи у мелкомягких:
Забиваем на предупреждение и продолжаем установку, после небольшой паузы появится окно, сообщающее об успешном окончании операции установки драйвера
Все, теперь программатор готов к работе.
Khazama AVR Programmer
Для работы c программатором я выбрал прошивальщик Khazama AVR Programmer. Замечательная программка, с минималистичным интерфейсом.
Она работает со всеми ходовыми микроконтроллерами AVR, позволяет прошивать flash и eeprom, смотреть содержимое памяти, стирать чип, а также менять конфигурацию фьюз-битов. В общем, вполне стандартный набор. Настройка фьюзов осуществляется выбором источника тактирования из выпадающего списка, таким образом, вероятность залочить кристалл по ошибке резко снижается. Фьюзы можно менять и расстановкой галок в нижнем поле, при этом нельзя расставить галки на несуществующую конфигурацию, и это тоже большой плюс в плане безопасности.
Запись фьюзов в память мк, как можно догадаться, осуществляется при нажатии кнопки Write All. Кнопка Save сохраняет текущую конфигурацию, а Load возвращает сохраненную. Правда я так и не смог придумать практического применения этих кнопок. Кнопка Default предназначена для записи стандартной конфигурации фьюзов, такой, с какой микроконтроллеры идут с завода (обычно это 1МГц от внутреннего RC).
В общем, за все время пользования этим программатором, он показал себя с наилучшей стороны в плане стабильности и скорости работы. Он без проблем заработал как на древнем стационарном пк так и на новом ноутбуке.
Скачать файл печатной платы в SprintLayout можно по этой ссылке
Ну вроде все, если возникнут вопросы, постараюсь ответить.
Программатор Khazama AVR Programmer достаточно популярен среди любителей радиоэлектроники. Однако, среди начинающих пользователей, которые только знакомятся с 8-битными микроконтроллерами AVR, имеются и те, кто слабо владеет английским языком (ведь интерфейс программы доступен только на английском и русскоязычного перевода в сети Интернет не найти, сама программа последний раз была обновлена аж в июле 2011 года и возможности установки сторонних переводов не поддерживает).
Как быть?
Альтернатива Khazama AVR Programmer на русском языке
Самый простой выход — найти альтернативное решение, то есть программатор на русском языке с тем же функционалом. Это такой софт как:
1.AVRDUDE_PROG (можно найти версию с интерфейсом преимущественно на русском языке);
2.PonyProg (свободное ПО, распространяется бесплатно, можно найти русифицированную версию);
3.Atmel Studio (для русификации потребуется установить Visual Studio);
4.И т.д.
Перевод Khazama AVR Programmer на русский
Если альтернативный софт вас не устраивает по ряду параметров, можно использовать Khazama AVR на английском, но с русскими подсказками по основным меню. А подсказки с переводом мы дадим ниже.
Скачать саму утилиту можно с оф.сайта — http://khazama.com/project/programmer/ (доступны 2 версии — v1.7 и v1.6.2, последняя предполагает поддержку ATMega88 и ATMega8).
Первый пункт меню “File” (Файл) выглядит следующим образом:
Раздел «AVR» — здесь можно найти поддерживаемы серии программируемых микроконтроллеров.
Пункт «Load FLASH file to Buffer» переводится как «Загрузить файл прошивки типа Flash в буфер». Позволяет подготовить прошиваемый файл и загрузить его в оперативную память ПК для быстрого чтения при последующей записи.
Пункт «Load EEPROM file to Buffer» отвечает за аналогичную операцию, но для памяти типа EEPROM.
Пункт «Save FLASH Buffer as…» позволяет сохранить ранее считанные данные памяти Flash в буфер, как отдельный файл на жестком диске (сохранение производится без каких-либо расширений, поэтому, если работаете со специфичным софтом, можно добавить расширение самостоятельно, например, .hex).
Пункт «Save EEPROM Buffer as…» — аналогичная операция, но для данных, считанных с памяти EEPROM.
Exit – выход.
Второй пункт View (на русск. «Просмотр», «Обзор») имеет следующие вложенные меню.
«View Flash Hex Data» – открывает шестнадцатеричный редактор данных Flash.
«View EEPROM Hex Data» — открывает шестнадцатеричный редактор данных EEPROM.
Третий раздел Command (русск. «Команды») выглядит так.
Fuses and Lock Bits… — «Фьюзы (флаги настроек микроконтроллера) и блокирующие биты».
Открывает окно управления битами настроек и блокировок.
Read Osc Calibrations – считать данные генератора частоты.
Read Chip Signature – считать подпись микросхемы (сверка целостности).
Write Flash Buffer to Chip – записать данные для Flash памяти из буфера в микроконтроллер.
Write EEPROM Buffer to Chip – аналогично для EEPROM памяти.
Read Flash to Buffer – считать данные микроконтроллера в буфер. Текущая прошивка чипа считывается в буфер (операция нужна, например, для создания резервной копии заводской прошивки или предыдущей работоспособной).
Read EEPROM to Buffer – аналогично для EEPROM.
Verify Flash – проверить Flash (верификация).
Verify EEPROM – проверить EEPROM.
Erase Chip – стереть данные микроконтроллера.
Auto Program – автоматическая программа (выполняются сценарии, определенные в пункте ниже).
Program Options – опции программы (имеется ввиду автопрограмма).
Ну и последний пункт «Help» («Помощь») предназначен для проверки обновлений программы, уточнения версии ПО и перехода на официальный сайт.
Часть из перечисленных команд для удобства вынесена пиктограммами ниже основного меню, при наведении отображаются выполняемые действия (смотри перевод выше).
Автор: RadioRadar