ISP программатор из Arduino. Разберемся и с ATtiny. Миниатюрный USB программатор для AVR микроконтроллеров

Viber OUT 29.04.2019
Viber OUT

Микроконтроллер относится к программируемому типу микросхем, на основе которого можно собрать схему какого либо автоматического устройства. Такое устройство может представлять собой простейшую схему с мигающим светодиодом, или автомат, выполняющий сложные вычисления и управляющий другими устройствами. Основной элемент в обоих случаях может быть одним и тем же микроконтроллером, разница будет состоять лишь в записанной в него программе.
Доступность микроконтроллеров и простота составления своих собственных программ для них, делает микроконтроллеры очень заманчивым для сборки разнообразнейших схем. Раньше, для изменения функций устройства, построенного на обычных логических микросхемах, требовалось изменять саму схему, выпаивать и впаивать детали, а теперь конструкцию на микроконтроллере обычно достаточно лишь перепрограммировать. Отчасти как раз из-за этой простоты изменения функций, микроконтроллеры быстро вытеснили устройства, построенных на множестве логических элементах.
Программы для микроконтроллеров могут быть написанны на различных языках программирования с использованием специальных компьютерных программ. Написанная и преобразованная (откомпилированная) программа переносится в микроконтроллер с помощью программатора.
Программатором называют электронное устройство, к которому подключается микроконтроллер, а так же программатор - это компьютерная программа, управляющая процессом переноса подготовленной программы из компьютера в микроконтроллер.
Конструкцию с микроконтроллером, в который прошивается прошивка, называют целевой конструкцией или целевой схемой.

Определить, какое именно значение слов "программатор" или "прошивка" употребляется, можно обычно из контекста. Далее мы убедимся, что это не так сложно.

Большинство программ-программаторов могут быть настроены для работы с разными схемами программаторов-адаптеров. Программатор-адаптер подключается к компьютеру через какой либо порт ввода-вывода. В настоящее время существуют три наиболее распространённых возможности подключения программатора к компьютеру по какому либо порту:

В течении последних лет параллельный порт принтера LPT и последовательный COM-порт были вытеснены USB-портом. Тем не менее всё ещё имеются в продаже отдельные платы расширения для LPT- и/или COM-порта. Такие карты ("мультипортовки") можно дополнительно установить в уже имеюшийся компьютер, но дополнить ноутбук COM- или LPT-портом нельзя или крайне сложно.


Рис. 1. USB-COM адаптер.

Вместе с тем практически на всех современных компьютерах и ноутбуках имеется хотя бы один USB-порт, а так же распространены недорогие адаптеры USB-COM, которые позволяют создавать на компьютере с USB-портом недостающий COM-порт.

Часто схемы программаторов для USB-порта достаточно сложны для повторения начинающими электронщиками, и нередко содержат микроконтроллер, который тоже необходимо сначала каким то образом прошить, можно посоветовать несложную схему программатора, подключаемого к компьютеру на COM-порт или на USB через адаптер USB-COM. Через существующие адаптеры USB-LPT прошить микроконтроллер не удасться, так как эти адаптеры "эмулируют" не LPT порт, а лишь управляют работой с принтером.
Нужно предупредить, что программа в микроконтроллер через USB-COM-адаптер загружается в десятки раз до льше, чем через "нормальный" COM-порт и с этим придётся мириться.

Пожалуй, большинство начинающих выбирает восьмибитные AVR-микроконтроллеры RISC архитектуры фирмы ATMEL из-за их гибкости, хорошо описанных примеров применения и невысокой цены. Эти микроконтроллеры, как и множество других, могут быть запрограммированны через ISP-интерфейс.

ISP-интерфейс состоит из пяти проводников: MOSI, MISO, SCK, RESET и GND. Подключение ISP-программатора позволяет программировать микроконтроллеры, (в большинстве случаев) не извлекая сам микроконтроллер из схемы.

