Самостоятельная сборка программатора AVRProg. Программатор USB ISP для AVR: Ещё один шаг в сторону от ардуинонизации Avr программаторы для win 7

Вайбер на компьютер 23.07.2020
Вайбер на компьютер

Khazama AVR Programmer - графическая оболочка консольной программы avrdude, разработана арабским программистом, поддерживаемая системами Windows XP/Vista/7. Программа предназначена для прошивки микроконтроллеров фирмы Atmel семейства AT90/ATtiny/ATmega/ATXmega.

Khazama может считывать и записывать программный код, очищать память и программировать FUSE-биты, так же есть функция автоматического программирования и настройка тактовой частоты программирования. Программа поддерживает работу с программатором .

Настройка и прошивка

Запускаем программу

Для настройки программы заходим в Command -> Program Options

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

1. Располагать окно программы поверх остальных окон
2. Загружать в буфер программы последний закрытый файл
3. Считать FLASH память микроконтроллера в буфер программы
4. Считать EEPROM память микроконтроллера в буфер программы
5. Очистить память микроконтроллера
6. Записать прошивку в FLASH память микроконтроллера
7. Записать прошивку в EEPROM память микроконтроллера
8. Сверить байты FLASH память микроконтроллера после записи
9. Сверить байты EEPROM память микроконтроллера после записи
10. Записать Fuse bits в микроконтроллер
11. Проверять правильность выбора модели микроконтроллера
12. Настройка тактовой частоты программирования

Выбираем микроконтроллер через выпадающий список

или через меню File -> AVR -> …


Загружаем файл прошивки в программу File -> Load FLASH file to Buffer , указываем файл и нажимаем Открыть

Программа обновлена до версии 08.06.2010.
Автор UniProf не покладая рук работает над улучшением своей программы, делая ее еще лучше. Версия программы от 08.06.2010 значительно лучше шьет микроконтроллеры. Наблюдаемые в предыдущей версии частые сбои при программировании без галочки «тормоз» остались в прошлом. Все остальное, что нам так нравиться в UniProf, осталось на месте.

Честно говоря, по началу, я решил использовать для прошивки микроконтроллеров программу AVRDUDE («дудка»). AVRDUDE мощная программа, заслуживающая уважения – умеющая работать с огромным количеством программаторов, с кучей настроек и довольно широко используемая для AVR микроконтроллеров. Программа не имеет своего «GUI» (работает с командной строки) и я собирался писать батники под каждую прошивку, чтобы в «один тык» прошивать контроллер. Но, немного поразмышляв, пришел к выводу:
— программа должна быть простой и доступной – чтобы с ней мог разобраться даже человек ни разу не работавший с микроконтроллерами (ну вот такой я идеалист:));
— была небольшой, портативной, со своим ГУИем, визуально отображала все этапы программирования, поддерживала микроконтроллеры используемые в блоге.
К сожалению, под эти требования AVRDUDE не подходит.
Зато подходит другая программа — UniProf-универсальный программатор для AVR . Программа имеет определенные недостатки, но они компенсируются простотой и доступностью. Кроме того, UniProf умеет работать с нашими LPT и COM программаторами. Поэтому я решил сделать общий пост-обзор программы UniProf, а позже отдельно опишу программирование через LPT и COM порт. Итак …

Автор программы Михаил Николаев. Программа имеет довольно продолжительную историю, но не может похвастаться частыми обновлениями. В то же время программа настолько проста и удобна, что не теряет своей актуальности и сейчас даже на фоне более продвинутых программ.

Начнем ознакомление.
вмещает в себя весь функционал программы. Вам не придется лазить по меню – все делается в «один тык». Программа имеет свою справку (нажимаем F1) в которой все подробно описано. Интерфейс UniProf интуитивно понятен, но давайте пройдемся по элементам окна.
Главным элементом является окошко PROGRAM. В нем (в ячейках таблицы) отображаются прочитанные или записываемые значения ячеек памяти контроллера. Если убрать галочку PROGRAM окошко скроется. Также есть галочка EEPROM для показа или скрытия окна EEPROM памяти контроллера (в большинстве случаев EEPROM нам не нужен – убираем галочку).

