Схема первая
С помощью этого программатора можно прошивать практически любой AVR-контроллер от ATMEL, надо только свериться с распиновкой микросхемы.
СОМ-разъем на схеме — это «мама».
На всякий случай привожу разводку печатной платы для атмеги8 (), хотя такую примитивную схему проще нарисовать от руки. Плату перед печатью нужно отзеркалить.
Файл печатной платы открывать с помощью популярной программы Sprint Layout (если она у вас еще не установлена, то качайте 5-ую версию или лучше сразу 6-ую).
Как понятно из схемы, для сборки программатора потребуется ничтожно малое количество деталек:
Вместо КТ315 я воткнул SMD-транзистор BFR93A, которые у меня остались после сборки микромощных радиомикрофонов.
А вот весь программатор в сборе:
Питание (+5В) я решил брать с USB-порта.
Если у вас новый микроконтроллер (и до этого никто не пытался его прошивать), то кварц с сопутствующими конденсаторами можно не ставить. Работа без кварцевого резонатора возможна благодаря тому, что камень с завода идет с битом на встроенный генератор и схема, соответственно, тактуется от него.
Если же ваша микросхема б/у-шная, то без внешнего кварца она может и не запуститься. Тогда лучше ставьте кварц на 4 МГц, а конденсаторы лучше на 33 пФ.
Как видите, я кварц с конденсаторами не ставил, но на всякий случай предусмотрел под них места на плате.
Заливать прошивку лучше всего с помощью программы PonyProg ().
Прошивка с помощью PonyProg
Заходим в меню Setup -> Calibration -> Yes. Должно появиться окошко «Calibration OK».
Далее Setup -> Interface Setup. Выбираем «SI Prog API» и нужный порт, внизу нажимаем «Probe», должно появиться окно «Test OK». Далее выбираем микроконтроллер «Device -> AVR micro ATmega8».
Теперь втыкаем микроконтроллер в панельку программатора, и подаем питание 5 вольт (можно, например, от отдельного источника питания или порта ЮСБ). Затем жмем Command -> Read All.
После чтения появляется окно «Read successful». Если все ок, то выбираем файл с нужной прошивкой для заливки: File -> Open Device File. Жмем «Открыть».
Теперь жмем Command -> Security and Configuration Bits и выставляем фьюзы, какие нужно.
Тщательно все проверяем и жмем «OK». Далее нажимаем Command -> Write All -> Yes. Идет прошивка и проверка. По окончании проверки появляется окно «Write Successful».
Вот и все, МК прошит и готов к использованию!
Имейте в виду, что при прошивке с помощью других программ (не PonyProg) биты могут быть инверсными! Тогда их надо выставлять с точностью до наоборот. Определить это можно, считав фьюзы и посмотрев на галку «SPIEN».
Строительство USBasp программатора
Существует много версий печатной платы данного программатора, некоторые можно найти на официальном сайте USBasp. Однако, была сделана своя на основе выше представленной схемы.
К сожалению, из-за применения DIP переключателей, рисунок платы стал немного сложнее, что привело к применению 2 коротких перемычек, с целью чтобы печатная плата была по-прежнему односторонней.
Ниже результат печатной платы:
Как видно на рисунке, в программаторе не применялись SMD элементы. Пустое пространство на плате „залито” полем массы, главным образом для того, чтобы не вытравливать большое количество меди, а также снизить влияние помех на программатор.
Список элементов используемых в USBasp программаторе:
- R1: 10к
- R2: 180
- R3: 100
- R5, R6: 68
- R7: 2к2
- C1, C2: 22п
- C3: 10мк
- C4: 100н
- LED1: Красный светодиод на 20мА
- LED2: Зеленый светодиод на 20мА
- D2, D3: стабилитроны на 3,6В
- X1: Разъем USB, тип B
- SV1: Гнездо под разъем IDC-10
- Q1: Кварц 12МГц, корпус HC49-S
- SW1: Dip переключатель трехпозиционный
- IC1: Atmega8 (ПРИМЕЧАНИЕ: Не следует использовать микроконтроллер Atmega8 — PU из-за его ограничение максимальной тактовой частотой до 8 МГц!)
Перенос рисунка печатной платы USBasp программатора на стеклотекстолит выполнен с помощью метода ЛУТ (лазерно-утюжной технологии). Как это делать описывать не будем, поскольку данной информации в сети много.
Вкратце скажем, что сначала рисунок в масштабе 1:1 печатается на глянцевой бумаге, затем он накладывается на очищенную и обезжиренную медную сторону стеклотекстолита и фиксируется с помощью бумажного скотча. Далее бумажная сторона тщательно разглаживается утюгом на 3-ке. После все это дело вымачивается в воде и аккуратно очищается от бумаги.
Следующий этап – вытравливание платы в растворе хлорного железа. Во время травления желательно поддерживать температуру раствора не ниже 40 C, поэтому банку с раствором погружаем в горячую воду:
После завершения процесса травления необходимо удалить тонер ацетоном.
Остается теперь только просверлить отверстия. После завершения процесса изготовления платы можно приступать к пайке элементов USBasp программатора, начиная с перемычек.
Готовые к печати (в формате PDF) рисунок печатной платы находится в конце статьи. Вы также можете найти несколько вариантов на официальном сайте проекта.
ISP программатор
USBasp
Дешёвые ISP программаторы также есть в ассортименте у китайцев, рекомендую брать USBasp как самый распространенный. Поискать на алиэкспресс, мне нравится версия в корпусе. USBasp имеет не очень удобный выход 10-пин на шлейфе, поэтому рекомендуется купить также переходник 10-пин на 6-пин, который позволяет сразу подключаться к ISP header’у, который есть на большинстве плат Arduino
Внимание! Очень часто встречается брак в виде непропая контактов, поэтому во избежание проблем рекомендуется пропаять переходник и отмыть флюс (зубная щётка + бензин калоша)
Быстрый старт:
- Подключить usbasp к компьютеру
- Скачать и установить драйвера на usbasp (скачать с моего сайта, скачать с Яндекс диска, ещё есть тут и тут)
- Открыть диспетчер устройств и убедиться, что программатор определился системой
- Открыть Arduino IDE
- Выбрать usbasp в Инструменты > Программатор
Решение проблем
Решение большинства проблем с загрузкой через программатор (независимо от того, что написано в логе ошибки):
- Вытащить и обратно вставить usbasp в usb порт
- Вставить в другой usb порт
- Переустановить драйвер на usbasp
- Проверить качество соединения USBasp с МК
- Перепаять переходник и отмыть флюс
Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):
USBasp: на плате есть перемычка JP3, которая включает режим низкой скорости загрузки. В новых версиях прошивки для USBasp скорость выбирается автоматически, но китайцы продают старую версию. Как прошить новую – ищите в интернете.
Основные ошибки в логе Arduino IDE
Причина – компьютер не видит USB ASP
- Проверить и сменить USB порт
- Попытаться переустановить драйвер
- Проверить пайку USB разъема на плате программатора
- Проверить наличие и целостность элементов вблизи usb разъема программатора, кварцевый резонатор
- Возможно программатор криво прошит – при возможности попытаться перепрошить
- Возможно микроконтроллер на плате программатора – брак или же мертв, попытаться заменить и прошить
Причина – usbasp не видит подключаемый микроконтроллер
- Проверить правильность и целостность соединения с МК
- Попытаться снизить частоту прошивки, джампером или же указав более низкую скорость в среде программирования
- Проверить пайку разъема 10 pin и переходника 10 pin – 6 pin
- Возможно прошиваемый микроконтроллер попался с браком, или же мертв.
Arduino as ISP
Почти любая другая плата Arduino может стать ISP программатором, для этого нужно просто загрузить в неё скетч ArduinoISP:
- Открыть скетч Файл > Примеры > 11. ArduinoISP > ArduinoISP
- Всё! Ваша Arduino теперь стала ISP программатором
- Подключаем к ней другую Arduino или голый чип по схеме ниже
- Выбираем Arduino as ISP в Инструменты > Программатор
- И можем писать загрузчики, фьюзы или загружать прошивку напрямую во Flash
ISP программатор подключается к четырем пинам микроконтроллера, не считая питания: один из пинов передает сброс, остальные – для передачи данных. Чтобы плата-программатор не сбрасывалась при загрузке, на неё нужно:
- Либо поставить поставить конденсатор ёмкостью ~10 мкФ между RST и GND (рекомендуется)
- Либо просто закоротить пины RST и 5V проводом
По использованию других плат Arduino в качестве программатора читай на официальном сайте.
Решение проблем
Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):
Arduino ISP: нужно изменить частоту загрузки прошивки в скетче Arduino ISP и снова прошить его в ардуино-программатор (см. строку в скетче 45 и ниже);
Как программировать
Собственно это самый главный раздел этой статьи, без которого эта схема потеряла бы всю свою актуальность, так как не зная расположения перемычек и места расположения микроконтроллера в zif панели, невозможно запрограммировать нужный контроллер. Это в лучшем случае, а в худшем, можно банально спалить микроконтролер.
Еще хотел сделать акцент на порядок смены положения перемычек и расположения микроконтроллера в zif панели. Сначала usbasp программатор нужно отключить от USB порта, затем выставить перемычки для нужного микроконтроллера AVR, затем установить его согласно схемы (фото ниже) и только после этого подключать к USB порту.
Если менять положение перемычек и МК на «горячую», то возможно спалить микросхему, если что то случайно перепутали.
Прошивка через usbasp
Далее на фото показаны варианты расположения перемычек и установка определенного типа микроконтроллера в zif панель. На фото представлены два варианта для каждого типа микроконтроллеров, внешнее тактирование (с кварцем) и без внешнего тактирования (без кварца). Выбирайте любой удобный и необходимый в конкретном случае вариант.
Основные параметры AVR
Обладая широким модельным рядом, продукция компании ATMEL способна послужить многим целям, особенно если правильно подобрать технические свойства будущего контроллера
Для прошивки любого чипа важно, чтобы программатор был способен корректно считать его содержимое перед заливкой нового firmware, а значит, они должны быть полностью совместимы. Типовые микросхемы семейства имеют такие параметры:
- объём флеш-памяти — от 4 до 32 килобайт;
- оперативная память — от 512 байт до 2 килобайт;
- размер прошивки в модуле EEPROM — от 256 до 1024 байт;
- напряжение питания — от 1,8 до 5,5 вольт.
Любая микросхема может быть впаяна на плату двумя разными способами:
- сквозным, когда ножки запаиваются с обратной стороны;
- планарным — с ножками-выводами, находящимися на той же площадке, что и корпус.
Для работы с такими деталями применяются разные устройства. В первом случае достаточно паяльника, а во втором придётся добавить термовоздушный фен. Количество и назначение ножек у микросхемы обусловлено её назначением
Крайне важно на подготовленной к её монтажу плате расположить все дорожки правильно и в соответствии со схемой, так как неправильное заземление или выход на питание могут вывести из строя всю конструкцию после первого же включения. Геометрическая форма — самый последний фактор в выборе детали, он подбирается уже тогда, когда дорожки разведены, вытравлены и готовы к монтажу
Условия, в которых может работать такая микросхема, довольно разнообразны, что идёт на пользу её многозадачности. Температуры, при которых она гарантированно будет функционировать, лежат в промежутке от 55 градусов мороза до 125 тепла. Хранить же её можно при более широком диапазоне. Кристалл микросхемы термоустойчив, поэтому в правильно собранной плате не будет перегреваться выше паспортных данных.
Полезные страницы
- Набор GyverKIT – большой стартовый набор Arduino моей разработки, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
- Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
- Полная документация по языку Ардуино, все встроенные функции и макросы, все доступные типы данных
- Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
- Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
- Поддержать автора за работу над уроками
- – сообщить об ошибке в уроке или предложить дополнение по тексту ()
Прошиваем AVR при помощи AVRISP mkii из Arduino
Но прошивать AVR можно не только при помощи AVRDUDESS, но и напрямую из Arduino. В старых версиях Arduino IDE все было немного сложнее, для AVRISP требовался специальный драйвер, не идущий вместе с Atmel Studio, а свой собственный, нужно было вносить изменения в конфигурационные файлы Arduino IDE, но сейчас все стало намного проще.
AVRISP от SeedStudio
По факту в железе я использую AVRISP 2.0 STK500 от SeedStudio. Программатор подключается по USB и работает в системе с драйвером USB-Serial CH340. Для работы с этим драйвером и программатором напрямую из-под Arduino IDE необходимо:
- Выбрать в качестве платы нашу ATmega328P on a Breadboard.
- Выбрать правильный COM-порт, на котором обосновался программатор.
- Выбрать Atmel STK500 Development board в качестве программатора.
Затем в меню Sketch используем пункт Upload using Programmer. Скетч компилируется в бинарный код, а затем загружается через AVRDUDE и программатор в микроконтроллер. При помощи AVRISP можно только загрузить прошивку, никакого общения через последовательный порт (Serial.println) при помощи ISP не будет. Все работает только в одну сторону.
Если у вас возникли проблемы при закачке прошивки через ISP-программатор из-под Arduino IDE, то можно ознакомиться с оригинальной темой на Arduino.cc посвященной как раз решению подобного. И еще раз повторюсь по поводу разницы между Atmel AVR Development board и AVRISP mkii. Первое это плата, позволяющая заниматься разработкой на основе микроконтроллеров семейства AVR. А AVRISP это часть этой платы, интегрированный программатор, который, может существовать и в виде отдельного, более дешевого, устройства
Соответственно сейчас имеет смысл обращаться внимание на Atmel Development board версии 2 и выше, а также программатор AVRISP mkii. Хотя с другой стороны, сама Atmel уже не продается AVRISP mkii и вместо него рекомендует приобретать Atmel-ICE, позволяющий не только прошивать микросхемы, но и отлаживать код прямо в чипе
Простейший программатор для ATmega8
А сейчас небольшая фотосессия. Но сначала разводка USB: Забыл сказать, что сначала не надо запрограммировать RSTDSBL, а запрограммировать CKSEL3, CKSEL2, CKSEL1 подключить к ПК, если компьютер нашел неизвестное устройство — это еще ничего не значит, должен установиться драйвер. После того можно запрограммировать RSTDSBL, так как количество ног у микроконтроллера ограничено, кстати можно использовать ATtiny45 или ATtiny85, главное чтобы было 20su в смд или 20pu в дип — например АTtіny45 20su в магазине не было ATtiny45, зато был ATtiny85 20su. Его запрограммировал так же как и ATtiny 45 и фюзы одинаковы, они отличаются только память flech. Фюзы которые нужно запрограммировать CKSEL3, CKSEL2, CKSEL1, BODLEVEL0 (детектор пониженного напряжения на 1,8 В), RSTDSBL. Можно использовать любой разъем — там micro USB и тому подобное, я не мудрил, а взял штекер USB, снял шкуру, подпилил, припаял и получилось нечто такое, которое смахивает на обычную флешку
Подрезаем канцелярским ножиком, но осторожно, не порежетесь — лезвие очень острое. Вытаскиваем пластмасску с контактами, тоже очень осторожно. Возьмем и подпилим, чтобы был доступ жала паяльника до контактов USB, вверху уже лежит протравленная плата для USB программатора
Её травил в перекиси водорода + лимонная кислота. Он травит быстро. Лудил плату. Сплавом Розе я еще не разжился, поэтому лужу жалом паяльника, для лужения бросил камушек в растворитель канифоли, помешал, камень растворился, набрал в шприц (пропорции не помню), покрыл плату и лудится очень удобно. Припаиваем нашу пластмассу, только не путайте при пайке контакты, а то как я будете перепаивать, внизу на фото неправильно. Далее припаиваем резисторы и МК, здесь увидел ошибку и перепаял USB, соединение разрез должен быть на одной стороне с контроллером. Другую сторону — стабилитроны должны быть не больше чем 500 мА. Припаиваем шлейф кабель, желательно чтобы шлейф был экранированный, у меня кабель с кардридера использовал, брал провода которые экранированные — два оранжевых и экран = фольгу бросил на массу, фото без корпуса, надо сначала проверить на работоспособность, программа тора подключена ATtiny2313A зашилась скоро, я прошиваю на частоте 250 кГц, а фюзы на 2 кГц — так надежнее
Возьмем и подпилим, чтобы был доступ жала паяльника до контактов USB, вверху уже лежит протравленная плата для USB программатора. Её травил в перекиси водорода + лимонная кислота. Он травит быстро. Лудил плату. Сплавом Розе я еще не разжился, поэтому лужу жалом паяльника, для лужения бросил камушек в растворитель канифоли, помешал, камень растворился, набрал в шприц (пропорции не помню), покрыл плату и лудится очень удобно. Припаиваем нашу пластмассу, только не путайте при пайке контакты, а то как я будете перепаивать, внизу на фото неправильно. Далее припаиваем резисторы и МК, здесь увидел ошибку и перепаял USB, соединение разрез должен быть на одной стороне с контроллером. Другую сторону — стабилитроны должны быть не больше чем 500 мА. Припаиваем шлейф кабель, желательно чтобы шлейф был экранированный, у меня кабель с кардридера использовал, брал провода которые экранированные — два оранжевых и экран = фольгу бросил на массу, фото без корпуса, надо сначала проверить на работоспособность, программа тора подключена ATtiny2313A зашилась скоро, я прошиваю на частоте 250 кГц, а фюзы на 2 кГц — так надежнее.
Программа для USBAsp V2.0
Программу разработал «Боднар Сергей», работает не только с китайским программатором USBAsp v.2.0, но и другими программаторами. Первым делом скачиваем программу, разархивируем и запускаем «AVRDUDEPROG.exe».
В качестве примера, прошью китайскую плату Arduino UNO R3 в которой установлен микросхема ATmega328P. В программе, жмем на вкладку «Микроконтроллеры» и выбираем ATmega328P.
Далее, необходимо выбрать прошивку, в строке «Flash» нажимаем «. . .», переходим в папку «C:\Program Files\Arduino\hardware\arduino\avr\bootloaders\atmega» и выбираем «ATmegaBOOT_168_atmega328.hex», жмем «Открыть»
Подключаем программатор к плате «Arduino UNO R3», и нажимаем кнопку «Программирование».
В конце, выйдет диалоговое окно, о удачном окончании программировании.
Ссылки Скачать драйвер для программатора USBASP v2.0 (LC Technology, ATMEL) Скачать программу AVRDUDE_PROG v.3.3
Купить на Aliexpress Программатор USBASP v2.0 (LC Technology, ATMEL) Адаптер для ATMEL AVRISP, USBASP, STK500 (10 pin на 6 pin)
Купить в Самаре и области Программатор USBASP v2.0 (LC Technology, ATMEL) Адаптер для ATMEL AVRISP, USBASP, STK500 (10 pin на 6 pin)
Устройство программатора USBasp
Программатор состоит из небольшого числа деталей. Мозгом программатора является микроконтроллер Atmega8, который имеет всего 8 кб флеш памяти и 1 кб ОЗУ(SRAM).Вроде и слабенький микроконтроллер по современным меркам, но столько всего можно на нем сделать.Из-за особенностей работы программного USB м/к работает на частоте 12мгц. Соответственно, при написании своей прошивки необходимо учитывать это.
USBasp имеет 10 контактный разъем, на который выведены 6 выводов микроконтроллера: PB5 (SCK), PB4 (MISO), PB3 (MOSI, PWM), PB2(PWM), PD0 (RXD), PD1 (TXD).
Плата имеет два встроенных светодиода на выводах PC0 и PC1.Выводы м/к PB0,PB1 и PD2 используются для программного USB,PC2 выведен на перемычку JP3.Остальные выводы микроконтроллера не распаяны.
схема USBasp2.0
распиновка разъема USBasp
Загрузка прошивки
В этом уроке мы рассмотрим загрузку прошивки в ардуино через внешние “программаторы”. Давайте вспомним, о чем уже говорили в одном из первых уроков: загрузка прошивки в Arduino возможна двумя способами:
- “Напрямую” во flash память микроконтроллера при помощи ISP (In System Programming) внутрисистемного программатора.
- При помощи загрузчика (bootloader), который живёт в начале flash памяти МК, принимает программный код по протоколу TTL (UART) и записывает его во flash память.
Загрузчик (bootloader)
Загрузчик живёт в самом начале Flash памяти МК и позволяет записывать прошивку, отправляемую через UART. Загрузчик стартует при подаче питания на МК, ждёт некоторое время (вдруг кто-то начнёт слать код прошивки по UART), затем передаёт управление основной программе. И так происходит каждый каждый раз при старте МК.
- Загрузчик позволяет прошивать МК через UART;
- Загрузчик замедляет запуск МК, т.к. при каждом запуске ждёт некоторое время для потенциальной загрузки прошивки;
- Загрузчик занимает место во Flash памяти. Стандартный старый для Arduino NANO занимает около 2 кБ, что весьма существенно!
Список комплектующих
Обозначение | Номинал | Количество |
---|---|---|
IC1 | ATMEGA8-P | 1 |
U1 | LM358 | 1 |
Q1 | IRF540N | 1 |
R4 | 120 кОм | 1 |
R6, R3 | 1 кОм | 2 |
R5, R1 | 10 кОм | 2 |
C3, C4, C7 | 100 нФ | 3 |
Y1 | 16 МГц | 1 |
C1, C2 | 22 пФ | 2 |
R2 | 100 Ом | 1 |
U2 | LM7805 | 1 |
C5, C6 | 100 мкФ (можно и меньше) | 2 |
R7, R8, R9, R10, R11, R12, R13, R14 | 150 Ом | 8 |
Это список компонентов, экспортированный из KiCad. Кроме того, вам понадобятся:
- клон паяльника Hakko, самого популярного в китайских онлайн магазинах (с термопарой, а не с термистором);
- источник питания 24 В, 2 А (я рекомендую использовать импульсный, но вы можете использовать трансформатор с выпрямительным мостом);
- потенциометр 10 кОм;
- электрическая штепсельная вилка авиационного типа с 5 контактами;
- электрический разъем, устанавливаемый на заднюю панель для подачи питания 220 В;
- печатная плата;
- выключатель питания;
- штырьковые разъемы 2,54 мм;
- много проводов;
- разъемы Dupont;
- корпус (я напечатал его на 3D принтере);
- один тройной семисегментный светодиодный индикатор;
- программатор AVR ISP (для этого вы можете использовать Arduino).
Конечно, вы можете легко заменить светодиодный индикатор LCD дисплеем или использовать кнопки, вместо потенциометра, ведь это ваша паяльная станция. Я изложил свой вариант дизайна, но вы можете по-своему.
Подключение программатора USBasp к Ардуино
USBasp позволяет программировать AVR микроконтроллеры через последовательный интерфейс SPI. Для этого он имеет 10-пиновый разъем SPI. И подключение программатора к Ардуино или отдельному микроконтроллеру сводится к соединению их линий SPI и Reset. В большинство плат Ардуино присутствует ICSP разъем, в котором сгруппированы выводы для внутрисхемного программирования: MOSI, MISO, SCK, RST, GND и VCC. Поэтому удобнее всего подключать программатор именно к ICSP. Здесь вам потребуется распиновка разъемов, она приведена ниже: Соедините соответствующие выводы программатора и Ардуино, должно получиться примерно так: Конечно, возиться каждый раз с проводами не очень удобно, поэтому советую приобрести переходник ISP 10 pin to 6 pin. С ним всё становится гораздо проще. Если же на плате Ардуино нет ICSP разъема, то остается подключать программатор к цифровым выводам в соответствии со следующей таблицей. В ней приведено расположение выводов MOSI, MISO и SCK для различных плат Ардуино.
Плата Ардуино | MOSI | MISO | SCK | Уровень |
---|---|---|---|---|
Uno, Duemilanove | 11 или ICSP-4 | 12 или ICSP-1 | 13 или ICSP-3 | 5В |
Nano | 11 или ICSP-4 | 12 или ICSP-1 | 13 или ICSP-3 | 5В |
Pro Mini | 11 | 12 | 13 | 3.3В или 5В |
Mega1280, Mega2560 | 51 или ICSP-4 | 50 или ICSP-1 | 52 или ICSP-3 | 5В |
Leonardo | ICSP-4 | ICSP-1 | ICSP-3 | 5В |
Due | ICSP-4 | ICSP-1 | ICSP-3 | 3.3В |
Zero | ICSP-4 | ICSP-1 | ICSP-3 | 3.3В |
101 | 11 или ICSP-4 | 12 или ICSP-1 | 13 или ICSP-3 | 3.3В |
Не забывайте о том, что некоторые платы требуют питания 3.3В и для них нужно менять положение джампера JP1 на программаторе.
Прошивка микроконтроллера
После того как мы установили драйвера, можно приступить к программированию микроконтроллера. Программировать будем при помощи программы AVRDUDEPROG. После запуска программы должно появиться такое окно, где нам нужно в списке выбрать нам микроконтроллер ATtiny2313.
Прошивка МК осуществляется при помощи файла с расширением HEX. Перед тем как заливать прошивку нам нужно очистить кристалл, от старой прошивки которая уже имеется в памяти МК. Для это жмем на кнопку «стереть все»
Далее нам нужно выбрать сам файл c расширением HEX.
выбираем наш файл «Lesson 1.hex»
После чего жмем кнопку «программировать»
Если мы все сделали правильно, то должно высветиться такое окно:
Есть еще один момент, после того как мы прошили МК, нам нужно установить FUSE бит CKDIV8, для этого переходим во вкладку Fuses.
CKDIV8 — fuse бит, который делит частоту кварцевого (или иного имеющегося) тактового генератора на 8. То есть при включенном этом бите и применении кварцевого резонатора на 8 МГц реальная тактовая частота МК составит 1 МГц.
Далее опять жмем кнопку «Программирование»
USB программатор своими руками на микроконтроллере Atmega8. Схема
С развитием компьютерной техники, с каждым разом становится все меньше и меньше компьютеров оснащенных COM и LPT портами. Это в свою очередь вызывает затруднения, в частности у радиолюбителей, связанные с сопряжением средств программирования микроконтроллеров с персональным компьютером.
В данной статье приведено описание USB программатора для микроконтроллеров AVR, который можно собрать своими руками. Построен он на микроконтроллере Atmega8 и способен работать от USB разъема компьютера. Данный программатор совместим с STK500 v2.
Описание USB программатора
USB программатор построен на плате, сделанной из одностороннего фольгированного стеклотекстолита по технологии ЛУТ. На плате есть 2 перемычки: одна расположена под разъёмом SPI, вторая перемычка расположена неподалеку от того же разъема.
После того как все детали будут запаяны нужно прошить микроконтроллер Atmega8 прошивкой приведенной в конце статьи. Фьюзы, которые необходимо выставить при программировании микроконтроллера Atmega8, должны выглядеть следующим образом:
- SUT1 = 0
- BOOTSZ1 = 0
- BOOTSZ0 = 0
- CKOPT = 0
- SPIEN = 0
Необходимо напомнить, что в некоторых программах фьюзы выставляются противоположно этому. Например, в программе CodeVisionAVR необходимо проставить галочки напротив вышеперечисленных фьюзов, а в программе PonyProg наоборот.
Программирование Atmega8 через LPT-порт компьютера
Самый быстрый и дешевый способ запрограммировать Atmega8 – применить LPT-программатор для AVR. Подобная схема приведена ниже.
Питание микроконтроллера осуществляется от простого стабилизатора напряжения 78L05. В качестве оболочки для программирования можно использовать программу UniProf.
При первом включении программы и при не подключенном контроллере, нажав кнопку «LPTpins», необходимо настроит выводы LPT-порта следующим образом:
В момент запуска UniProf, она автоматом определяет вид микроконтроллера. Загружаем в память UniProf прошивку Atmega8_USB_prog.hex, отклоняем подключение файла EEPROM.
Выставляем следующим образом фьюзы (для программы UniProF), нажав кнопку «FUSE»:
Для запоминания установок нажимаем все три кнопки «Write». Затем нажав на «Erase» предварительно очищаем память прошиваемого микроконтроллера. После этого уже жмем на «Prog» и дожидаемся завершения прошивки.
Настройка USB программатора
После того как наш микроконтроллер прошит, его необходимо установить в плату USB программатора. Далее подключаем программатор к USB порту компьютера, но пока питание не подаем.
Далее необходимо настроить программу терминал (HyperTerminal) которая находится по следующему пути: Пуск > Программы > Стандартные > Связь > HyperTerminal. Настраиваем порт, параметры терминала и ASCII
Настройка порта:
Настройка терминала:
Настройка ASCII:
Теперь после всех проделанных процедур, подаем питание на USB программатор. Светодиод HL1 должен промигать 6 раз и затем светится постоянно.
Для проверки связи USB программатора с компьютером 2 раза нажимаем клавишу «Enter» в программе HyperTerminal. Если все в порядке мы должны увидеть следующую картину:
Если это не так проверяем еще раз монтаж, особенно линию TxD.
Далее вводим версию программатора 2.10, так как без этого программатор не будет работать с программами «верхнего уровня». Для этого вводим «2» и нажимаем «Enter», вводим «а» (английская) и нажимаем «Enter».
USB программатор способен распознавать подключение программируемого микроконтроллера. Выполнено это в виде контроля «подтяжки» сигнала Reset к источнику питания. Этот режим включается и выключается следующим образом:
- «0», «Enter» — режим выключен.
- «1», «Enter» — режим включён.
Изменение скорости программирования ( 1МГц):
- «0», «Enter» – максимальная скорость.
- «1», «Enter» – сниженная скорость.
На этом подготовительная работа завершена, теперь можно попробовать прошить какой-нибудь микроконтроллер.
Скачать прошивку, печатную плату USB программатора и программу UniProf (829,4 KiB, скачано: 1 247)
Прошиваем AVR при помощи «черного» модуля на CH430 и с 6 выводами
Модуль USB2TTL с гордым наименованием CH340 скорее, так же, не название модуля, а название чипа, который и производит преобразование из USB в TTL и обратно. Сам чип изготавливается китайской компанией WCH. На сайте производителя можно ознакомиться со спецификацией на модуль (все на китайском) или же скачать драйвера (у меня на Win10 драйвера оказались уже в наличии, чип определяется как USB-SERIAL CH340 и занимает доступный COM-порт). Вообще, судя по спецификации, чипы CH340 многостаночники, они предназначены не только для связи USB и UART, но и для подключения IrDA (инфракрасный порт) и принтеров, работающих по последовательной шине.
Несмотря на то, что в спецификации на сам чип указано его несметное количество входов и выходов, но производитель модуля распаял только 2 из них для подключения к UART, а всего выводов со стороны UART 6. К списку выводов CP2102 добавился VCC с перемычкой, которая может быть установлена на замыкание VCC и V3 выходов, а может быть полностью удалена. Когда перемычка установлена, то используется питание 3.3В, когда же она снята, то все работает на 5В. Честно говоря, я так и не понял магическое действие перемычки между VCC и 3V. Питание на плату для прошивки я все равно подаю 5В и при этом положение перемычки на работоспособность никак не влияет.
«Черный модуль» на основе CH430.
Применение «черного» модуля точно такое же, как и «красного». Прошивать ATmega328 можно только при установленном загрузчике, да и то придется потренироваться в нажатии кнопки reset. В качестве источника питания модуль работает без нареканий, данные по последовательному порту пересылаются в обе стороны. Подключение осуществляется аналогично, с перехлестом TX/RX входов/выходов.
Выводы
Благодаря своей невыносимой популярности, прошить AVR от Atmel можно тысячью и одним способом. И приведенные выше «адаптеры», и программные продукты — лишь маленькая часть всего многообразия систем и средств по прошивке. В обзор не попал интересный ISP-программатор USBasp. Хотя его с успехом заменяет TinyISP. Однако, в последних ревизиях, от 2011 года в USBasp вроде бы как была задекламирована функция совмещения в одном устройстве и ISP-программатора, и Serial интерфейса. На некоторых картинках в сети даже попадаются подписи с выведенными Rx/Tx на десятипиновую колодку, но похоже, что кроме железной поддержки требуется еще и программная реализация. А так хотелось бы иметь в одной устройстве программатор вместе с последовательным интерфейсом. Хотя, некоторые производители, например, Pololu выпускают подобные устройства, да и программатор на FTDI-чипе не исключение, хотя его и не удалось запустить под Windows.
За время испытания, у меня не вышло разобраться с проблемой с не отпусканием «кнопки» сброса при программировании через загрузчик и USB2TTL адаптер. Причины сего так и остались покрытыми мраком. Приходилось вручную отключать пин DTR, и только после этого происходила загрузка в штатном режиме.
Прошиваем AVR при помощи FabISP мимикрирующего под USBTiny44/USBTiny85 с 6 выводами ISP
Модуль FabISP является детищем FabLab MIT (того самого, Массачусетского Технологического). По сути FabLab — мастерская при университетах, где студенты могут сваять что-то своими руками. Вот один из студентов и навяаял внутрисхемный программатор для AVR на основе USBTinyIPS. Ознакомиться с его творчеством, равно как и скачать драйвера под программатор можно на страничке отчета студента по проделанной работе. Страничка уже находится в архиве, поэтому не ясно как долго она просуществует. Но FabISP используется в учебных курсах и видимо не скоро совсем уйдет с арены.
FabISP в исполнении китайских товарищей.
Интересная особенность. Через 6-ти пиновый кабель, который, кстати не поставляется вместе с модулем, FabISP может питать и микроконтроллер. В таком случае не требуется дополнительное питание, как у AVRISP mkii. Так же хочу заметить, что оригинальный FabISP требует предварительной прошивки и программатора, по типу того же AVRIPS. Но с Китая модули (GY ARDUINO ISP V2) приходят уже прошитыми, что существенно облегчает задачу.
Прошивка ATmega328P посредством AVRDUDESS через FabLAB USBTiny
Я не стал устанавливать драйвера со странички студента, а установил их от Lady Ada (изобретателя USBTiny). После установки драйверов программатор определился как Atmel USB Devices – USBtiny. Для того, чтобы программатором можно было пользоваться, необходимо распаять, если она у вас не распаяна, перемычку SJFAB (в некоторых нотациях это перемычка обзывается как SJ1). Перемычка используется для возможности программирования самого программатора. Более того на плате присутствует и вторая перемычка SJ2 (или же SJVCC). Она отвечает за подачу питания на микроконтроллер с программатора. Если ее распаять, то для микроконтроллера потребуется внешнее питание. Ознакомиться со схемой можно все с того же сайта MIT.
При прошивке через FabISP необходимо обратить внимание, что поскольку программатор использует порт USB, то в AVRDUDESS необходимо так же выбрать порт USB. Никакого моста на последовательные порты не создается
При прошивке в Arduino IDE в качестве программатора выбираем USBTiny. Порт выбирать не требуется. В среде отсутствует возможность выбрать USB, поэтому опция просто игнорируется, AVR находит программатор самостоятельно.
Соответственно, при помощи FabISP можно прошивать внутрисхемно, в том числе и загрузчик, как при помощи AVRDUDE, так и напрямую из Arduino IDE (порт можно не указывать, загружаем через меню Sketch – Upload Using Programmer или Burn bootloader, в качестве программатора выбираем USBtinyISP).