Среди радиолюбителей распространнено много схем-программаторов для последовательного COM-порта. Многие из них собраны на нескольких транзисторах и стабилитронах , и даже на нескольких резисторах . Достоинством таких схем является их простота, но они имеют и важный недостаток. Дело в том, что стандат RS-232 допускает отклонения уровней напряжения на выводах COM-порта, причём эти отклонения у разных производителей компьютеров могут сильно меняться, всё же оставаясь при этом в разрешённых пределах. Поэтому такая простая схема, работающая на одном компьютере, может работать с перебоями на другом или не работать совсем. Очень неудобно и то, что программатор, собранный по простейшей схеме, необходимо каждый раз подключать и отключать от целевой конструкции на время сеанса прошивки.

Вышеперечисленных недостатков лишина схема на Рис. 2. Это программатор для последовательного COM-порта всего на двух распространённых микросхемах: микросхемы RS232 -драйвера MAX232 (или аналога) и логической микросхемы 74LS240 (отечественный аналог К555АП3).
Микросхема MAX232 представляет собой широкораспространённый четырёхканальный драйвер (преобразователь уровня) интерфейса RS-232 (примерно от минус 12 до плюс 12 вольт) к уровням CMOS/TTL (уровень 5-вольтовой логики). Микросхема 74LS240 является сдвоенным инвертирующим буфером четырёх линий с разрешением выхода.


Рис. 2. Схема myPROGGER.


Программатор, собранный по этой схеме обладает следующими достоинствами.

Любая версия Freeduino / Arduino может выступать в роли ISP программатора, с помощью которого можно, например, изменить bootloader в другой аналогичной плате, или прошить bootloader в новую микросхему ATmega. В описании указывается Arduino, но фактически может быть использован любой клон, включая все варианты Freeduino.

Здесь рассматривается два варианта ISP программатора на основе Arduino: Mega-ISP, который может быть собран из любой версии Arduino и его клонов, и Bit-Bang программатор, для которого подойдут только те варианты Arduino, которые имеют дополнительно выведенные на специальный разъем контакты микросхемы FT232RL.

Особенности ISP/ICSP

Аббревиатуры ISP и ICSP означают In System Programming и In Circuit Serial Programming соответственно. Это означает программирование чипа уже подключенного в некоторую схему, программирование в готовом устройстве по последовательному протоколу.

Принципиально важным является то, что программируемый микроконтроллер должен успешно "завестись", и только после этого он будет в состоянии принимать данные от программатора. Для нас это означает, что он должен быть подключен к питанию, и иметь соответствующий источник тактовых сигналов. Питание проще всего подавать через сам разъем ICSP, а вот с источником тактовых сигналов есть некоторые особенности.

Источник тактовых сигналов выбирается в микроконтроллерах серии ATmega с помощью так называемых fuse-битов, которые, также как и память программ, и EEPROM доступны для изменения с помощью программатора.

Производитель перед продажей выставляет fuse-биты так, что в качестве источника тактовых сигналов выбран внутренний осцилятор, и такой микроконтроллер можно просто подключить к ISP программатору с учетом расположения его выводов, и начать работу. Однако, если с помощью ISP программатора изменить значения fuse-битов так, что изменится источник тактовых сигналов, то чтобы ISP программатор опять начал работать с микроконтроллером, придется соответствующий источник к нему подключить. Таким образом, нужно быть внимательным при изменении значений fuse-битов.

Из известных проектов по созданию ISP программатора на основе Arduino наиболее интересным нам кажется Mega-ISP . Именно этот проект включен в состав ПО Arduino в раздел с примерами под именем ArduinoISP.