Верхний ряд кнопок (слева на право)

Записать содержимое окошек (прошивку) в контроллер. Предварительно нужно загрузить в окошки прошивку из файла. (при установленной галочке EEPROM – записывается также область EEPROM).

Проверка (верификация) памяти контроллера со значениями в окошках. Отличия обозначаются звездочками. (После записи верификация производится автоматически – поэтому проверять не нужно).

Проверка контроллера на чистоту . У «чистого» контроллера все ячейки памяти содержат 0xFF, что и проверяется.

Установка FUSE битов. Внимательно установите галочки как на картинке прилагаемой к каждой прошивке.
Важно! До прошивки FUSE битов обязательно установите галочку «тормоз» это уменьшит риск их неправильной записи.

Низкоуровневая команда. Лучше не трогайте.

Очистка (Erase) контроллера. Перед каждым программированием делайте очистку кристалла.

Первые три открывают файл прошивки соответствующего типа (я буду выкладывать HEX-прошивки) и заполняют окошки значениями с открытого файла. Следующие три сохраняют в файл выбранного типа значения из окошек.

«osccal» — чтение калибровочных байт контроллера. Нам не нужно.

F1-помощь – вызов встроенной справки.

Следующие две кнопки отладка в контроллере – нам не нужно.

LPT pins – очень полезная штука для тех, кто уже успел пальнуть некоторые линии LPT порта или использует программатор другой конструкции. Позволяет назначить любые линии порта взамен выгоревшим.

Чекбоксы под кнопками.

Ставим как на картинке . Первый показывает прочитанные или готовые для записи в контроллер байты. Второй для принудительной записи 0хFF в пустую ячейку. Третий — инвертирование линий COM порта (при использовании буферной микросхемы в программаторе). Синеньким будет светиться название подключенного контроллера. Далее — вкл/выкл окошка EEPROM. Красненьким показывается системная частота.
Важно! Если кликать по красному программа повторно засинхронизируется с контроллером. Нажимайте, на всякий случай, до начала программирования.

Другие элементы окна.

Этими галочками убираются лишние кнопки (чтоб не путались). Ставим как на картинке.

Очень важно! Нужный чекбокс. В старой версии программы были определенные проблемы с надежностью программирования без этого чекбокса. В новой версии программы эта проблема решена! Но если при записи или чтении происходят ошибки — программа сразу честно признается в этом. Если у Вас выдается – ставьте галочку «тормоз» и все запишется без проблем! Только медленней. При записи фьюзов «тормоз» обязателен! Не надо рисковать.

Можно указать какую область прожечь – ставим «Все!».

Выбор порта, с которым будем работать. Если незнаем куда тыкнули программатор – по очереди перебираем все, пока синеньким не высветится Ваш контроллер.

Еще есть «горячие клавиши».

F2 Установка задержки записи, нормально = 6. Если ошибки — попробуйте увеличить (? какого либо эффекта не наблюдается).

F3 Покажет список поддерживаемых контроллеров.

Gray -,+ Уменьшить-увеличить шрифт циферок в окошках Flash и EEPROM — это может быть полезно при изменении размеров окна.

Esc – отмена текущего действия.

Есть еще, но не очень нужные – читайте встроенный хелп.

UniРrof можно скачать здесь:
- Программатор для AVR. Смотрим avr.nikolaew.org

P.S. Все равно со временем заюзаем AVRDUDE — мощная вещь!

(Visited 48 833 times, 11 visits today)

На макетной плате metaboard очень удобно собрать ISP программатор для AVR микроконтроллеров AVRProg . Схема очень простая, исходный код программатора открыт и доступен для двух вариантов программатора - есть версия USBasp и версия AVR-Doper . Схема программатора собирается прямо на макетном поле платы metaboard. Прошивку (версию программатора) можно легко поменять через USB бутлоадер, прошитый в плате metaboard.

