Atmega88pa au как прошить
Чем и как «прошить» МК AVR , ATmega, ATtiny.
Как загрузить программу в микроконтроллер.
Как запрограммировать микроконтроллер AVR .
Я советую прошивать микроконтроллер AVR из удобного интерфейса программирования встроенного в компилятор CVAVR CodeVisionAVR
Можно через простейший адаптер — буквально «пять проводков» ( схема ниже ) соединяющих принтерный порт ПК с прошиваемым микроконтроллером AVR.
Но более удобны программаторы подключаемые в USB или COM порты ПК — особенно в USB .
Книги по электронике и микроконтроллерам скачать в библиотеке
Страницы курса : заглавная 1 2 3 4 5 6 7 8 9
Задачи-упражнения курса по AVR — там
Результат написания и компиляции программы — файл-прошивку с расширением .hex (и возможно файл .e pp или .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 программирования. Используются другие выводы МК !
Внимательно смотрите ДатаШит вашего МК !
в ATmega 128 ATmega64 сигналы ISP программатора
MISO подключают к ножке PE1
MOSI подключают к ножке PE0
Для ATmega640 -1280 -1281 -2560 -2561 смотрите в даташит
Table 163. Pin Mapping Serial Programming.
2) Вывод PEN нужно подключить к питанию VCC резистором 1-10 кОм
3) в ATmega 128 и ATmega64 есть FUSE бит совместимости со старым МК ATmega103 и с завода он запрограммирован в «0» на совместимость.
См Table 117. Extended Fuse Byte.
При прошивании ATmega 128 и 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-генератор и для следующего программирования вам понадобится ставить кварц с конденсаторами или даже искать:
Но популярному AT tiny2313 даже параллельный программатор
не всегда поможет ! В Errata на AT tiny2313 было написано:
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)
в ATmega XXX с завода включен внутренний RC генератор
на частоте 1 МГц ( уточните это по ДШ и его возможные частоты )
Если вам нужна другая частота или нужно включить внешний кварцевый или керамический резонатор — вам нужно при программировании МК установить фьюзы ( Fuses ) по таблицам из ДШ ( Даташит AVR на русском языке ) или по таблице фьюзов на стр. 2 или по таблице установки фьюзов ниже :
НЕ запрограммированный фьюз 1
ЗАпрограммированный фьюз 0
Пример: Чтобы включить в ATmega16 внешний кварцевый резонатор (говорят просто — «кварц») с частотой от 3 до 8 МГц с конденсаторами ( по схеме рис. 12 ДШ ) найдите в ДШ раздел » System Clock » — «системный тактовый сигнал».
В таблице 2 указаны комбинации фьюзов для разных источников тактового сигнала.
Далее написано что с завода МК поставляется с такой комбинацией фьюзов
CKSEL 0001 SUT 10 CKOPT 1
По таблице 4 находим : в ATmega 16 для кварца с частотой от 3 до 8 МГц нужны конденсаторы от 12 до 22 пФ и вот такая комбинация фьюзов :
CKSEL 111 1 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 111 1 SUT 11 CKOPT 0
CKOPT 0 — нужен и тогда когда вы хотите взять с XTAL2 тактовый сигнал для другого
микроконтроллер или тактируемого прибора в вашем устройстве.
Фьюзы SUT — определяют быстроту запуска генератора тактового сигнала,
более детально это описано в даташите в таблицах до 12.
Фьюзы ATt iny2313 описаны в конце следующей страницы курса.
Интерфейс программирования AVR — Адаптер для соединения МК с ПК при прошивании.
Для соединения компьютера с ISP разъемом устройства на AVR Советую сделать адаптер от STK200 — это «правильные 5 проводков» с микросхемой буфером снижающим вероятность случайного повреждения порта ПК.
В установках компилятора CodeVisionAVR интерфейс «5-проводков» называется «Канда системз STK200+/300». Меню «сеттингс» — «программер». В этом же диалоге можно понизить частоту с которой программатор будет обмениваться с прошиваемым МК увеличивая множитель задержки.
Частоту тактирования сигнала SCK программатором при прошивании можно установить в диалоге программирования в CVAVR.
Снижение частоты на SCK повышает помехоустойчивость при прошивке.
Программа узнаёт адаптер STK200 по перемычкам на разъеме параллельного порта к которому он подключается — должны быть соединены двумя перемычками пары выводы: 2 и 12, 3 и 11.
Для программирования к МК должно быть подключено питание. Например +4. +5 .5 вольт ко всем выводам МК в названии которых есть VCC , а 0 вольт ко всем выводам GND (это «общий» провод).
Обязательно поставьте подтягивающий резистор 10 кОм от ножки R ESET AVR на питание VCC и конденсатор 0.01-0.15 мкФ ( в а пноутах AVR040 и AVR042 рекомендуют 0.01 мкФ ) от R ESET на 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 CodeVision AVR.
Я проверял «проводки» при питании МК ATmega64L от 3,0 до 5,3 вольт, а так же с ATmega16, ATmega48, ATtiny26, ATtiny261, ATtiny13 , ATtiny 23 13 — программирует всегда без сбоев!
Всё о прошивке AVR Прошивка AVR PIC прошивки Программирование PIC и AVR
Советую для изготовления адаптера взять » принтерный» шнур — он длинный и экранированный, а не экранированные проводки не стоит делать более 10-15 см.
Питать устройство при программировании можно :
— сетевым адаптеры от бытовых устройств понизив напряжение до 5 вольт.
— батарейками ! Достаточно три батарейки по 1,5 вольт последовательно.
+5 вольт можно взять с вывода 1 гейм порта компьютера или из провода включенного в гнездо USB.
Желательно питать устройство от ПК! В этом случае «земля» вашего устройства будет соединена с корпусом ПК и можно будет безопасно подключать и отключать разъем программирующего адаптера.
Вначале старайтесь соединять «земли» ( металлические корпуса , «общие» провода ) устройств — для уравнивания их потенциалов !
Удобно подпаять к проводнику GND устройства проводок с «крокодильчиком» который прицепите к металлу ПК у LPT или COM портов перед подключением разъемов или сигнальных линий, проводов.
Теперь БЕЗОПАСНО соединять разъемы
и затем подавать питание на устройство.
Не поленитесь: спаяйте адаптер STK200 на микросхеме буфере по рисункам внизу страницы — так как LPT порт компьютера более нежен чем COM — соответственно его спалить проще. Спалите LPT и будете меня ругать!
А я предупреждал !
Поставщики AVR говорят что AT Tiny2313 поступают с завода с настройкой внутреннего RC-генератора на 4МГц (в даташите указано 8 МГц) с делителем частоты на 8 — т.е. частота тактирования всего 500 КГц. Значит частота на линии SCK, формируемая программатором, не должна быть выше 120..125кГц.
Программатор встроенный в CodeVisionAVR позволяет настроить эту частоту правильно. Выше было написано как.
Если вы хотите использовать ножки МК SCK, MOSI, MISO в вашем устройстве то подключайте другие компоненты к ним через резисторы 4.7 КОм — чтобы не мешать программированию.
Так рекомендовано в апноуте AVR 042
Для Мега64, -128 вместо MOSI и MISO используются другие ножки для ISP программирования !
Если у вас нет LPT порта сделайте
Аналог «5 проводков» для COM- порта.
Или соберите простой, дешевый и хороший
USB программатор для AVR
Прошитый микроконтроллер для сборки USB программатора AVR вы можете заказать по почте.
Существуют специальные программы «бутлодеры» ( bootloader — начальный загрузчик) которые записываются в микроконтроллер способами перечисленными выше и после этого м икроконтроллер может сам, при включении, закачивать в себя программу (например из ПК через адаптер USB-UART rs 232 COM port — схема в задаче 4 курса) и запускать ее выполнение.
Есть много бесплатных загрузчиков
STC создал загрузчик bootloader размером 256 байт с поддержкой быстрого страничного режима записи.
Прошитые загрузчиком bootloader микроконтроллеры AVR PIC вы можете заказать по почте.
C писок Апноутов для AVR примеры применения микроконтроллеров.
И много полезной информации !
AVR miniICE
Это профессиональное средство для программирования и
отладки программы МК ATmega фирмы Atmel в реальном
устройстве. Он полностью совместимый
с оригинальным AVR JTAG ICE.
Характеристики:
- Полная совместимость с 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 готов к работе !
Пример реализации: на макетке
Прилагаемые файлы:
Дополнение:
Можно сразу залить в ATmega16 готовую прошивку (не надо прошивать через бутлодер)
Программирование AVR с помощью PonyProg
описание программатора PonyProg на русском языке
Я очень советую программировать из CodeVisionAVR .
Свободно распространяемая программа управления программированием микроконтроллеров 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 в картинках !
ключевые слова: программирование микроконтроллеров, как написать программу для микроконтроллера, обучение программированию микроконтроллеров, микроконтроллеры atmega128, как запрограммировать микроконтроллер, как прошить микроконтроллер, отладка программы для AVR, моделирование работы электронных схем, электронные проекты, хобби, язык си для микроконтроллеров, язык программирования си AT76C712 , AT76C713 , AT90CAN128 , AT90CAN128 Automotive , AT90CAN32 , AT90CAN64 , AT90PWM2 , AT90PWM3 , AT90S1200 , AT90S2313 , AT90S2323 , AT90S2343 , AT90S4433 , AT90S8515 , AT90S8535 , ATmega128 , ATmega1280 , ATmega1281 , ATmega16 , ATmega161 , ATmega162 , ATmega163 , ATmega164 , ATmega165 , ATmega168 , ATmega168 Automotive , ATmega169 , ATmega2560 , ATmega2561 , ATmega32 , ATmega323 , ATmega324 , ATmega325 , ATmega3250 , ATmega329 , ATmega3290 , ATmega406 , ATmega48 , ATmega48 Automotive , ATmega64 , ATmega640 , ATmega644 , ATmega645 , ATmega6450 , ATmega649 , ATmega6490 , ATmega8 , ATmega8515 , ATmega8535 , ATmega88 , ATmega88 Automotive , ATtiny11 , ATtiny12 , ATtiny13 , ATtiny15L , ATtiny2313 , ATtiny25 , ATtiny26 , ATtiny28L , ATtiny45 , ATtiny85 |
Светодиод VD1 индицирует режим записи микроконтроллера,
светодиод VD2 — чтения,
светодиод VD3 — наличие питания схемы.
Напряжение, необходимое для питания схема берёт с разъёма ISP, т.е. от программируемого устройства. Эта схема является переработанной схемой программатора STK200/300 (добавлены светодиоды для удобства работы), поэтому она совместима со всеми программами программаторов на PC, работающих со схемой STK200/300. Для работы с этим программатором используйте программу CVAVR
Программатор можно выполнить на печатной плате и поместить её в корпус разъёма LPT, как показано на рисунках:
Тема: Осваиваем контроллер ATmega88
Широко известен AVR контроллер ATmega8. Но, к сожалению, его производитель, фирма ATMEL, скоро заканчивает его выпуск и продажу. Что идет на смену?
Это серия микроконтроллеров ATmega48/88/168. Хотя с виду они мало чем отличаются от предшественника, но, на самом деле отличия более, чем серьезные. Взять хотя бы совершенно новую адресацию и способы обращения к области ОЗУ ввода/вывода — EXTENDED SRAM.
Пока готовится промышленная печатная плата, я не выдержал и сделал макет. Сегодня он задышал!
Миниатюры
Прошивка микроконтроллеров через Ардуино.
Итак, в предыдущем уроке мы наконец то доделали простенький автомат освещения. В принципе осталось всего ничего- заливаете скетч в любую Ардуину, собираете схему и… все! Все работает! Но! Давайте теперь попробуем посчитать денежный эквивалент самого устройства. Будем исходить из самой низкой стоимости деталей.
- Собственно сам контроллер Ардуино. Естественно для такого небольшого устройства нужно брать что то небольшое, тоже Nano или Pro-Mini. По сравнению с Ардуино Уно они стоят почти в 3 раза дешевле. Нано кроме того имеет контроллер интерфейса и является полной копией Ардуино Уно только небольшого размера. Очень удобно заливать прошивку без всяких сторонних программаторов и переходников (об этом чуть ниже). Итого стоимость Ардуино Нано около 120 руб вместо 300 руб Ардуино Уно.
- Модуль реле KY-019. Цена всего около 50-60 рублей за блок с одним реле.
- Блок питания (БП) на 5В. На Али есть БП мощностью несколько Ватт и стоимостью около 40 руб. Стоит посчитать мощность БП для устройства. Реле потребляет около 200 мА, Ардуино- берите еще 50 мА, ну и светодиоды, допустим 3 штуки по 20 мА=3х20=60 мА. Т.е. потребляемый ток будет равен 200+50+60=310 мА. Значит БП нужен мощностью не менее 5В х 0,31 А=1,55 Вт. Стоит учесть еще потери самого БП, т.е по идее БП на 3 Вт должно хватить. Итого еще 50 руб. Можно конечно поставить старый зарядник от сотового телефона с током не менее 0,3 А. Это будет более правильно и, кроме того, бесплатно.
Кнопки считать не будем т.к. их можно где нибудь выковырять. Вместо кнопок можно поставить различные датчики но это будет в следующем уроке, когда мне придут датчики из Китая. Вобщем посчитаем стоимость только одной Ардуины. 130 рублей. Немного. Но давайте также прикинем другие варианты. Скетч занимает 1,63 кБ. В Ардуино на 328 контроллере находится 32 кБ памяти. Это больше требуемого в 32/1,63=19,6 раз. Почти в 20 раз. Мне лично жаль тратить такой контроллер на такой небольшой скетч. Какой же выход можно найти из сложившейся ситуации? Взять контроллер с меньшим объемом памяти и прошить его так же как и Ардуино! Давайте посмотрим какие еще контроллеры есть в семействе Атмега.
Список и описания я взял с сайта http://www.gaw.ru дабы не плодить плагиат и не делать лишнюю работу. Желтым цветом отмечены МК которые не рекомендованы для новых разработок. Есть еще другие МК но они довольно мощные и здесь пока рассматривать их не будем.
Микроконтроллеры семейства TinyAVR
Классические AVR-микроконтроллеры
Микроконтроллеры семейства MegaAVR
Тип | Напр. питания, В | Такт. Частота, МГц | I/O | Flash | EEPROM | SRAM | Интер- фейсы |
АЦП | Таймеры | ISP | Корпус |
ATmega406 | 4.0 — 25 | 1 | 18 | 40K | 512 | 2K | JTAG TWI |
10x12bit 1x18bit |
1x8bit 1x16bit |
I Power-save Power-down Power-off |
LQFP48 |
ATmega48 | 1.8-5.5 | 20 | 23 | 4K | 256 | 512 | UART SPI I 2 C |
6x10bit 2x8bit |
2x8bit 1x16bit |
S | DIP28 TQFP32 MLF32 |
ATmega48 Avtomotove | 2.7-5.5 | 16 | 23 | 4K | 256 | 512 | UART SPI I 2 C |
6x10bit 2x8bit |
2x8bit 1x16bit |
S | TQFP32 MLF32 |
ATmega88 | 1.8-5.5 | 20 | 23 | 8K | 512 | 1k | UART SPI I 2 C |
6x10bit 2x8bit |
2x8bit 1x16bit |
S | DIP28 TQFP32 MLF32 |
ATmega88 Avtomotove | 2.7-5.5 | 20 | 23 | 8K | 512 | 1k | UART SPI I 2 C |
6x10bit 2x8bit |
2x8bit 1x16bit |
S | TQFP32 MLF32 |
ATmega168 | 1.8-5.5 | 20 | 23 | 16K | 512 | 1k | UART SPI I 2 C |
6x10bit 2x8bit |
2x8bit 1x16bit |
S | DIP28 TQFP32 MLF32 |
ATmega168 Avtomotove | 2.7-5.5 | 20 | 23 | 16K | 512 | 1k | UART SPI I 2 C |
6x10bit 2x8bit |
2x8bit 1x16bit |
S | TQFP32 MLF32 |
ATmega8 | 2.7-5.5 | 16 | 23 | 8K | 512 | 1k | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | DIP28 TQFP32 MLF32 |
ATmega16 | 2.7-5.5 | 16 | 32 | 16K | 512 | 1k | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | DIP40 TQFP44 MLF44 |
ATmega32 | 2.7-5.5 | 16 | 32 | 32K | 1K | 2K | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | DIP40 TQFP44 MLF44 |
ATmega64 | 2.7-5.5 | 16 | 53 | 64K | 2K | 4K | 2xUART SPI |
8x10bit | 2x8bit 2x16bit |
S | TQFP64 MLF64 |
ATmega640 | 1,8…5,5 4,5…5,5 |
8 16 |
86 | 64K | 4K | 8K | 4xUART JTAG SPI |
16x10bit | 2x8bit 4x16bit |
I | TQFP100 |
ATmega128 | 2.7-5.5 | 16 | 53 | 128K | 4K | 4K | 2xUART SPI |
8x10bit | 2x8bit 2x16bit |
S | TQFP64 MLF64 |
ATmega1280 | 1,8…5,5 4,5…5,5 |
8 16 |
86 | 128K | 4K | 8K | 4xUART JTAG SPI |
16x10bit | 2x8bit 4x16bit |
I | TQFP100 |
ATmega1281 | 1,8…5,5 4,5…5,5 |
8 16 |
54 | 128K | 4K | 8K | 2xUART JTAG SPI |
8x10bit | 2x8bit 4x16bit |
I | TQFP64 |
AT90CAN32 | 2.7-5.5 | 16 | 53 | 32K | 1K | 2048 | UART JTAG CAN USART |
8x10bit | 2x8bit 2x16bit |
S | MLF 64 LQFP 64 |
AT90CAN64 | 2.7-5.5 | 16 | 53 | 64K | 2K | 4K | UART JTAG CAN USART |
8x10bit | 2x8bit 2x16bit |
S | MLF 64 LQFP 64 |
AT90CAN128 | 2.7-5.5 | 16 | 53 | 128K | 4K | 4K | 2xUART SPI CAN |
8x10bit | 2x8bit 2x16bit |
S | TQFP64 MLF64 |
AT90CAN128 Automotive | 2.7-5.5 | 16 | 53 | 128K | 4K | 4096 | 2xUART SPI CAN |
8x10bit | 2x8bit 2x16bit |
S | MLF64 LQFP64 |
ATmega103 | 4.0-5.5 | 6 | 48 | 128K | 4K | 4K | UART SPI |
8x10bit | 2x8bit 2x16bit |
I | TQFP64 |
ATmega161 | 2.7-5.5 | 8 | 35 | 16K | 512 | 1K | 2xUART SPI |
— | 2x8bit 1x16bit |
S | DIP40 TQFP44 |
ATmega162 | 1.8-5.5 | 16 | 35 | 16K | 512 | 1K | 2xUART SPI |
— | 2x8bit 1x16bit |
S | DIP40 TQFP44 MLF44 |
ATmega163L | 2.7-5.5 | 8 | 32 | 16K | 512 | 1K | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | DIP40 TQFP44 MLF44 |
ATmega164P/V | 1.8-5.5 | 16 | 32 | 16K | 512K | 1024 | 2xUART SPI+USART TWI |
8x10bit | 2x8bit 1x16bit |
S | MLF44 PDIP40 TQFP44 |
ATmega165 | 1.8-5.5 2.7-5.5 |
8 16 |
53 | 16K | 512 | 1K | UART SPI JTAG PWM |
8x10bit | 2x8bit 1x16bit |
S | TQFP64 MLF64 |
ATmega165P | 1.8-5.5 | 16 | 54 | 16K | 0.5 | 1024 | UART SPI+USI 4PWM |
8x10bit | 2x8bit 1x16bit |
S | MLF64 TQFP64 |
ATmega169 | 1.8-3.6 | 4 | 53 4×25 LCD |
16K | 512 | 1K | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | TQFP64 |
ATmega169P | 1.8-5.5 | 16 | 54 | 16K | 0.5 | 1024 | UART SPI+USI 4PWM |
8x10bit | 2x8bit 1x16bit |
S | MLF64 TQFP64 |
ATmega8515 | 2.7-5.5 | 16 | 35 | 8K | 512 | 512 | UART SPI |
— | 2x8bit 1x16bit |
S | PDIP40 PLCC44 TQFP,MLF |
ATmega8535 | 2.7-5.5 | 16 | 32 | 8K | 512 | 512 | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | PDIP40 PLCC44 TQFP MLF |
ATmega2560 | 1,8…5,5 4,5…5,5 |
8 16 |
86 | 256K | 4K | 8K | 2xUART JTAG SPI |
16x10bit | 2x8bit 4x16bit |
I | TQFP100 |
ATmega2561 | 1,8…5,5 4,5…5,5 |
8 16 |
54 | 256K | 4K | 8K | 2xUART JTAG SPI |
8x10bit | 2x8bit 4x16bit |
I | TQFP64 |
ATmega324P/V | 1.8-5.5 | 20 | 32 | 32K | 1K | 2048 | 2xUART SPI+USART TWI |
8x10bit | 2x8bit 1x16bit |
S | MLF44 PDIP40 TQFP44 |
ATmega325 | 1.8-5.5 | 16 | 53 | 32K | 1K | 2K | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | TQFP MLF |
ATmega3250 | 1.8-5.5 | 16 | 68 | 32K | 1K | 2K | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | TQFP MLF |
ATmega325P | 1.8-5.5 | 20 | 54 | 32K | 1K | 2048 | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | MLF64 TQFP64 |
ATmega3250P | 1.8-5.5 | 20 | 54 | 32K | 1K | 2048 | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | TQFP100 |
ATmega329P | 1.8-5.5 | 16 | 54 | 32K | 1K | 2048 | JTAG SPI |
8x10bit | 2x8bit 1x16bit |
S | MLF64 TQFP64 |
ATmega3290P | 1.8-5.5 | 16 | 54 | 32K | 1K | 2048 | JTAG SPI |
8x10bit | 2x8bit 1x16bit |
S | TQFP100 |
ATmega644P/V | 1.8-5.5 | 20 | 32 | 64K | 2K | 4096 | 2xUART SPI+USART TWI |
8x10bit | 2x8bit 1x16bit |
S | MLF44 PDIP40 TQFP44 |
ATmega645 | 1.8-5.5 | 16 | 53 | 64K | 2K | 4K | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | TQFP MLF |
ATmega6450 | 1.8-5.5 | 16 | 68 | 64K | 2K | 4K | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | TQFP MLF |
ATmega644 | 1.8-5.5 2.7-5.5 |
10 20 |
32 | 64K | 2K | 4K | UART SPI TWI PWM JTAG |
8x10bit | 2x8bit 1x16bit |
S | PDIP40 TQFP44 MLF44 |
ATmega329 | 1.8-5.5 | 16 | 53 LCD 4×25 |
32K | 1K | 2K | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | TQFP MLF |
ATmega3290 | 1.8-5.5 | 16 | 68 LCD 4×40 |
32K | 1K | 2K | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | TQFP MLF |
ATmega649 | 1.8-5.5 | 16 | 53 LCD 4×25 |
64K | 2K | 4K | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | TQFP MLF |
ATmega6490 | 1.8-5.5 | 16 | 68 LCD 4×40 |
64K | 2K | 4K | UART SPI |
8x10bit | 2x8bit 1x16bit |
S | TQFP MLF |
Как видно из таблицы микроконтроллеров достаточно большое количество и практически любой контроллер можно «заточить» под нужную задачу. Давайте и мы выберем хоть какой то с подробным описанием как выбирать и по каким параметрам вообще нужно ориентироваться.
- Объем памяти. Действительно, если представить что нам нужно 4 кБ памяти и взять, например, ATtiny25 то памяти просто не хватит т.к. этот МК имеет всего 2 кБ памяти. Поэтому лучше брать все таки побольше. Я бы выбрал ATtiny85. Там уже 8 кБ памяти и, если будет доработка функционала, есть некоторый буфер для программы.
- Количество выводов. Это наверное даже поважнее чем п.1. Все упирается в количество портов ввода-вывода. На выводы конечно можно подключать устройства I2C и поадресно их опрашивать и выводить информацию. Но с I2C такие МК работают достаточно медленно. В нашем случает с ATtiny85 есть 8 выводов (корпус PDIP8 SOIC8, т.е. 8 выводов), из которых 2 питание а остальные 6 мы смело можем использовать! Нам при изготовлении нужно: 1 вывод на кнопки, 1 вывод на светодиоды, 1 вывод на реле. Свободными остаются еще 3 вывода! Т.е. нам хватит и памяти и выводов. Тем более её размер. В корпусе PDIP8 их уместится несколько штук на ногте! Цена вопроса. Тиньки (ATtiny контроллеры так называют радиолюбители) вместе с контроллером для программирования через USB порт стоят около 80 руб. Уже дешевле. Но что странно. В Китае просто МК стоят дороже чем готовое устройство! Нонсенс!
- Напряжение питания. Дальше мы рассмотрим работу с фьюзами. Так вот именно эти внутренние переключатели указывают как будет работать МК. С чем это можно сравнить. Например вы написали программу на компьютере. Включаете компьютер и.. компьютер не включился. Почему спросите вы? Ну причин может быть много: неисправный БП (1 причина), процессор (2), память (3) и т.д… а может быть просто слетел БИОС. Так вот именно фьюзы и работают как БИОС на компьютере- они указывают как будет работать собственно ядро МК. Можно выставить частоту работы ядра, от какого генератора синхронизируется МК, внешнего или внутреннего, пределы допустимого напряжения питания при которых МК будет работать. Ту же 85 тиньку можно питать напряжением от 2,7 до 5,5 В. Достаточно просто правильно выставить фьюзы.
Вобщем будем выбирать контроллер с Flash- памятью (туда именно и записывается наш код программы) не менее 8 кБ и как можно дешевле (здесь не говорится о минимизации, если нужно миниатюрное устройство то стоит поискать МК для поверхностного монтажа в корпусах TQFP и SO). Возьмем мой любимый МК ATmega8. Его достоинства: 8 кБ памяти, 28 выводов (из них около 20- наши), имеется 512 байт энергонезависимой памяти в которую мы можем сохранять и считывать необходимые данные. Цена- около 50-60 руб за штуку в Китае. Итого мы удешевили наш проект только по МК уже не менее чем в 2 раза. Осталось научиться запрограммировать МК.
Мы рассмотрим 3 программы для программирования МК. Это будет собственно сама оболочка Arduino IDE, AVRDUDESHELL и Sinaprog. Самая простая- Sinaprog но ей необходимо подготовить hex- файл в Arduino IDE. Самая навороченная- AVRDUDESHELL. Но начнем мы все таки с Arduino IDE т.к. без нее никуда и ей просто надо уметь пользоваться. Приступаем к программированию.
Как запрограммировать Atmega с помощью Arduino и Arduino IDE
Итак открываем Arduino IDE и прежде всего нужно загрузить библиотеки нужных контроллеров в саму Arduino IDE. Это делается следующим образом: Нажимаем Скетч- Подключить библиотеку- Управлять библиотеками. В открывшемся окне в верхнем правом поле наберите MiniCore (можете прямо отсюда скопировать). Кликаете на данный пакет и жмете кнопку Установка. Пакет установится и теперь при выборе платы в меню Инструменты в самом низу появится еще целых 5 типов контроллеров (возможно в новых обновлениях будет больше выбор)! Выбираете какой вам нужен и можете переходить к более точной настройке. Т.е. в меню инструменты вам становятся доступны менюшки по настройкам фьюзов. Значение Bootloader предлагает вам записать ардуиновский загрузчик. Можете выбрать Да или Нет. Загрузчик тоже занимает место. Учтите это. BOD- это минимальное напряжение питания при котором контроллер отключится. Можете выбрать 2,7v и тогда МК будет работать от, например, элемента 18650. Особое внимание обратите на значение Clock. В данном меню указывается частота ядра МК и тип задающего генератора. Например запись 20MHz external предписывает МК работать от ВНЕШНЕГО кварцевого резонатора с частотой 20 МГц. Т.е. для запуска МК вам придется подключить такую схему,
Подключение кварцевого резонатора к Атмега
причем кварцевый резонатор должен быть на 20 МГц. Иначе МК работать не будет. Для Атмега 8 кварц нужно подключать на 9 и 10 выводы (см. даташит ниже). В случае если укажете, например, 1MHz internal то вы запускаете внутренний генератор самой атмеги и, таким образом, МК начинает работать с указанной частотой. Обратите внимание что внутренний генератор включается только на 1 и 8 МГц, чего вполне достаточно для бытовых целей. LTO (Link Time Optimization)- оптимизатор кода, позволяет сделать код более компактным, т.е. уменьшит размер занимаемой памяти, по умолчанию отключен. Можете включить но работает он непредсказуемо. Так что лучше все таки отключить. Еще добавлю общие советы. Самое главное- постарайтесь НИКОГДА НЕ ЗАНИМАТЬ ВЫВОД RESET . Если вы неудачно прошьете, решите дописать что то в новую прошивку, что то изменить в коде для удобства и решите после переписать МК с запрограммированным выводом RESET- вы вряд ли сможете записать новый код в запрограмированный МК, т.к. при программирований используется именно этот вход. А так как он занят программно то работать он, естественно, не будет. Есть конечно вариант сбросить МК к заводским настройкам с помощью AVR Doctor но опять же нужно будет делать данное устройство. Если вы довольно плотно подсели на МК Атмега то данное устройство просто необходимо вам в вашей работе. У меня МК немного но я уже несколько раз «лочил» (от англ. lock- запирать, закрывать) МК и только это устройство помогло мне реанимировать 3 Атмега8. Вроде немного но зато теперь я уверен- если что случится то всегда могу все вернуть на исходные позиции. Это не реклама а просто констатация факта. А что вы будете делать- решать только Вам.
Теперь делаем следующее. Находим картинку с названием выводов нашего МК. Например для Атмега 8 есть вот такая картинка- даташит (напомню что 328 и 8 атмеги различаются объемом памяти).
Распиновка 328 атмеги
По ней находим выводы MISO, SCK, MOSI, GND, 5V, RESET. Теперь подключаемся таким образом:
Назначение | ARDUINO | Atmega 8 |
RESET | 10 | 1 |
MOSI | 11 | 17 |
MISO | 12 | 18 |
SCK | 13 | 19 |
5V | +5V | 7 |
GND | GND | 8, 22 |
Как вы поключитесь абсолютно не имеет никакого значения, можете сделать переходник и включаться напрямую в Ардуино, можете все соединить на макетной плате- не важно. Главное- правильно все подсоединить. Другие МК программируются абсолютно так же. Качаете даташит, находите указанные выше выводы и подсоединяете вывод RESET Ардуино (10 вывод) к выводу RESET МК, вывод MOSI Arduino (11 вывод) к выводу MOSI МК и т.д. Единственное что нужно- указать тип МК и прописать нужные значения в MiniCore.
Теперь подключаем Ардуино к компьютеру (Arduino ISP уже должна быть залита в Ардуино, если нет то выбираете плату Ардуино, указываете порт, заливаете Arduino ISP, переключаетесь на нужный МК, прописываете фьюзы), выбираем нужный скетч и заливаем его в МК. Разные версии программы Ардуино по разному позволяют записывать скетч в МК. В одних версиях нужно открыть меню Файл- Записать с помощью программатора. В моей версии 1.6.8 для записи через программатор достаточно нажать Shift и нажать стрелку как для заливки скетча в Ардуино. После непродолжительного перемигивания светодиодов на Ардуино скетч будет записан в МК. На этом запись закончена и можно переходить к сборке готового устройства. Хочу так же обратить ваше внимание что при указывании портов ввода- вывода на Ардуино следует учитывать что значение цифрового порта D1 не является первым выводом Атмеги. Для этого вам опять же необходимо ознакомится с картинкой расположения выводов на Атмеге. По распиновке смотрим что порт D1 находится на 3 выводе Атмеги 328 (или 8 Атмеги). Вообще выводы IDE отмечены розовым цветом. Поэтому при разводке платы следует учитывать расположение выводов микросхемы.
Как прошить микроконтроллер ATmega, AVR
3) Дальше требуется соединить микроконтроллер с программатором , быстрее и проще это сделать с Беспаечная макетная плата MB102 и с проводами-радугой с типом наконечников Male to Male или если программатор без шлейфа с наконечниками Female to Male
Соединять в соответствии с картинкой , приведенной ниже(Это для микроконтроллеров ATMEGA8, у других мк смотрите соответствующую им распиновку!):
Если беспаечной платы и проводов-радуги нет — то можно напрямую припаяться к выводам разъема программатора и к ножкам микроконтроллера для прошивки.
Обратите внимание, что контакт 22 — GND находится напротив по другую сторону мс контакта 7 — VCC, исходя из этого не нужно отсчитывать ножки микросхемы, а просто соединить контакт напротив по другую сторону микросхемы соответственно.
Соединение без макетной платы и с помощью обычных проводов
Смотрим распиновку разъема программатора:
Паяем к микроконтроллеру в соответствии с распиновкой.
Удобнее паять таким паяльником — Паяльник GJ 907.
Или можно просто запихать в разъем шлейфа обычные провода, но при таком соединении возможен плохой контакт или его отсутствие.
Запускаем eXtreme Burner AVR , во вкладке Chip выбираем свой микроконтроллер(у нас ATmega8):
(Если при запуске у вас выдается сообщение — «не удается продолжить выполнение кода поскольку система не обнаружила libusb0.dll» то необходимо скачать и установить эти драйвера
вручную, запустив файл InstallDriver.exe )
Затем выбираем вкладку Read и нажимаем Flash(считать прошивку(на многих коммерческих устройствах устанавливают бит защиты от считывания))
(Если выдается ошибка Power On Failed
Cannot Communicate with Target Chip! значит , что какая или какие-либо ножки микроконтроллера не контактируют с программатором, логично проверить наличие контактов и исправить их отсутствие)
Flash — это прошивка
EEPROM — энергонезависимая память
Fuse Bits and Lock Bits — это настройка фьюзов, защиты, параметров микроконтроллера(например работать микроконтроллеру от внутренней частоты или от внешнего кварцевого резонатора, откуда брать опорное напряжение для АЦП и т.д.)
Если драйвера установлены, подсоединено всё правильно то имеем такой результат:
Мы считывали еще не прошитый микроконтроллер ATMEGA8, поэтому у нас будут считаны только нули(FFFF):
Попробуем прошить микроконтроллер
Прошивка микроконтроллера представляется в виде формата .HEX
Она мигает светодиодом на любом выводе D микроконтроллера ATmega, так как в прошивке задана установка всех портов D как выход.
Запускаем eXtreme Burner
Нажимаем Open и в файлах выбираем прошивку в формате HEX
Дальше должно быть так:
Для запуска прошивки выбираем вкладку Write(Запись) и нажимаем Flash, должен пойти процесс прошивки
Прошивка успешно завершилась:
Теперь считаем её
Жмем Read — Flash, получаем:
Как видно нули заменились другими цифрами и видно оставшееся пустое мето в памяти для прошивки.
Теперь отсоединим микроконтроллер от программатора и проверим работу прошивки на практике.
Собираем все по такой схеме:
Собрали, всё должно работать(светодиод мигает 2 раза в секунду):
Если светодиод не горит или наоборот горит постоянно — проверьте надежность контактов.
Внимание! Не вешайте напрямую нагрузку на ножки микросхемы с потреблением больше 25 мА!
Не подавайте на микросхему больше 5.5 Вольт.
Цикл перезаписи прошивки не бесконечен — есть определенный ресурс.Не стоит микроконтроллер использовать и перезаписывать как USB-флешку.