После загрузки скетча в вашу плату Arduino, скорее всего потребуется тем или иным образом отключить программный сброс. Владельцы плат Freeduino 2009/2013/Nano/Mega2560 могут просто снять перемычку JRS, владельцы Arduino могут перерезать ножом ту же перемычку. Для некоторых других плат можно выпаять конденсатор CRS, но мы советуем менее радикальный способ - соединить выводы Reset и +5V резистором номиналом порядка 120 Ом (). Если все сделано правильно, при открытии COM-порта не будет происходить сброс микроконтроллера (это видно по светодиоду 13), и как побочный эффект станет невозможно обновить его собственную прошивку из среды Arduino.

Во-вторых, данный ISP программатор при общении с ПК использует протокол AVRISP/STK500v1 только со скорость 19200 бит/сек, и нормально работает не со всеми вариантами ПО для ПК. Поэтому не удивляйтесь, что не удается что-либо прошить из среды Arduino. Авторы рекомендуют использовать программу avrdude из состава Win-AVR.

Сборка программатора Mega-ISP

Если Вы с помощью одной платы Arduino собираетесь прошить другую, то Вам потребуется разъем 2x3 и 6 проводков. Схема сборки:

Если нужно прошить отдельный микроконтроллер (не забываем, что его fuse-биты должны быть выставлены так, что он тактируется от внутреннего осцилятора), то нужно узнать согласно документации Atmel расположение вывовдов Gnd, Vcc, MOSI, MISO, SCK.

Соединение с Arduino такое: 10 - Reset, 11 - MOSI, 12 - MISO, 13 - SCK.

Не забываем подключить "землю" и питание.

Для примера приводим разводку для разъема ICSP и микроконтроллеров ATmega328 и ATtiny85.

На фото представлен один из вариантов реализации:

Работа с программатором Mega-ISP

Рассмотрим например, как прошить новый boot-loader.

Bit-Bang программатор

"Сердцем" Bit-Bang программатора является микросхема FD232RL (та самая, которая реализует COM-порт на шине USB), а собственно микроконтроллер ATmega никакого участия в процессе программирования не принимает. Это позволяет программировать микроконтроллер, установленный в "панельке" Вашей Arduino – вторая плата Arduino не потребуется.

Соответственно, для данного программатора подойдут только USB версии Arduino, да и то не все, т.к. не на всех вариантах разведен разъем X3 с дополнительными выводами FT232RL.

Сборка программатора Arduino Bit-Bang

Для сборки Вам потребуются разъемы 1x4, 2x6, штекер 1x2 (для питания) и несколько проводов. Можно использовать, например пару Audio-кабелей от CD-ROM – у них удобные разборные разъемы, и в таком случае можно обойтись даже без паяльника.

Схема соединений следующая:

Провода питания и "земли" потребуются, если Вы собираетесь программировать внешнее устройство. Для программирования микроконтроллера, находящегося в панели той же самой Arduino они не нужны.

На фотографиях представлены оба варианта соединения – программирование микроконтроллера ATmega168, находящегося в панельке Arduino (провода питания и "земли" не нужны), и программирование микроконтроллера во второй плате.


Работа с программатором Arduino Bit-Bang

Аналогично рассмотрим прошивку нового boot-loader’а.

Хочу описать опыт по программированию микроконтроллера семейства ATTiny используя в качестве программатора уже полюбившуюся мне Arduino UNO (да-да, она и такое умеет) и среду разработки Arduino IDE .

Никаких плясок с avrdude и другими сложными штуками - это я гарантирую.


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

Минутка истории

Пол года назад закупая очередную мелочевку на радиорынке я решил купить себе микроконтроллер с мыслью о том, что может быть, когда-нибудь, в лучшие времена я соберусь с мыслями и выйду за пределы Arduino как единственного решения.
Мне не хотелось брать что-то большое и мощное, а скорее наоборот - искал что-то очень простое. Одним из таких решений были микроконтроллеры семейства ATtiny. Поспрашивав у продавцов мне удалось найти . Одна проблема - она была только в SOIC корпусе, штука очень мелкая.