[Возможности программатора AVRProg ]

1. На программаторе имеются два сокета-кроватки для установки программируемых микроконтроллеров AVR в DIP-корпусах на 8, 20 и 28 ножек, включая популярные ATTiny25/45/85, ATTiny2313, ATMega8, ATMega48/88/168/328 (8-ножечные AVR вставляются в 20-пиновый сокет).

2. Для программируемых микроконтроллеров генерируется тактовая частота 1 МГц (для тех микроконтроллеров, фьюзы которых установлены в расчете на работу с внешней тактовой частотой или с внешним кварцевым резонатором).

3. Схема программатора очень проста и удобна для самостоятельной сборки в домашних условиях.

4. Для схемы этого программатора (AVRProg на макетной плате metaboard) портировано две версии firmware - USBasp и AVR-Doper . Ожидается в будущем также портирование AVRminiProg . Ссылки на закачку firmware см. в .

5. Отдельный 10-пиновый коннектор ISP с цоколевкой, совместимой со стандартной 10 pin ISP (стандартные цоколевки разъемов ISP можно посмотреть в ), предназначен для внутрисхемного программирования микроконтроллеров AVR (а также как порт отладочного вывода в варианте AVR-Doper, см. далее). На этот коннектор выведено напряжение питания 5 вольт для программируемой платы, которое можно подключить установкой перемычки JP5 (см. принципиальную схему программатора), тактовая частота 1 МГц и сигналы приема-передачи отладочного UART.

[Принципиальная схема программатора AVRProg ]

Чтобы максимально упростить схему (и, соответственно, облегчить самостоятельную сборку программатора), из неё исключены преобразователи уровней, которые в общем случае обычно устанавливают для согласования логических уровней программатора и программируемой по ISP схемы, так как напряжение питания схемы программатора может отличаться от напряжения питания программируемого устройства (см. вариант подключения таких преобразователей уровня в ). Это означает, что программатор AVRProg и программируемое через ISP коннектор SV1 устройство должны по возможности питаться от приблизительно одного и того же уровня напряжения (около 5 вольт). В схему добавлены резисторы R1..R7, последовательно включенные в цепь цифровых сигналов, которые несколько смягчают (но не устраняют полностью) проблему с разностью логических уровней. Эти резисторы ограничивают максимальный ток и предотвращают повреждение программируемого устройства и программатора, которые питаются от разных напряжений. Благодаря этим резисторам и наличию в AVR защитных диодов производится некоторое преобразование уровня сигналов 1MHZ , RESET , MOSI , MISO , SCK , RXD , TXD , так что должно быть возможным программирование по ISP устройств, запитанных напряжением 3.3 вольта.

Кроме того, имеется возможность дополнительной подачи питания +5 вольт на программируемое устройство. Подача питания активируется установкой перемычки JP5. Имейте в виду, что в схеме программатора AVRProg отсутствует защитное ограничение тока, подаваемого на программируемое устройство. Конечно, за исключением того случая, когда программатор сам питается от USB, и контроллер USB компьютера имеет такую защиту. Никогда не устанавливайте перемычку JP5, если программируемое по ISP устройство питается от собственного источника напряжения и если напряжение питания программируемого устройства (подключенного через ISP SV1) отличается от +5V!

В схеме программатора использовался 10 pin ISP "старого стиля" (кроме такой ISP цоколевки имеются также и более удобные 6 pin ISP коннекторы), так как на его ножки выведены дополнительные сигналы (которые в оригинальной 10 pin ISP цоколевке подключены на GND). Это три дополнительные сигнала, которые Вы можете использовать для своих нужд в программируемом устройстве, если необходимо:

X1MHZ - тактовая частота 1 МГц. Может использоваться для оживления "брикнутых" чипов, которые рассчитаны на работу с внутренним RC-генератором, но у которых по ошибке неправильно установлены фьюзы на использование внешнего кварца или тактового генератора. Без подачи внешней тактовой частоты или подключения кварца запрограммировать такие AVR невозможно, тут как раз и может пригодиться внешний тактовый сигнал 1 МГц.

