Всё о прошивке AVR микроконтроллеров AVRЧем и как "прошить" МК AVR, ATmega, ATtiny.
Как загрузить программу в микроконтроллер.
Как запрограммировать микроконтроллер AVR.
Я советую прошивать микроконтроллер AVR из удобного интерфейса программирования встроенного в компилятор CVAVR CodeVisionAVR
Можно через простейший адаптер - буквально "пять проводков" (схема ниже) соединяющих принтерный порт ПК с прошиваемым микроконтроллером AVR.
Но более удобны программаторы подключаемые в USB или COM порты ПК - особенно в USB.
Книги по электронике и микроконтроллерам скачать в библиотеке
Страницы курса : заглавная 1 2 3 4 5 6 7 8 9
Задачи-упражнения курса по AVR - там
Скачать весь курс по AVR одним архивом на заглавной странице курса.
ПРОГРАММИРОВАНИЕ AVRРезультат написания и компиляции программы - файл-прошивку с расширением .hex (и возможно файл .epp или .bin с содержимым для EEPROM МК) нужно записать ("зашить", "загрузить", "прожечь") в МК AVR.
МК AVR можно (пере-) программировать не менее 10000 раз, при чем это можно делать прямо в устройстве в котором они будут работать - такое программирование называют "в системе" - "ин систем программин" или ISP.
Компания ATMEL рекомендует установить на плате устройства специальный разъем для подключения программатора.Например 6 штырьков для ISP прошивания AVR
Вид сверху платы на штырьки.
или 10 штырьков в аналогичном порядке ( NC - значит не подключен )
Все контакты ISP разъема подсоединяются к ножкам МК в соответствии с названиями сигналов ! Исключения указаны ниже.
Вывод 2 нужно подключить к " + " питания МК если вы собираетесь использовать программатор питающийся от вашего же устройства - например фирменный ISP AVR либо если вы хотите питать ваше устройство от USB при использовании программатора указанного выше. Для адаптера "5 проводков" этот вывод не подключается.
Для ISP программирования достаточно 5 контактов. Соответственно и разъем который вы будете использовать может быть любым удобным для размещения на плате и имеющий минимум 5 контактов - например в один ряд.Я использую и считаю это очень удобным 6 штырьков расположенные в 1 ряд, в том порядке как расположены ножки программирования у ATmega16 ( рисунок есть на страничке 6 ) - при этом разводка линий программирования получается простейшей. Такой разъем легко применять и для 28 выводных AVR ATmega8 ATmega48 ATmega88 ATmega168 ATmega328 только сделать отдельный проводник для подключения к контакту RESET.
ВНИМАНИЕ !
1) в ATmega64 и ATmega128 выводы MOSI и MISO не применяют для ISP программирования. Используются другие выводы МК !
Внимательно смотрите ДатаШит вашего МК !
в ATmega128 ATmega64 сигналы ISP программатора
MISO подключают к ножке PE1
MOSI подключают к ножке PE0
Для ATmega640 -1280 -1281 -2560 -2561 смотрите в даташит
Table 163. Pin Mapping Serial Programming.2) Вывод PEN нужно подключить к питанию VCC резистором 1-10 кОм
3) в ATmega128 и ATmega64 есть FUSE бит совместимости со старым МК ATmega103 и с завода он запрограммирован в "0" на совместимость.
См Table 117. Extended Fuse Byte.
При прошивании ATmega128 и ATmega64 вам нужно сделать этот fuse "1" - "не запрограммирован". Убрать галочку в CVAVR.
Подробней о фьюзах ниже и на стр. 2 курса
Трудно сразу написать правильно работающую программу, даже после прогона и отладки в софт эмуляторе - симуляторе VMLAB или PROTEUS ваше реальное устройство с реальным AVR может делать не то, что вы от него ожидаете.
Значит в программу нужно будет вносить изменения, перекомпилировать и снова зашивать в МК AVR, и так раз 20-40 и более поэтому разумно использовать отличный программатор AVR в уже имеющемся у вас CVAVR в котором вы правите программу.
В меню CVAVR "Сеттинс -> Программер" вам надо выбрать ваш адаптер (подробней про адаптеры ниже!) для программирования.
Вариант 1. Только если вы понимаете что такое фьюзы и знаете как правильно их установить !!! Вы можете в компиляторе CodeVisionAVR открыть меню "Проджект -> Конфига -> Афта Мэйк" и отметить чек бокс "Program the chip". Появится окно программирования-прошивания AVR
В этом окне надо установить параметры программирования - фьюз биты и лок биты - об этом подробней написано ниже. После установки параметров программирования нажмите ОК.
Теперь после компиляции программы без ошибок в окне с результатами компиляции вам будет доступна кнопка "Program" - нажмите на нее и, если все подключено правильно, произойдет программирование МК - т.е. файл .hex будет загружен в память программ МК и (если используется в программе) файл EEPROM будет в нее загружен. Затем МК будет "сброшен" (на ножку RESET будет подан лог. 0 а затем опять "1") и AVR начнет выполнять уже новую, только что прошитую (загруженную в него) программу.
Вам даже не нужно будет отсоединять адаптер программирования от вашего устройства если вы не используете в вашем устройстве последовательный интерфейс SPI.
... и так до окончательной отладки устройства.
Вариант 2. Если вы не устанавливали чек бокс "Program the chip" или
Если вы хотите без компиляции прошить с помощью CVAVR готовые файлы прошивки .hex и возможно содержимое EEPROM в микроконтроллер AVR
1) запустите программатор CVAVR кнопочкой "МИКРОСХЕМА" правее "красного
жучка" в верхней панели инструментов. Появится окно программирования AVR
2) Откройте меню "File" затем "Load FLASH" - выберете файл прошивки .hex который нужно прошить в AVR (CVAVR поддерживает и другие форматы, а не только .hex) и щелкните "Открыть".
3) Если у вас есть информация для загрузки в EEPROM AVR то откройте меню "File" затем "Load EEPROM" - выберете файл .epp (CVAVR поддерживает и другие форматы) и щелкните "Открыть".
Если вы не используете EEPROM или не меняете ее содержимое - поставьте галочку у "Preserve EEPROM" - это ускорит прошивание.
4) Установите параметры программирования - фьюз биты и лок биты.
Лок биты устанавливают уровень защиты вашей программы от чтения из памяти AVR - это актуально для коммерческих изделий. Для защиты прошивки отключите отладочные интерфейсы JTAG или "уан вая" и установите "Programming and Verification disabled".
ГЛАВНОЕ это правильная установка фьюз битов - fuse AVR ...
5) Запрограммируйте AVR не кнопкой "Program All", а через меню "Program" - Стереть, потом FLASH, потом EEPROM и если надо и если вы уверены в их установке то и фьюзы.
После прошивания, если вы сделали все правильно, AVR начнет выполнять уже новую программу.
В А Ж Н О !
В диалоге настройки прошивания отключите программирование фьюзов МК уберите галочку у Program Fuse Bit(s) - если не разобрались четко, что они делают и как правильно их установить !
Иначе вы можете отключить режим ISP или внутренний RC-генератор и для следующего программирования вам понадобится ставить кварц с конденсаторами или даже искать:
Параллельный программатор для AVR
Но популярному ATtiny2313 даже параллельный программатор
не всегда поможет ! В Errata на ATtiny2313 было написано:
Parallel Programming does not work
Parallel Programming is not functioning correctly. Because of this, reprogramming
of the device is impossible if one of the following modes are selected:
– In-System Programming disabled (SPIEN unprogrammed)
– Reset Disabled (RSTDISBL programmed)
в ATmegaXXX с завода включен внутренний RC генератор
на частоте 1 МГц ( уточните это по ДШ и его возможные частоты )Если вам нужна другая частота или нужно включить внешний кварцевый или керамический резонатор - вам нужно при программировании МК установить фьюзы (Fuses) по таблицам из ДШ ( Даташит AVR на русском языке ) или по таблице фьюзов на стр. 2 или по таблице установки фьюзов ниже :
ЗАПОМНИТЕ :
НЕ запрограммированный фьюз 1ЗАпрограммированный фьюз 0
Пример: Чтобы включить в ATmega16 внешний кварцевый резонатор (говорят просто - "кварц") с частотой от 3 до 8 МГц с конденсаторами ( по схеме рис. 12 ДШ ) найдите в ДШ раздел "System Clock" - "системный тактовый сигнал".
В таблице 2 указаны комбинации фьюзов для разных источников тактового сигнала.
Далее написано что с завода МК поставляется с такой комбинацией фьюзов
CKSEL 0001 SUT 10 CKOPT 1
По таблице 4 находим : в ATmega16 для кварца с частотой от 3 до 8 МГц нужны конденсаторы от 12 до 22 пФ и вот такая комбинация фьюзов :CKSEL 1111 SUT 11 CKOPT 1
Вот скриншот с такой установкой фьюзов в программаторе компилятора CVAVR
Сняв галочку Program Fuse Bit(s) вы cможете не менять установку фьюзов при прошивании AVR !НЕ НАЖИМАЙТЕ кнопку "Program All" - она прошивает и фьюзы не смотря на отсутствие галочки.
Обязательно !!! Прочитайте текущую комбинацию фьюзов в микроконтроллере - "Read" -> "Fuse bit(s)" и скопируйте ее в окно фьюзов. теперь при случайном нажатии кнопки "Програм ол" в МК прошъется та же комбинация фьюзов которая есть сейчас.
Фьюз биты - фьюзы AVR - у которых нет галочки после прошивки AVR будут
равны "1" - т.е. будут не запрограммированными.
Реклама недорогих радиодеталей почтой:
Для прошивания МК используйте меню "Program"Вначале "Erase chip" - стереть чип.
Затем "FLASH" - прошить программу в МК
И если надо то "EEPROM" - прошить в EEPROM.
Для использования ATmega16 (и других мег) с внешним кварцевым или керамическим резонатором на частотах выше 8 МГц вам нужно установить фьюзы как в примере выше, но запрограммировать CKOPT
значит сделать его "0".
Т.е. вам нужна такая комбинация:CKSEL 1111 SUT 11 CKOPT 0
CKOPT 0 - нужен и тогда когда вы хотите взять с XTAL2 тактовый сигнал для другого
микроконтроллер или тактируемого прибора в вашем устройстве.
Фьюзы SUT - определяют быстроту запуска генератора тактового сигнала,
более детально это описано в даташите в таблицах до 12.
Фьюзы ATtiny2313 описаны в конце следующей страницы курса.
Интерфейс программирования AVR - Адаптер для соединения МК с ПК при прошивании.
Для соединения компьютера с ISP разъемом устройства на AVR Советую сделать адаптер от STK200 - это "правильные 5 проводков" с микросхемой буфером снижающим вероятность случайного повреждения порта ПК.
В установках компилятора CodeVisionAVR интерфейс "5-проводков" называется "Канда системз STK200+/300". Меню "сеттингс" - "программер". В этом же диалоге можно понизить частоту с которой программатор будет обмениваться с прошиваемым МК увеличивая множитель задержки.
Частоту тактирования сигнала SCK программатором при прошивании можно установить в диалоге программирования в CVAVR.
Снижение частоты на SCK повышает помехоустойчивость при прошивке.
Программа узнаёт адаптер STK200 по перемычкам на разъеме параллельного порта к которому он подключается - должны быть соединены двумя перемычками пары выводы: 2 и 12, 3 и 11.
Внимание!
Для программирования к МК должно быть подключено питание. Например +4...+5.5 вольт ко всем выводам МК в названии которых есть VCC , а 0 вольт ко всем выводам GND (это "общий" провод).
Обязательно поставьте подтягивающий резистор 10 кОм от ножки RESET AVR на питание VCC и конденсатор 0.01-0.15 мкФ (в апноутах AVR040 и AVR042 рекомендуют 0.01 мкФ) от RESET на GND .
Если в МК нет внутреннего генератора тактового сигнала (например старые AVR серии AT90sXXXX или мега побывавшая в чьих то шаловливых руках изменивших фьюзы до того как попасть к вам) то нужно подключить кварц
на 1 - 8 МГц и два конденсатора от 15 до 33 пФ.Либо подать тактовый сигнал 0.8-1.5 МГц от внешнего источника -
например генератора на микросхеме 74hc14 (аналог 1553ТЛ2) или на таймере LM555.Вот как сделать простой генератор тактовой частоты :
Программатор AVReAl может программировать МК без кварца и без конденсаторов ! Он выводит тактовый сигнал на выв. 5 LPT его нужно подать на ножку XTAL1 МК и добавить в командной строке AVReAL специальный ключ "-o0". Программатор AVReAl позволяет назначать какие ножки LPT порта использовать - это будет полезно когда часть ножек LPT вы уже спалите
:-)
Тактовый сигнал генерирует и самодельный программатор AVR
для USB - смотрите ниже на этой странице.
Я использую самый простой вариант адаптера
STK200 - "для самых ленивых"Пять поводков соединяющих линии параллельного (LPT) порта ПК и AVR так же как на схеме STK200 выше, но без микросхемы буфера.
Лучше все же токоограничительные резисторы от 150 до 270 ом впаять Береженого бог бережет !
Проводки не более 15 см длиной !
Адаптер "5-проводков" прекрасно работает с компилятором CVAVR CodeVisionAVR.
Я проверял "проводки" при питании МК ATmega64L от 3,0 до 5,3 вольт, а так же с ATmega16, ATmega48, ATtiny26, ATtiny261, ATtiny13, ATtiny2313 - программирует всегда без сбоев!
Всё о прошивке AVR Прошивка AVR PIC прошивки Программирование PIC и AVR
Советую для изготовления адаптера взять " принтерный" шнур - он длинный и экранированный, а не экранированные проводки не стоит делать более 10-15 см.
Питать устройство при программировании можно :- сетевым адаптеры от бытовых устройств понизив напряжение до 5 вольт.
- батарейками ! Достаточно три батарейки по 1,5 вольт последовательно.
+5 вольт можно взять с вывода 1 гейм порта компьютера или из провода включенного в гнездо USB.Желательно питать устройство от ПК! В этом случае "земля" вашего устройства будет соединена с корпусом ПК и можно будет безопасно подключать и отключать разъем программирующего адаптера.
ВНИМАНИЕ !
Вначале старайтесь соединять "земли" (металлические корпуса, "общие" провода) устройств - для уравнивания их потенциалов !
Удобно подпаять к проводнику GND устройства проводок с "крокодильчиком" который прицепите к металлу ПК у LPT или COM портов перед подключением разъемов или сигнальных линий, проводов.
Теперь БЕЗОПАСНО соединять разъемы
и затем подавать питание на устройство.
Не поленитесь: спаяйте адаптер STK200 на микросхеме буфере по рисункам внизу страницы - так как LPT порт компьютера более нежен чем COM - соответственно его спалить проще... Спалите LPT и будете меня ругать!А я предупреждал !
Поставщики AVR говорят что ATTiny2313 поступают с завода с настройкой внутреннего RC-генератора на 4МГц (в даташите указано 8 МГц) с делителем частоты на 8 - т.е. частота тактирования всего 500 КГц. Значит частота на линии SCK, формируемая программатором, не должна быть выше 120..125кГц.
Программатор встроенный в CodeVisionAVR позволяет настроить эту частоту правильно. Выше было написано как.
AVReal тоже.
Если вы хотите использовать ножки МК SCK, MOSI, MISO в вашем устройстве то подключайте другие компоненты к ним через резисторы 4.7 КОм - чтобы не мешать программированию.
Так рекомендовано в апноуте AVR042
Для Мега64, -128 вместо MOSI и MISO используются другие ножки для ISP программирования !
Если у вас нет LPT порта сделайте
Аналог "5 проводков" для COM-порта.
Или соберите простой, дешевый и хороший
USB программатор для AVRПрошитый микроконтроллер для сборки USB программатора AVR вы можете заказать по почте.
Существуют специальные программы "бутлодеры" (bootloader - начальный загрузчик) которые записываются в микроконтроллер способами перечисленными выше и после этого микроконтроллер может сам, при включении, закачивать в себя программу (например из ПК через адаптер USB-UART rs232 COM port - схема в задаче 4 курса) и запускать ее выполнение.Есть много бесплатных загрузчиков
Вот хороший: Bootloader AVR.
Вот еще: MegaLoad Bootloader
STC создал загрузчик bootloader размером 256 байт с поддержкой быстрого страничного режима записи.
Прошитые загрузчиком bootloader микроконтроллеры AVR PIC вы можете заказать по почте.
Назад на стр. /06.htm - задачи управжнения по AVR
Cписок Апноутов для AVR примеры применения микроконтроллеров.
И много полезной информации !
AVR miniICE
Это профессиональное средство для программирования и
отладки программы МК ATmega фирмы Atmel в реальном
устройстве. Он полностью совместимый
с оригинальным AVR JTAG ICE.Автор данного устройства Milan Kostomlatsky kosta@mcu.cz Оригинальное описание находится здесь
Характеристики:
- Полная совместимость с AVR JTAG ICE
- Возможность программирования и отладки МК ATmega с интерфейсом JTAG
- Поддержка отладки в реальном времени
- Програмное обеспечение регулярно обновляется для новых типов МК
- Возможность обновления програмного обеспечения непосредственно из AVR Studio
- Широкий диапазон питающего напряжения 2.6 - 6 V
- Питание непосредственно от отлаживаемого устройства
- Соединение с AVR Studio через COM порт
- Два светодиодных индикатора ("Питание" и "Коннект")
Поддерживаемые микроконтроллеры (AVR Studio ver. 4.xx):
- ATmega128, ATmega128L, AT90CAN128
- ATmega16, ATmega16L
- ATmega162, ATmega162L, ATmega162V
- ATmega165, ATmega165V
- ATmega169, ATmega169L, ATmega169V
- ATmega32, ATmega32L
- ATmega323, ATmega323L
- ATmega64, ATmega64L
Прошивка AVR miniICE обновляется из новых версий AVR StudioВы скачиваете новую версию и через меню перепрошиваете
AVR miniICE и получаете поддержку новых чипов.
Детали:
Кол. Тип Обозначение 2 470R R1, R2 1 10K R3 2 22p C7, C8 6 100n C1,C2,C3,C4,C5,C6 1 LED-G D1 1 LED-R D2 1 ATmega16L DD1 1 MAX3232 DD2 1 7.3728 MHz Q1 Программирование (обновление программного обеспечения):
- При помощи любого программатора описанного выше запрограммируйте ATmega16 прилагаемым файлом
- Запрограммируйте фьюзы как показано на рисунке:
- Соедините COM порт компьютера с AVR miniICE и подайте на него питание
- Запустите AVR Studio и в нем запустите AVR Prog
- Выберите файл для программирования upgrade.ebn (находится в каталоге AVR Studio)
рисунок
- Запрограммируйте обновление (AVR Prog может выдать ошибку по окончании программирования -
не обращайте на это внимания.
- Запрограммируйте фьюзы как показано на рисунке
Все ! AVR miniICE готов к работе !
Пример реализации: на макетке
AVRminiICE собран и готов к работе
Прилагаемые файлы:
Печатная плата в формате P-CAD 2002
Дополнение:Можно сразу залить в ATmega16 готовую прошивку (не надо прошивать через бутлодер)
Программирование AVR с помощью PonyProg
описание программатора PonyProg на русском языке
Я очень советую программировать из CodeVisionAVR !!!
PonyProgСвободно распространяемая программа управления программированием микроконтроллеров AVR, PIC и т.д. Более подробную информацию и саму программу можно получить на сайте автора Claudio Lanconelli http://www.lancos.com/ (кстати есть поддержка русского интерфейса).
Большинство контроллеров AVR поддерживает режим внутрисхемного программирования.
Это означает, что Вам не нужно вытаскивать микроконтроллер из платы каждый раз, когда Вам необходимо его перепрограммировать. Опять-таки покупка готового программатора обойдется Вам в $50-150. В нашем случае Вы обойдетесь без лишних накладных расходов. С помощью программы PonyProg, Windows или Linux, и свободного параллельного порта Вы сможете создать хороший и простой программатор. И этот программатор представляет собой простой кабель. Сам кабель и его распайка представдены на рис.1
Рис.1
Следует обратить внимание что эта схема не имеет промежуточного буфера и не имеет гальванической развязки по отношению к параллельному порту, поэтому во избежание вывода из строя параллельного порта, подключать и отключать кабель следует при выключенном компьютере и выключенном питании на плате, где установлен контроллер.
На рис.2 схема такого же кабеля, но с буферной микросхемой. Все пассивные элементы и микросхема монтируются в корпус разъема параллельного порта. В обоих случаях для уверенной работы длина соединительного кабеля не должна превышать пол метра.
Рис.2
- SPI (Serial Programmable Interface) Программируемый интерфейс последовательного доступа
Используется для внутрисхемного программирования чипа и для связи с другими устройствами.
Сигналы программируемого интерфейса последовательного доступа
- SCK (SPI Bus Serial Clock) Шина последовательных тактирующих импульсов (строб)
- MISO (SPI Bus Master Input/Slave Output) Шина данных (Мастер ввод/Подчиненный вывод)
- MOSI (SPI Bus Master Output/Slave Input) Шина данных (Мастер вывод/Подчиненный ввод)
- RST (Reset MCU) Сброс микроконтроллера
- GND (Ground) "Земля, корпус"
Рис.3
На Рис.3 приведена схема подключенния загрузочного кабеля к контроллеру ATmega8.
Источник питания стабилизированный от 4,5 до 5 V или батарейка.
При подключении других AVR контроллеров серий AT90, ATmega, проследить на соответствие сигналов и цоколевку.
Для контроллеров серии ATmega внешний кварцевый резотатор не обязателен. Они могут работать от внутреннего генератора и поставляются призводителем именно в таком режиме.
В любом случае, прежде чем совершать какие либо действия с контроллером, необходимо прочитать инструкцию (Datasheet) конкретно для данного девайса.
Я, avr123.nm.ru - советую подключать ВСЕ выводы
питания и земли МК !!! как в задаче 7 нарисовано.
Вот настройка PonyProg на LPT порт :
Настройка программатора PonyProg в картинках !
Программатор AVR микроконтроллеров. LPT программатор. Принципиальная схема программатора на LPT порт показана на рисунке. В качестве шинного формирователя используйте микросхему 74AC244 или 74HC244 (К1564АП5), 74LS244 (К555АП5) либо 74ALS244 (К1533АП5).Светодиод VD1 индицирует режим записи микроконтроллера,
светодиод VD2 - чтения,
светодиод VD3 - наличие питания схемы.
Напряжение, необходимое для питания схема берёт с разъёма ISP, т.е. от программируемого устройства. Эта схема является переработанной схемой программатора STK200/300 (добавлены светодиоды для удобства работы), поэтому она совместима со всеми программами программаторов на PC, работающих со схемой STK200/300. Для работы с этим программатором используйте программу CVAVR
Программатор можно выполнить на печатной плате и поместить её в корпус разъёма LPT, как показано на рисунках:Для работы с программатором удобно использовать удлинитель LPT порта, который несложно изготовить самому (к примеру, из кабеля Centronix для принтера), главное "не жалеть" проводников для земли (18-25 ноги разъёма) или купить. Кабель между программатором и программируемой микросхемой не должен превышать 20-30 см.