Я решил была не была и все равно купил себе одну штучку, просто попробовать. При цене в 2,5$ - это не было большим вложением.
Ну, вот прошло время и заскучав я решил попробовать запрограммировать эту кроху.

Как я уже говорил в моем случае мне попалась ATtiny85, а если быть совсем уж точным, то ATTiny85-20SU. Характеристики у микроконтроллера следующие:

  • CPU: AVR 8 бит
  • Напряжение питания: от 4.5 до 5.5 В
  • Flash: 8 КБайт
  • EEPROM: 512 Байт
  • RAM: 512 Байт
Всего у этой малышки 8-мь ножек. Две отведены на питание, а остальные шесть могут быть использованы нами как входы, так и как выходы. Причем на двух мы можем получить ШИМ, и до четырех из них может быть использовано в качестве аналоговых входов (как A0-A5 в Arduino).
С другой стороны - это конечно не так и много, но что-то сделать все же можно.
Распиновка у чипа следующая

Понадобится

В этот раз все достаточно безобидно:

  • Arduino UNO
  • ATTiny (если в SOIC корпусе, то еще и )
  • Макетная плата
  • Проводки
  • Конденсатор на 10мкФ 16В
  • Светодиод и резистор на 220Ом (если захотите полностью повторить мой опыт, то два резистора и два светодиода, но это скорее для менее скучного видео я сделал)

Все достаточно обыденно и если вы уже пробовали что-то делать, то скорее всего у вас уже где-то все это завалялось.

Подготовим Arduino IDE

Для того, чтобы наша IDE узнала о существовании новых чипов необходимо провести пару нехитрых манипуляций. Для начала нам необходимо скачать один маленький zip файл отсюда http://code.google.com/p/arduino-tiny/ - Google Code группа которая занимается сбором информации под разные чипы семейства ATtiny, за что им огромное спасибо.
На момент написания последним набором был arduino-tiny-0100-0015.zip (на всякий случай скопировал его себе, если что-то случится с группой, то качаем ).
Теперь необходимо посмотреть где наша IDE прячет от нас скетчбут. Для этого откроем File - Preserences

И там посмотрим поле Sketchbook Location и скопируем его себе.


Перейдем в эту папку и создадим там подкаталог с названием "hardware ". После этого скопируем в только что созданный каталог папку из скачанного ранее архива (arduino-tiny-0100-0015.zip) под названием tiny со всем её содержимым.
Перезагрузим IDE.
После этого в разделе Tools - Board у вас должно появится сразу несколько ATTiny . Пока что ничего не выбираем в этом списке. Значение должно быть установлено в Arduino UNO, если у вас выбрано что-то другое - поменяйте.


Arduino UNO превращается... В элегантный ISP программатор...

Небольшой ликбез . ISP (In-system programming) - это способность микроконтроллера получать прошивку находясь уже непосредственно в собранной схеме. Другими словами, несмотря на то, что к микроконтроллеру могут быть уже подключены всякие там светодиоды и кнопки, мы все еще будем иметь возможность залить на него новую прошивку.

Программатором (устройством передающим прошивку от компьютера в контроллер) в нашем случае будет выступать Arduino UNO. Чтобы Arduino стала ISP программатором на нее необходимо залить специальную прошивку. Эта прошивка поставляется вместе с Arduino IDE.

Итак, еще без какой-либо периферии Arduino подключаем к компьютеру и загружаем Arduino IDE .

Выбираем File - Examples - ArduinoISP


Внимание! Если у вас Arduino IDE версии 1.0 , то в полученный код необходимо будет внести изменения, а конкретно в функции heartbeat() найти строчку "delay(40); " и заменить её на "delay(20); ". Это известный баг. В Arduino IDE версии 1.0.1 (последней на момент написания статьи) эта проблема уже исправлена и ничего менять не нужно.

Нажимаем кнопку Upload и ждем, пока прошивка не попадет на Arduino. Поздравляю, у вас есть ISP-программатор.

Соберем схему