XRXD - вход последовательного порта, который может принимать вывод отладочных данных от программируемого устройства. Такая возможность поддерживается в версии firmware AVR-Doper. Все, что передает через UART отлаживаемое устройство (аппаратный UART есть почти в любом микроконтроллере AVR), может быть отображено в окне терминала, подключенного на виртуальный USB COM-порт AVR-Doper. Эта возможность упрощает написание и отладку программного обеспечения в программируемом по ISP устройстве на микроконтроллере AVR. Чтобы задействовать такую возможность, нужно аппаратный выход TXD порта UART программируемого AVR подключить к сигналу XRXD (выв. 10 ISP-коннектора SV1), а также использовать в отлаживаемом firmware макросы отладочного вывода (в библиотеках WinAVR это макрос DBG , можно также использовать printf , перенаправленный на UART).

XTXD - выход последовательного порта, который может передавать произвольные данные пользователя к программируемому устройству. Такая возможность поддерживается в версии firmware AVR-Doper. Все, что печатается в окне терминала (подключенного на виртуальный USB COM-порт AVR-Doper), будет передано на вход UART отлаживаемого устройства (аппаратный UART есть почти в любом микроконтроллере AVR). Это используется реже, чем отладочный вывод по XRXD (через макрос DBG или оператор printf), однако такая возможность также упрощает написание и отладку программного обеспечения в программируемом по ISP устройстве. Например, можно подавать в отлаживаемое устройство текстовые команды прямо из окна терминала. Чтобы задействовать такую возможность, нужно аппаратный вход RXD порта UART программируемого AVR подключить к сигналу XTXD (выв. 8 ISP-коннектора SV1).

Напряжение питания на программируемые чипы AVR, устанавливаемые в сокеты-кроватки IC1 и IC2, подается от двух ножек микроконтроллера платы metaboard PC3 и PC4 (выводы 4 и 5 коннектора JP3). Порты PC3 и PC4 запрограммированы, как выходы, и их выходного тока достаточно для прямого питания установленного в сокет программируемого микроконтроллера (специально используются два порта, подключенные параллельно - для увеличения нагрузочной способности выхода). Если на PC3 и PC4 выдана лог. 1, то питание на программируемый микроконтроллер подано. Это состояние также индицирует свечение красного светодиода, подключенного к выводу 1 коннектора JP3 (управляется программно ножкой порта PC0). Если на PC3 и PC4 выдан лог. 0, то программируемый микроконтроллер обесточен (при этом светодиод погашен), и его можно свободно вынимать из сокета, не опасаясь какого-нибудь электрического повреждения.

[Сборка программатора ]

Чтобы можно было установить коннектор ISP SV1, нужно выпаять коннектор питания JP4 платы metaboard (если он был установлен). Никаких других особенностей сборка не имеет, просто соедините все провода, руководствуясь принципиальной схемой - примерно так, как показано на фотографии. Разноцветные провода применены просто для наглядности, чтобы было проще разобраться в разводке разных сигналов. Правильно собранная схема начинает работать сразу и не требует никакой отладки.

Многие компоненты на схеме AVRProg не обязательны для установки. Например, если Вам не нужны сокеты-кроватки и нужен только ISP, то сокеты IC1 и IC2 можете не устанавливать и не распаивать. Или, например, если Вам не нужна возможность ISP-программирования, то можете не устанавливать ISP-коннектор SV1, при этом также не нужны резисторы R1..R7 и перемычка JP5.

