Программатор avrisp mkii своими руками
9zip.ru Радиотехника, электроника и схемы своими руками Программатор AVRISP mkII для ATXmega на микроконтроллере AT90USB162
Ранее мы уже писали о популярных программаторов для микроконтроллеров AVR. Это, прежде всего, универсальный программатор для AVR и PIC, подключаемый к COM-порту. Он прекрасно работает, но компьютеры с последовательным портом сейчас уже не очень распространены. Другой популярный программатор — это USBasp (он же USBisp). Он уже может работать на любом компьютере, так как подключается к USB порту. И всем бы он был хорош, если бы умел ещё программировать микроконтроллеры ATXmega, имеющие интерфейс PDI. Именно для последних и предлагается к самостоятельной сборке рассматриваемый здесь программатор AVRISP mkII (он же AVRISP MK2). Он умеет всё то же, что и USBasp, но дополнительно работает и с ATXmega.
Клонов этого программатора много. Основой их является микроконтроллер AT90USB162. Он уже достаточно старенький, но его всё ещё можно найти на Aliexpress. Кстати, там же можно найти и готовый программатор, если не хочется паять. Некоторые клоны устроены очень просто — микроконтроллер и минимальный обвес. Их использование требует внимательности, потому что выходы микроконтроллера ничем не защищены.
Существует и более продуманный вариант — с 245 буфером, предложенный пользователем Grott на радиокоте, к которому развёл печатную плату Gordon Shumway:
Пользователь sio предложил свою доработку этой платы, заведя линию PTd напрямую от микроконтроллера, минуя буфер. По его словам, так эта линия работает более стабильно:
Авторская прошивка программатора от Grott:
Схема данного клона программатора несложная:
нажми для увеличения
Буфер, расположенный между микроконтроллером AT90USB162 и контактной колодкой программатора защищает выходы. Кнопки HWB и RESET предназначены для программирования AT90USB162 через USB без использования стороннего программатора. Хотя это можно делать и любым программатором, например — USBasp, подцепившись к одноимённым выводам микроконтроллера (на схеме они помечены зелёным цветом). Последнее может понадобиться, если попался микроконтроллер без бутлоадера. Говорят, что такое бывает. При этом AT90USB162 не будет видеться компьютером при подключении к USB.
Джампер на плате позволяет выбрать напряжение питания для программируемой микросхемы. Для ATXmega оно должно быть равным 3,3 вольт. Хотя говорят, что успешно программировали и на 5 вольтах, но необдуманно рисковать не следует.
Колодка для подключения шлейфа программирования совместима с USBasp, поэтому можно пользоваться проводом от него.
Для заливки прошивки AVRISP mkII в AT90USB162 через USB следует:
- скачать программу Flip
- подключить программатор к USB порту
- установить драйверы из каталога программы C:\Program Files\Atmel\Flip 3.4.7\usb
- нажать RST
- нажать HWB
- отпустить RST
- отпустить HWB
- в программе Flip нажать на кнопку с изображением шнура USB и нажать Open
- загрузить прошивку и нажать Run
С данным программатором должна работать avrdude, но нам так и не удалось их подружить, как бы мы ни колдовали с драйверами и фильтрами. Поэтому самым простым вариантом оказалась установка AVR Studio 4.9, взятая с сайта разработчика:
Вместе с ней идут все необходимые драйверы. Для работы с программатором в avr studio необходимо:
- нажать на кнопку connect на панели инструментов
- выбрать устройство AVRISP mkii, интерфейс USB и нажать кнопку connect
- появится окно программирования, на вкладке main следует указать тип программируемого микроконтроллера
- дальнейшая работа ведётся в соответствующих вкладках
В архиве at90usb162_avrisp_mkii.zip находятся:
at90usb162-bl-usb-1_0_5.hex — бутлоадер для AT90USB162 версии 1.0.5 (на всякий случай)
grott_v3_tssop_original.lay6 — оригинальный вариант печатной платы от Gordon Shumway (1)
grott_v3_tssop_mod.lay6 — модифицированная плата, она стала немного шире из-за более наглядного расположения надписей назначения контактов колодки для программирования (2)
grott_v3_tssop_stable.lay6 — доработка оригинальной платы пользователем sio, касаемо линии PTd (3)
AVRISPMKII-grott-LUFA170418-8MHz.hex — прошивка AVRISP mkII для кварцевого резонатора на 8 МГц
AVRISPMKII-grott-LUFA170418-16MHz.hex — прошивка для резонатора на 16 МГц
Понравилась статья? Менделеев говорит: поделись с друзьями! | Хочешь почитать ещё про схемы своими руками? Вот что наиболее популярно на этой неделе: Дальше в разделе радиотехника, электроника и схемы своими руками: Миниатюрный дозиметр на микроконтроллере, схема простого и компактного дозиметра на микроконтроллере attiny85 с oled дисплеем. | |
Главная 9zip.ru База знаний радиолюбителя Контакты |
Девять кучек хлама:
Дайджест
радиосхем
Новые схемы интернета — в одном месте!
Новые видео:
Источник
AVRISP mkII «новый клон»
Повторил программатор AVRISP mkII «новый клон» (с сайта радиокотов), схему DoоMmen, немного модифицированную kspiritos. Данный вариант мне показался наиболее удобным для повторения, так как имеет все необходимые файлы, и более чем подробное описание, наилучшим образом подходит под имеющиеся в хозяйстве детали, как мне показалось — имеет наиболее удобные органы управления (к примеру — смена прошивки осуществляется по нажатию двух кнопок).
Печатная плата в исполнении kspiritos, а также полный комплект файлов проекта — в самом низу следующей страницы:
Проект схемы от kspiritos
В целом, вариантов исполнения печатных плат данного программатора существует великое множество.
Основные, на сайте радиокотов, следующие:
1) От danko
2) От DooMmen
3) От kspiritos
4) От grott
В принципе схемы должны быть идентичны, но как показала практика, мелочами они отличаются. В моем случае — при заливке в программатор kspiritos прошивки от danko — программатор определяется и работает, но светодиоды ведут себя неадекватно.
Также есть популярный вариант исполнения от Medved:
Сайт проекта от Medved
Данный вариант мне очень нравится простотой и наличием буфера 74HC244, но есть одно большое «но» — не выведены PDI и TDI, то есть шить xmega не получится.
Процесс изготовления моего программатора выглядит следующим образом:
Готовое устройство:
Паял детали типоразмера 0805, вместо 1206, так как по мощности здесь должно быть достаточно 0805, а давным-давно были куплены наборы 0805 резисторов и конденсаторов, так что немного не удобно, но использую именно данные наборы, чего добру пропадать 🙂
Такая же история со светодиодами, были куплены что-то около 100шт белых светодиодов, которые теперь использую по мере необходимости.
Единственное отступление от номиналов — конденсаторы С1 и С2 вместо 18pF поставил 22pF.
Программатор запустился сразу, в Windows7 x64 определился как AT90USB162, автоматически подтянул драйвер.
Далее запустил программу FLIP:
FLIP
— выбрал AT90USB162 (Device->Select);
— открыл usb порт (Settings->Communication->USB);
— открыл прошивку (File->Load HEX File. );
— нажал Run (отмечены Erase, Program, Verify).
Чип AT90USB162 прошился очень быстро и удачно.
Можно нажать Start Applocation (Reset), а можно отключить и подключить USB шнурок, после чего включается иллюминация — в моем случае 3 белых светодиода 🙂 и один красный моргает и тухнет (индикация занятости/проблем с USB).
Программатор также требует драйвер, и здесь необходимо установить именно драйвер от AVR Studio, я себе установил программу версии 5.1, и с ней идет драйвер Jungo. С другим драйвером, скачаным из интернет (avrispmkii_libusb-win32_1.2.1.0) Студия не работает — программатор определяет, но не может прочитать подключенную к нему мегу8а.
В итоге, после установки правильного драйвера, в системе появляется устройство AVRISP mkII, с которым отлично работает AVR Studio.
Пока пробовал прошивать только ATMega8A.
Всем спасибо за внимание, а пользователю evsi — огромная благодарность за подаренные AT90USB162!
Пережатый в ZIP проект приложен.
Схема и печатная плата выглядят следующим образом:
Источник
Программатор avrisp mkii своими руками
Программатор AVRISP-MKII от компании Atmel — весьма серьезное устройство, которое может прошивать (только прошивать, внутрисхемную отладку он делать не умеет) большой список микроконтроллеров по протоколам ISP, PDI и TPI.
Вот этот список, взятый с сайта Atmel:
Atmel AVR 8- and 32-bit Automotive
ATmega164P, ATmega169P, ATmega324P, ATmega328P, ATmega644P, ATtiny24, ATtiny25, ATtiny44, ATtiny45, ATtiny84, ATtiny85
Atmel AVR 8- and 32-bit — AVR XMEGA
ATxmega128A1, ATxmega128A3, ATxmega128A4, ATxmega128D3, ATxmega128D4, ATxmega16A4, ATxmega16D4, ATxmega192A1, ATxmega192A3, ATxmega192D3, ATxmega256A1, ATxmega256A3, ATxmega256A3B, ATxmega256D3, ATxmega32A4, ATxmega32D4, ATxmega384A1, ATxmega64A1, ATxmega64A3, ATxmega64A4, ATxmega64D3, ATxmega64D4
Atmel AVR 8- and 32-bit — megaAVR
AT90PWM1, AT90PWM2, AT90PWM216, AT90PWM2B, AT90PWM3, AT90PWM316, AT90PWM3B, AT90PWM81, ATmega128, ATmega1280, ATmega1281, ATmega128A, ATmega16, ATmega162, ATmega164A, ATmega164P, ATmega164PA, ATmega165, ATmega165P, ATmega165PA, ATmega168, ATmega168A, ATmega168P, ATmega168PA, ATmega169, ATmega169A, ATmega169P, ATmega169PA, ATmega16A, ATmega2560, ATmega2561, ATmega32, ATmega324A, ATmega324P, ATmega324PA, ATmega325, ATmega3250, ATmega3250A, ATmega3250P, ATmega325A, ATmega325P, ATmega325PA, ATmega328, ATmega328P, ATmega329, ATmega3290, ATmega3290A, ATmega3290P, ATmega329A, ATmega329P, ATmega329PA, ATmega32A, ATmega48, ATmega48A, ATmega48P, ATmega48PA, ATmega64, ATmega640, ATmega644, ATmega644A, ATmega644P, ATmega644PA, ATmega645, ATmega6450, ATmega6450A, ATmega6450P, ATmega645A, ATmega645P, ATmega649, ATmega6490, ATmega6490A, ATmega6490P, ATmega649A, ATmega649P, ATmega64A, ATmega8, ATmega8515, ATmega8535, ATmega88, ATmega88A, ATmega88P, ATmega88PA, ATmega8A
Atmel AVR 8- and 32-bit — tinyAVR
ATtiny12, ATtiny13, ATtiny13A, ATtiny15L, ATtiny20, ATtiny2313, ATtiny2313A, ATtiny24, ATtiny24A, ATtiny25, ATtiny26, ATtiny40, ATtiny4313, ATtiny43U, ATtiny44, ATtiny44A, ATtiny45, ATtiny48, ATtiny84, ATtiny84A, ATtiny85
MCU Wireless — Bundles
ATmega1280R212, ATmega1280R231, ATmega1281R212, ATmega1281R231, ATmega1284PR231, ATmega1284RZAP, ATmega128RZAV, ATmega128RZBV, ATmega2560R212, ATmega2560R231, ATmega2561R212, ATmega2561R231, ATmega256RZAV, ATmega256RZBV, ATmega644PR231, ATmega644R212, ATmega64RZAPV, ATmega64RZAV
Сделано довольно много попыток клонировать устройство, самые лучшие из клонов пожалуй USBTiny Mkii и USBTiny-MkII SLIM programmer (см. [2] и врезки ниже).
Недавно собрал себе еще один клон программатора AVRISP-mkII, программатор mkII-slim [2]. Программатор заработал сразу, ничего плохого сказать про него не могу. На борту у него стабилизатор напряжения на 3.3V, и транслятор уровней, так что можно без проблем шить чипы на напряжении 3.3V и 5V (уровни выставляются перемычкой). Прошивка в него заливается штатно, через Flip, все как обычно.
Примечание. ИМХО не надо было городить транслятор уровней, достаточно было бы поставить токоограничительные резисторы, однако автор программатора решил подойти к разработке основательно.
Программатор замечательно работает под Windows, как родной, в среде AVR Studio 4.19. В среде Linux (и под Windows тоже) можно пользоваться утилитой AVRDUDE. Особенно порадовали нарядные светодиодики LED1 и LED2, которые хитро перемигиваются при подключении к компьютеру (и причем по-разному, в зависимости от того, какой драйвер установлен), и при обмене данными (когда прошивается чип).
RefDes | Номинал | # | Описание |
C1, C2 | 33 пФ | 2 | Эти конденсаторы (SMD 0805) нужны для стабильного запуска кварцевого генератора. Схема часто нормально работает и без них. |
C3 | 1 мкФ | 1 | Фильтрующий керамический конденсатор (SMD 1206). |
C4 | 10 мкФ | 1 | Танталовый конденсатор (SMD типоразмер A). |
C5, C6, C7 | 0.1 мкФ | 3 | Фильтрующий керамический конденсатор (SMD 0805). |
HWB, RST | 2 | Штырьки для перемычек. Их запаивать не обязательно (эти перемычки нужны для запуска USB-загрузчика DFU, если понадобится обновить прошивку программатора). | |
IC1 | AT90USB162-AU | 1 | Микроконтроллер Atmel (корпус TQFP32). |
IC2 | GTL2003 | 1 | Микросхема согласования уровней (корпус TSSOP20). |
IC3 | ZLDO1117 | 1 | Low-dropout стабилизатор напряжения (корпус SOT223). |
JP2 | 1 | Перемычка для переключения напряжения интерфейса программирования (3.3V или 5V). | |
LED1 | зеленый | 1 | Светодиод SMD 0805. Когда этот светодиод горит, то это означает, что программатор прошел энумерацию в операционной системе (т. е. система опознала программатор как устройство USB). Если при этом постоянно горит светодиод LED2, то необходима установка драйвера. (1) |
LED2 | красный | 1 | Светодиод SMD 0805. При включении питания (подключение шнуром USB программатора к компьютеру), если установлен драйвер, этот светодиод мигает несколько раз, и потом гаснет. При передаче данных (когда программатор обменивается данными с программируемым чипом) этот светодиод мигает. (2) |
Q1 | 16 МГц | 1 | Кварцевый резонатор. |
R1, R6 | 1 кОм | 2 | Резистор SMD 0805. |
R2, R3 | 470 Ом | 2 | Резистор SMD 0805. |
R4, R5 | 27 Ом | 2 | Резистор SMD 0805. |
R8, R9 | 47 Ом | 2 | Резистор SMD 0805. |
R10 | 100 кОм | 1 | Резистор SMD 0805. |
X1 | miniUSB | 1 | Коннектор miniUSB type B female. |
X2, X3, X4 | 3 | Коннекторы для подключения к программируемым микросхемам (интерфейсы ISP, TPI, PDI). | |
F1 | PTC FUSE 500 mA | 1 | Самовосстанавливающийся предохранитель (так называемый polyfuse, polyswitch, resettable fuse) на 0.5A в корпусе SMD 1812. |
Примечания (1), (2). Поведение светодиодов зависит от прошивки программатора, и от того какой установлен драйвер. Подробнее см. документацию по ссылкам [2] и документацию к исходным кодам программатора.
Вы можете заказать пустую плату для этого программатора за 100 рублей, или набор основных деталей которые бывает трудно найти за 500 рублей (печатная плата, AT90USB162, GTL2003, LM1117, коннектор miniUSB, кварц 16 МГц).
mkII-slim, пустая плата 100 рублей | mkII slim, набор основных деталей 500 рублей |
Печатная плата программатора интересна тем, что с обратной стороны платы на контактные площадки выведены свободные порты GPIO микроконтроллера. Таким образом, плату можно использовать не только как программатор, а еще и как макетную плату для отладки своих радиолюбительских конструкций.
Исходный код, готовые прошивки, документация: 150411mkii_slim.zip. Советую брать прошивку версии 130303 (файл AVRISP-MKII_130303_toggle_driver.hex). Здесь исправлены некоторые баги, а также предусмотрено быстрое переключение между USB-драйвером Jungo (который под Windows в составе AVR Studio) и LibUSB (через который под Windows работает AVRDUDE). Двойное мигание светодиодами при сбросе покажет, что работает драйвер Jungo, а если было четыре вспышки, то активен драйвер LibUSB. Также в этой прошивке реализовано запоминание последнего типа драйвера, и запоминание последней выбранной скорости ISP.
Примечание. В любом случае для корректной работы программатора требуется установка драйвера. Драйвер Jungo для этого программатора оболочка программатора (утилита для программирования AVRprog) есть в составе AVR Studio 4.19 (драйвер ищите в папке c:\Program Files\Atmel\AVR Tools\usb\).
При необходимости можно сменить / обновить прошивку программатора в любой момент прямо через USB. Для этого служат перемычки RESET и HWB (сначала надо замкнуть HWB, потом замкнуть на короткое время RESET, после чего запустится загрузчик DFU и можно пользоваться штатной утилитой программирования FLIP от Atmel).
Исходники USBTiny Mkii доступны свободно в составе проектов библиотеки LUFA (см. [3], папка Projects\AVRISP-MKII\).
[AVRISP-MKII, интерфейс ISP]
Сначала попытался смакетировать и опробовать работу программатора в режиме ISP. Из комплектующих применил макетную плату AVR-USB162MU (см. [4]) и плату для макетирования без пайки ProsKit. В качестве подопытного микроконтроллера выступал ATtiny2313A. Для упрощения схемы буфер между программируемым микроконтроллером ATtiny2313A и макетной платой AVR-USB162MU решил не ставить, чип ATtiny2313A запитал прямо от макетной платы через интерфейс USB. На ножке C6 макетной платы присутствует выходной сигнал частоты 4 МГц, который можно использовать как такты для «брикнутых» чипов, у которых ошибочно установлены перемычки fuses (в моем макете этот сигнал не используется и никуда не подключен). Вот вид собранного простого макета:
Исходники взял из библиотеки LUFA (см. [3], папка Projects\AVRISP-MKII\), опции даже менять почти не пришлось, нужно было только добавить программные драйверы для платы (в LUFA\Drivers\Board\ создал папку MICROSIN162MU как копию уже имеющейся папки MICROSIN162, поправил файл LEDs.h в этой папке, и отредактировал файл LUFA\Common\BoardTypes.h — добавил туда по аналогии описание для новой платы). Make clean, make all в папке Projects\AVRISP-MKII\, и готовый файл прошивки AVRISP-MKII.hex у меня на руках. Прошил его с помощью утилиты Flip в память чипа AT90USB162MU макетной платы AVR-USB162MU.
Таблица соединений с чипом ATtiny2313A, корпус PDIP20
ATtiny2313A | сигнал | AVR-USB162MU |
PB5, выв. 17 | MOSI | B2 |
PB6, выв. 18 | MISO | B3 |
PB7, выв. 19 | SCK | B1 |
PA2, выв. 1 | RST | B4 |
GND, выв. 10 | GND | GND |
VCC, выв. 20 | VCC | VCC |
не используется | 4MHz | C6 |
Назначение сигналов в таблице (центральная колонка):
MOSI — Master Output Slave Input. Выход программирующего микроконтроллера, мастера шины SPI (в нашем случае это чип AT90USB162MU), вход программируемого чипа (в нашем случае это ATtiny2313A). Шина для последовательной передачи данных в программируемый чип (через протокол ISP передача команд, данных для записи в память или во фьюзы).
MISO — Master Input Slave Output. Вход программирующего микроконтроллера, мастера шины SPI (в нашем случае это чип AT90USB162MU), выход программируемого чипа (в нашем случае это ATtiny2313A). Шина для последовательной передачи данных из программируемого чипа (через протокол ISP получение его состояния, содержимого памяти и фьюзов).
SCK — Synchro ClocK. Выход программирующего микроконтроллера, мастера шины SPI (в нашем случае это чип AT90USB162MU), вход программируемого чипа (в нашем случае это ATtiny2313A). Шина для тактирования данных на сигналах MOSI и MISO.
RST — ReSeT. Выход программирующего микроконтроллера (в нашем случае это чип AT90USB162MU), вход программируемого чипа (в нашем случае это ATtiny2313A). Шина для перевода программируемого чипа в состояние, когда он будет отвечать на команды протокола ISP.
GND — GrouND. Земля, общий провод, он же минус питания.
VCC — напряжение питания для программируемого чипа. В нашем примере как программатор (чип AT90USB162MU), так и программируемый чип (ATtiny2313A) питаются от шины USB напряжением +5 вольт. Это допустимо в том случае, если программируемое устройство не потребляет ток более 450 мА (так как ограничение одного порта USB на отдаваемый ток 500 мА). Перемычкой SJ1 можно переключить питание программируемого чипа с 5 вольт на 3.3 вольта, но в этом случае допустимый ток потребления программируемым чипом уменьшится до 100 мА, так как это ограничение внутреннего стабилизатора напряжения AT90USB162MU. Перемычка JP1 подает питание на программируемое устройство, её необходимо установить, когда программируемое устройство запитывается от программатора, и снять, если программируемое устройство питается от собственного источника питания.
4MHz — тактовая частота для подачи на программируемый микроконтроллер, если такая частота вдруг нужна. В нашем случае это не используется, так как в программируемом микроконтроллере ATtiny2313A в настоящий момент фьюзы настроены на использование внутреннего тактового генератора.
В левой колонке перечислены наименование ножек и номера выводов чипа ATtiny2313A (корпус PDIP20), а в правой колонке — наименование ножек макетной платы AVR-USB162MU (см. [4]).
Если делать программатор AVRISP-MKII в режиме ISP на макетной плате AVR-USB162MU, то схема получается безумно простой (полная схема программатора AVRISP-MKII с интерфейсом ISP, если её собирать не на макетной плате AVR-USB162MU, будет посложнее).
Попробовал подключить новоиспеченный программатор AVRISP-MKII к компьютеру. Операционная система Windows XP радостно нашла новое устройство LUFA AVRISP MkII Clone и автоматически установила драйвер к нему. Драйвер будет присутствовать в системе и установится сам, если ранее Вы установили на компьютер AVR Studio. Драйвер (информационный файл avrispmkii.inf) при установке AVRStudio автоматически копируется в папку %windir%\inf.
Среда AVR Studio радушно приняла программатор как родной. По кнопке с иконкой микросхемы AVR можно запустить утилиту программатора. В диалоге настройки подключения (появляется при первом запуске, или при отсутствии подключения к последнему настроенному программатору) нужно указать тип программатора IAVRISP mkII, и тип подключения USB. Далее запустится окно всем известной оболочки управления программатором.
При тестировании нашел и исправил неприятный баг, связанный с зависанием программатора, после чего он «отваливался» от системы и становился недоступным (до нового переподключения USB). Зависание устройства происходило из-за зацикливания в процедуре SPI.h -> SPI_TransferByte (цикл while (!(SPSR & (1 SPI_Init ошибочно настроен как ВХОД С НАГРУЗОЧНЫМ РЕЗИСТОРОМ (pull-up). Этот порт PB0 (сигнал
SS порта SPI, который может использоваться для выборки аппаратуры, работающей по шине SPI) не был никуда подключен и не использовался ни в аппаратуре, ни в программе AVRISP-MKII. Из-за того, что сигнал
SS не успевал нарасти до уровня лог. 1 (из-за емкости монтажа?) в момент начала передачи функцией SPI_TransferByte, узел SPI ошибочно детектировал «захват» шины SPI другим мастером (которого конечно же нет). Баг носит случайный характер, и иногда не проявляется (из-за шума на цепях питания и в линии
SS). Чтобы полностью устранить баг, нужно либо повесить ножку
SS на + питания через pull-up резистор (порт PB0 микроконтроллера AT90USB162MU для нашего случая), либо настроить сигнал
SS порта SPI как ВЫХОД (с любым логическим состоянием, 0 или 1). Вот что я рекомендую исправить в подпрограммах SPI_Init и SPI_ShutDown:
Источник