Для того, чтобы залить код в нашу ATtiny нужно собрать несложную схемку. На картинке я нарисовал вариант с микросхемой в DIP корпусе - так немного нагляднее, но нужно понимать, что разницы с SOIC+переходник никакой.

На первой схеме изображено только соединение с программатором (этого достаточно, чтобы залить код на микроконтроллер, но недостаточно для демонстрации работы), на второй - пример с двумя светодиодами (мне показалось что чтобы хоть как-то развеселить схему, два светодиода + ШИМ будет то, что надо, заодно чуть больше раскрываются возможности).


Особое внимание стоит уделить пожалуй лишь конденсатору между reset и GND на нашей Arduino. Это необходимо чтобы препятствовать программному сбросу контроллера после заливки в него прошивки предназначающейся для нашей ATtiny который автоматически вызывается каждый раз.
Вот что получилось у меня.


Пишем код

Практически все готово, осталось только написать очень простенькую прошивку для нашей ATTiny. Открываем Arduino IDE и пишем

Int led1 = 0 ; int led2 = 1 ; void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); } void loop() { analogWrite(led1,64 ); delay(500 ); analogWrite(led1,128 ); delay(500 ); analogWrite(led1,255 ); delay(500 ); digitalWrite(led1,LOW); analogWrite(led2,64 ); delay(500 ); analogWrite(led2,128 ); delay(500 ); analogWrite(led2,255 ); delay(500 ); digitalWrite(led2,LOW); digitalWrite(led2, HIGH); delay(100 ); digitalWrite(led2, LOW); delay(500 ); }

Код очень простой, в начале включает светодиод на нулевой ножке (соответсвует PB0 в разпиновке) в три этапа, каждый раз увеличивая значение в analogWrite(...) , что вызывает увеличение яркости свечения диода, потом гасит его и проделаывает то же самое на первой ножке (PB1). Именно эти выходы способны работать как ШИМ, что и демонстрируется в примере.
Осталось поменять значение в Tools - Board в новое, которое будет соответствовать вашей ATtiny и припиской @ 1 MHz (возможно еще какие-то слова после, нас они сильно не интересуют сейчас). В моем случае это ATTiny85 @ 1 MHz (internal oscilliator; BOD disabled)

Осталось изменить тип программатора на Arduino as ISP , сделать это можно выбрав Tools - Programmer соответствующий пункт.

Нажимает кнопку Upload.
Скорее всего в консоли Arduino IDE вы увидите пару ругательств.

avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
Да, признаю, слукавил, мы все же пользовались avrdude, только все за нас делала Arduino IDE, так что думаю вы не в обиде.
Ну и презентация работающей версии, конечно.

Рис.1 AVR ISP

Программаторы, работающие под управлением PonyProg2000 и других любительских программ, очень просты. Однако большинство из них не может обеспечить такой функциональности, какой обладают фирменные средства разработки. Одним из самых популярных программаторов Atmel является AVR ISP (внешний вид на рис.1). С помощью AVR ISP можно запрограммировать любой микроконтроллер с ядром AVR через последовательный интерфейс SPI. Программатор подключается через COM-порт и работает под управлением AVR Studio.

Конструкция и программное обеспечение AVR ISP открыто для разработчиков. Каждый может самостоятельно собрать его аналог и тем самым сэкономить деньги на покупке программатора у фирмы-производителя. Более того, существует множество любительских разработок на основе AVR ISP, которые обладают дополнительными возможностями и удобнее в обращении.

Рис.2 Аналог фирменного программатора AVR ISP