Далее описаны отличия в работе двух вариантов firmware программатора - USBasp и AVR-Doper. Оба варианта легко загружаются в память чипа с помощью USB-бутлоадера и программы Khazama AVR Programmer (см. ), поэтому у Вас всегда есть возможность легко перепрошить любую нужную версию программатора. Для активизации бутлоадера должна быть установлена перемычка JP6 Upload, и при подключенной по USB к компьютеру плате metaboard нужно нажать кнопку S1 Reset (перемычка JP6 и кнопка S1 установлены изначально на плате metaboard). После этой нехитрой процедуры на компьютере появится USB-устройство USBasp (если нет драйвера, то система Windows запросит его. Драйвер возьмите из пакета по ссылке ). USB-устройство бутлоадера USBasp (USB бутлоадер эмулирует программатор USBasp) может принимать команды от оболочки программатора Khazama AVR Programmer. С помощью программы Khazama AVR Programmer в память чипа metaboard можно записать любой из двух вариантов firmware программатора - USBasp и AVR-Doper (описание работы с этим firmware см. далее). Варианты готовых прошивок firmware (и USBasp, и AVR-Doper) доступны по ссылке .

[USBasp ]

Скачайте по ссылке пакет архива и возьмите из него бинарник (HEX-файл) с соответствующим именем файла. В имени файла указан тип прошивки (USBasp или AVR-Doper), тип используемого в metaboard микроконтроллера (одинаково подходят как ATmega168PA, так и ATmega328P) и тактовая частота кварца (обычно используется кварц на 16 МГц, но возможны также частоты 12 , 15 , 16.5 , 20 МГц). Прошейте бинарник в память чипа с помощью USB-бутлоадера платы metaboard и программы Khazama AVR Programmer (выберите в ней чип платы metaboard и). Не обращайте внимания на предупреждения о невозможности поменять тактовую частоту ISP - USB бутлоадер максимально упрощен и не поддерживает обработку команды установки частоты ISP (для бутлоадера это не нужно).

После того, как firmware USBasp записано в память чипа платы metaboard, переподключите по USB плату metaboard с собранным программатором, и программатор USBasp готов к работе. Для работы с программатором AVRProg в варианте USBasp может использоваться та же самая программа Khazama AVR Programmer (версии не ниже 1.7.0) или утилита командной строки avrdude .

Вариант USBasp мне понравился меньше, чем вариант AVR-Doper, так как в этом firmware есть недоработки, связанные с отсутствием поддержки смены тактовой частоты ISP (оболочка Khazama AVR Programmer выдает сообщения об ошибке, но программатор все же работает). Кроме того, для некоторых чипов не поддерживаются фьюзы (fuses), как, например, для чипа ATmega328P. Несколько лучше обстоит дело с avrdude, но работа с этой утилитой не очень удобна, как как это все-таки утилита командной строки, а не GUI. Однако для пакетной работы (когда нужно автоматизировать потоковое программирование большого количества устройств) утилита avrdude может оказаться самым лучшим выбором. Для работы с avrdude выбирайте протокол usbasp.

[AVR-Doper ]

Прошивается firmware варианта AVR-Doper точно так же, как описан процесс для USBasp, просто из архива нужно взять другой файл прошивки (в имени которого упоминается AVR-Doper). Этот вариант, на мой взгляд, заслуживает большего уважения, так как представляет поддержку протокола STK500 компании Atmel (этот протокол стал стандартом de-facto, благодаря популярности платформы AVR и инструментальных средств для него). Протокол STK500 поддерживается AVR Studio , поэтому вариант AVR-Doper будет отлично работать совместно с оболочкой программатора AVRprog среды программирования AVR Studio. Это очень удобно для пользователей AVR Studio и открывает широкие возможности для программирования чипа (нет проблем с поддержкой фьюзов на некоторых AVR, как в случае с Khazama + USBasp). Для работы с avrdude выбирайте протокол STK500.

При работе в среде AVR Studio запустите утилиту программатора AVRprog и в начальном диалоге выберите вариант программатора STK500. Внимание: утилита AVRprog предложит перезалить firmware программатора, откажитесь от этого, нажав кнопку "Нет". В остальном работа с утилитой программатора не имеет особенностей и не заслуживает отдельного описания. См. также обзор работы с AVRprog AVRStudio по ссылке .

[Как устанавливать программируемые микросхемы в сокеты ]

Программирование DIP8 Программирование DIP20 Программирование DIP28

ATtiny25/45/85 ATtiny2313A-PU ATmega8, ATmega48/88/168/328