На рис.2 приведена принципиальная схема авторского варианта AVR ISP. В отличие от своего прообраза он содержит только один микроконтроллер, обладая теми же функциями. В место ATmega8535 (AT90S8535) в базовом варианте применён микроконтроллер ATmega16. Он имеет вдвое большим объёмом памяти программ и данных, и сопоставим с ATmega8535 по назначению выводов и внутреннему устройству. Запись и обновление содержимого DD2 осуществляются через встроенную программу-загрузчик (boot-loader), которая использует для этих целей способность самопрограммирования микроконтроллеров AVR. Дополнительными программными средствами осуществляется так же согласование работы программы предназначенной для ATmega8535 с адресным пространством ATmega16 и использование прерывания TOV0 для отслеживания положения кнопки SB1 и управления линиями PD7, PC0…PC6.

Программатор подключается к любому свободному COM порту в системе через разъём X1. Напряжение 9…15 В подаётся на разъём X2 от отдельного источника питания способного отдавать в нагрузку ток не меньший чем 100 мА. Разъем X3 служит для внутрисхемного программирования или при программировании на отдельной панели.

На выводе 7 X3 присутствуют прямоугольные импульсы частотой 1.8432 МГц. Их можно использовать, если программируемый микроконтроллер настроен на работу с кварцевым резонатором либо с внешним тактовый генератором. В этом случае импульсы подаются на вход XTAL1. Устройства, не имеющие собственного источника энергии, можно запитать непосредственно от программатора через вывод 2 X3 (внутрисхемное программирование устройств с напряжением питания меньшим, чем 5 может привести к поломке!). Активизация и запрещение тактовых импульсов на выводе 2 X3, а также присутствие напряжения 5 В на выводе 7 X3, регулируются кнопкой SB1.

В ходе работы светодиод HL3 свидетельствует о нормальном функционировании программатора. HL1 будет светиться во время программирования микроконтроллера, а HL2 будет сигнализировать о наличии напряжения и тактовых импульсов (выводы 2 и 7 X3 соответственно).

Перед началом работы в DD2 нужно занести программу, находящуюся в Файле BootISP.hex (исходный текст в файле BootISP.asm) с помощью любого удобного программатора. FUSE-биты при этом должны выглядеть следующим образом:

CKSEL0 = 0 SUT0 = 1 BOOTRST = 0 EESAVE = 1

CKSEL1 = 0 SUT1 = 0 BOOTSZ0 = 0 CKOPT = 1

CKSEL2 = 1 BODEN = 0 BOOTSZ1 = 0 JTAGEN = 1

CKSEL3 = 1 BODLEVEL = 0 SPIEN = 0 OCDEN = 1

Рис.3 Процесс программирования

После того как программатор собран и подключён к компьютеру – приступают к загрузке текущей версии управляющей программы. Нажав на кнопку SB1(!), подают питание на разъём X2. Должен загореться светодиод HL1, что свидетельствует о переводе в режим обновления программного обеспечения. После этого запускают AVR Studio и через меню Tools -> AVR Prog открывают окно обновления “прошивки” AVR ISP. Далее нужно указать путь к загрузочному файлу, который по умолчанию имеет размещение C:Program filesAtmelAVR ToolsSTK500STK500.ebn, и начать программирование, нажав на экранную кнопку Flash -> Program(окно на рис.3). В конце завершения операции необходимо кратковременно снять напряжение, после чего программатор будет готов к применению. Связь осуществляется через меню Tools -> Program AVR -> Auto Connect. Вид окна программы поддержки AVR ISP приведен на рис.4.

Рис.4 Вид окна программы поддержки AVR ISP

Интерфейс программы очень простой и не требует подробных пояснений. Здесь только необходимо обратить внимание на несколько важных деталей. В списке устройств на вкладке Program в окне Device, кроме микроконтроллеров с ядром AVR (ATmega, ATtiny, AT90x и др.), доступны также некоторые модели семейства MCS-51 (названия начинаются с AT89S). Программирование AT89S через SPI принципиально ни чем не отличается от подобной операции у AVR-микроконтроллеров, за исключением одного существенного различая. Сигнала RESET у MCS-51 (в отличие от AVR) имеет активный высокий уровень. Поэтому при программировании моделей AT89S резистор R2, предотвращающий запуск микроконтроллеров AVR, необходимо подключить к шине питания программатора.

Иногда случается так, что с первого раза не удается установить связь программатора с устройством. Если не считать ошибок монтажа и неправильной установки FUSE-битов, запрещающих работу SPI (SPIEN, DWEN и RSTDISBL), вероятнее всего проблема заключается в слишком высокой частоте тактовых импульсов на линии SCK. В этом случае необходимо уменьшить скорость последовательного интерфейса. Это можно сделать вручную через вкладку Board (окно ISP Freq). Модуль SPI ведомого микроконтроллера не может работать на частотах превышающих F ­clk ­/4.

Программатор был проверен в работе с AVR Studio версий 4.12…4.16 со многими типами микроконтроллеров. Никаких ошибок при этом не было выявлено.

Рис.1 AVR ISP

Программаторы, работающие под управлением и других любительских программ, очень просты. Однако большинство из них не может обеспечить такой функциональности, какой обладают фирменные средства разработки. Одним из самых популярных программаторов Atmel является AVR ISP (внешний вид на рис.1). С помощью AVR ISP можно запрограммировать любой микроконтроллер с ядром AVR через последовательный интерфейс SPI. Программатор подключается через COM-порт и работает под управлением .

Конструкция и программное обеспечение AVR ISP открыто для разработчиков. Каждый может самостоятельно собрать его аналог и тем самым сэкономить деньги на покупке программатора у фирмы-производителя. Более того, существует множество любительских разработок на основе AVR ISP, которые обладают дополнительными возможностями и удобнее в обращении.


Рис.2 Аналог фирменного программатора AVR ISP

На рис.2 приведена принципиальная схема авторского варианта AVR ISP. В отличие от своего прообраза он содержит только один микроконтроллер, обладая теми же функциями. В место ATmega8535 (AT90S8535) в базовом варианте применён микроконтроллер ATmega16. Он имеет вдвое большим объёмом памяти программ и данных, и сопоставим с ATmega8535 по назначению выводов и внутреннему устройству. Запись и обновление содержимого DD2 осуществляются через встроенную программу-загрузчик (boot-loader), которая использует для этих целей способность самопрограммирования микроконтроллеров AVR. Дополнительными программными средствами осуществляется так же согласование работы программы предназначенной для ATmega8535 с адресным пространством ATmega16 и использование прерывания TOV0 для отслеживания положения кнопки SB1 и управления линиями PD7, PC0…PC6.

Программатор подключается к любому свободному COM порту в системе через разъём X1. Напряжение 9…15 В подаётся на разъём X2 от отдельного источника питания способного отдавать в нагрузку ток не меньший чем 100 мА. Разъем X3 служит для внутрисхемного программирования или при программировании на отдельной панели.
На выводе 7 X3 присутствуют прямоугольные импульсы частотой 1.8432 МГц. Их можно использовать, если программируемый микроконтроллер настроен на работу с кварцевым резонатором либо с внешним тактовый генератором. В этом случае импульсы подаются на вход XTAL1. Устройства, не имеющие собственного источника энергии, можно запитать непосредственно от программатора через вывод 2 X3 (внутрисхемное программирование устройств с напряжением питания меньшим, чем 5 может привести к поломке!). Активизация и запрещение тактовых импульсов на выводе 2 X3, а также присутствие напряжения 5 В на выводе 7 X3, регулируются кнопкой SB1.

В ходе работы светодиод HL3 свидетельствует о нормальном функционировании программатора. HL1 будет светиться во время программирования микроконтроллера, а HL2 будет сигнализировать о наличии напряжения и тактовых импульсов (выводы 2 и 7 X3 соответственно).