[Компиляция исходного кода USBasp и AVR-Doper ]

Поскольку доступен исходный код firmware программатора AVRProg metaboard (для версий USBasp и AVR-Doper), его можно доработать для своих нужд, перекомпилировать и перепрошить с помощью бутловадера в память чипа metaboard. В частности, в версии USBasp можно добавить поддержку команд смены тактовой частоты ISP.

В исходном коде USBasp и AVR-Doper есть одинаковая ошибка, которая связана с неправильным управлением портом индикационного светодиода LED1 (выбор порта не соответствует принципиальной схеме). В исходном коде, который Вы можете скачать по ссылке , эта ошибка исправлена.

Компиляция осуществляется просто, одинаково для версий USBasp и AVR-Doper. Для компиляции у Вас должен быть установлен пакет WinAVR. Распакуйте исходный код firmware в отдельную папку. Перейдите в корневой каталог проекта, где находится файл makefile , и выполните в командной строке друг за другом две команды: make clean и make metaboard . После этого в корневом каталоге проекта появится файл main.hex , который является двоичным файлом прошивки firmware программатора. Именно его нужно залить с помощью USB бутлоадера в память чипа платы metaboard.

Макетная плата metaboard может использоваться с микроконтроллерами ATmega168PA и ATmega328P. И для ATmega168PA, и для ATmega328P подходит прошивка программатора, скомпилированная для ATmega168PA. Имейте в виду, что прошивка, скомпилилированная для ATmega328P, не работает (почему - пока не разобрался). Если у Вас используется в metaboard кварцевый резонатор не на 16 МГц, а на другую частоту (12, 15, 16.5 или 20 МГц), перед компиляцией отредактируйте в makefile макроопределение F_CPU .

1 . Оригинальный исходный код firmware программатора USBasp, портированного на metaboard AVRProg (внимание: этот код содержит ошибки, используйте лучше исходный код по ссылке ). См. Download в конце статьи (закачивайте avrprog-metaboard-1.1.zip или более свежую версию).
2 . Оригинальный исходный код firmware программатора AVR-Doper, портированного на metaboard AVRProg (внимание: этот код содержит ошибки, используйте лучше исходный код по ссылке ).
3 . .
4 . Цоколевки коннекторов ISP .
5 . Программа Khazama AVR Programmer и драйвер USB для USBasp (операционная система Windows) . Для работы с USBasp-версией программатора AVRProg устанавливайте Khazama версии 1.7.0 или более свежую!
6 .

В моём случае это абсолютный рекордсмен по скорости доставки - около 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 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 - это включенный предделитель частоты, который делит эти 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


После заполнения полей нажать «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. Заводские фьюзы, выставленные китайцами, выглядят так (обязательно поставить точку «инверсные» - выделил синим прямоугольником ):

Это нужно снять две галки с «BODEN» и «SUT1» (выделено красным овалом),
поставить две галки на «CKOPT» и «SUT0» (выделено зелёным прямоугольником),
справа в колонке при этом будут отображаться HEX-значения изменённых битов (выделено жирным красным прямоугольником): Lock Byte: 3F , Fuse High Byte: C9 , Fuse Low Byte: EF .

Если всё сходится, можно нажимать «программирование»

ВНИМАНИЕ. Злой фьюз-бит RSTDISBL - не трогать ни в коем случае, иначе его установка заблокирует контроллер и прошить потом через USBASP его уже будет нельзя.
_____________________________________

Выводы

Опробовано, работает. Если khazam не планируется использовать, то в обновлении прошивки для программатора - смысла нет, благо и так прекрасно работает, причём в случае с ATtiny13 никаких правок и перемычек вносить не требуется. Последняя прошивка - почему-то оказалась более капризна в этом плане. Единственное, после получения, плату надо пропаять и отмыть.

Список ссылок

Как театр начинается с вешалки, так программирование микроконтроллеров начинается с выбора хорошего программатора. Так как начинаю осваивать микроконтроллеры фирмы 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 можно по



Рекомендуем почитать

Наверх