Перед началом работы в DD2 нужно занести программу, находящуюся в Файле BootISP.hex (исходный текст в файле BootISP.asm) с помощью любого удобного программатора. FUSE-биты при этом должны выглядеть следующим образом:
CKSEL0 = 0 SUT0 = 1 BOOTRST = 0 EESAVE = 1
CKSEL1 = 0 SUT1 = 0 BOOTSZ0 = 0 CKOPT = 1
CKSEL2 = 1 BODEN = 0 BOOTSZ1 = 0 JTAGEN = 1
CKSEL3 = 1 BODLEVEL = 0 SPIEN = 0 OCDEN = 1


Рис.3 Процесс программирования

После того как программатор собран и подключён к компьютеру - приступают к загрузке текущей версии управляющей программы. Нажав на кнопку SB1(!), подают питание на разъём X2. Должен загореться светодиод HL1, что свидетельствует о переводе в режим обновления программного обеспечения. После этого запускают AVR Studio и через меню Tools -> AVR Prog открывают окно обновления “прошивки” AVR ISP. Далее нужно указать путь к загрузочному файлу, который по умолчанию имеет размещение C:\Program files\Atmel\AVR Tools\STK500\STK500.ebn, и начать программирование, нажав на экранную кнопку Flash -> Program(окно на рис.3). В конце завершения операции необходимо кратковременно снять напряжение, после чего программатор будет готов к применению. Связь осуществляется через меню Tools -> Program AVR -> Auto Connect. Вид окна программы поддержки AVR ISP приведен на рис.4.


Рис.4 Вид окна программы поддержки AVR ISP

Интерфейс программы очень простой и не требует подробных пояснений. Здесь только необходимо обратить внимание на несколько важных деталей. В списке устройств на вкладке Program в окне Device, кроме микроконтроллеров с ядром AVR (ATmega, ATtiny, AT90x и др.), доступны также некоторые модели семейства MCS-51 (названия начинаются с AT89S). Программирование AT89S через SPI принципиально ни чем не отличается от подобной операции у AVR-микроконтроллеров, за исключением одного существенного различая. Сигнала RESET у MCS-51 (в отличие от AVR) имеет активный высокий уровень. Поэтому при программировании моделей AT89S резистор R2, предотвращающий запуск микроконтроллеров AVR, необходимо подключить к шине питания программатора.

Иногда случается так, что с первого раза не удается установить связь программатора с устройством. Если не считать ошибок монтажа и неправильной установки FUSE-битов, запрещающих работу SPI (SPIEN, DWEN и RSTDISBL), вероятнее всего проблема заключается в слишком высокой частоте тактовых импульсов на линии SCK. В этом случае необходимо уменьшить скорость последовательного интерфейса. Это можно сделать вручную через вкладку Board (окно ISP Freq). Модуль SPI ведомого микроконтроллера не может работать на частотах превышающих F ­clk ­/4.

Программатор был проверен в работе с версий 4.12…4.16 со многими типами микроконтроллеров. Никаких ошибок при этом не было выявлено.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
DD1 ИС RS-232 интерфейса

MAX232

1 В блокнот
DD2 МК AVR 8-бит

ATmega16

1 В блокнот
DA1 Линейный регулятор

LM7805

1 В блокнот
VD1 Выпрямительный диод

1N4007

1 В блокнот
R1, R2 Резистор

10 кОм

2 В блокнот
R3 Резистор

4.7 кОм

1 В блокнот
R4 Резистор

510 Ом

1 В блокнот
R5 Резистор

6.8 кОм

1 В блокнот
R6 Резистор

3.3 кОм

1 В блокнот
R7-R9 Резистор

1 кОм

3 В блокнот
C1, C5 470 мкФ 16 В 2 В блокнот
C2, C3, C6, C7 Электролитический конденсатор 1 мкФ 16 В 4 В блокнот
C4, C8, C11 Конденсатор 0.1 мкФ 3 В блокнот
C9, C10 Конденсатор 30 пФ 2 В блокнот
ZQ1 Кварц 3.6864 МГц 1 В блокнот
HL1 Светодиод


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

Наверх