Атмега 8 программирование isp через ардуино
Далеко не во всех проектах целесообразно использовать Ардуинку целиком, иногда достаточно всего нескольких выводов микроконтроллера, да и интегрировать её в схему не всегда удобно. В таких случаях разумно совместить простоту и удобство среды программирования Arduino IDE и дешевизну и малый размер «голого» микроконтроллера, тем более, что прошивать такие МК можно непосредственно с помощью Ардуинки.
В семействе AVR огромное множество микроконтроллеров на любой вкус. Для стандарт tinyAVR ( ATtiny xxx) характерны небольшое количество флеш-памяти (до 16 килобайт) и количество линий ввода-вывода в совокупности с низким энергопотреблением, а для стандарта megaAVR ( ATmega xxx) доступно уже до 256 килобайт памяти и до сотни портов ввода-вывода (зависит от модели МК), так же доступна расширенная система команд и периферийных устройств. Сегодня будем прошивать ATmega8 , цифра 8 в названии говорит нам о том, что у этого микроконтроллера 8 килобайт встроенной памяти. На картинке ниже расписаны выводы микроконтроллера в DIP корпусе. Кстати у ATmega48/88/168/328 выводы расположены аналогичным образом.
- Ground (8 и 22 ноги) — земля, минус питания.
- VCC (7 нога) — + питания.
- Crystal (9 и 10 ноги) — сюда подключается кварцевый резонатор нужной частоты, в случае если МК настроен на работу от внешнего генератора.
- AVCC (20 нога) — это + питание для аналоговой части МК, их разделяют с VCC в случаях когда необходимо получать сильно точные значения, питания подают отфильтрованное от помех и т.п. На практике для рядовых задач просто соединяют эту ногу с VCC.
- AREF (21 нога) — на эту ногу можно подавать опорное напряжение отличное от пяти вольт питания микроконтроллера, например если есть необходимость измерять напряжение в пределах 3 вольт.
- RESET — сброс настроек, перезагрузка МК. Кратковременная подача логического ноля на этот вывод приведет к перезапуску прошивки, так же необходим для перезаписи.
- Остальные выводы — это порты ввода вывода такие же как и на плате Ардуино, их можно использовать по своему усмотрению.
Для прошивки нашего микроконтроллера понадобятся его порты последовательного периферийного интерфейса (SPI — Serial Peripheral Interface) — это синхронный протокол последовательной передачи данных, используемый для связи микроконтроллера с одним или несколькими периферийными устройствами. В нашем случае это выводы:
- 17 вывод — MOSI (Master Out Slave In) — линия для передачи данных от ведущего устройства (Master) к ведомым (Slave)
- 18 вывод — MISO (Master In Slave Out) — линия для передачи данных от ведомого устройства (Slave) к ведущему (Master)
- 19 вывод — SCK (Serial Clock) — тактовые импульсы, генерируемые ведущим устройством (Master) для синхронизации процесса передачи данных
В первую очередь необходимо из ардуинки сделать программатор, в этом нет ничего сложного, нужно просто загрузить в неё код из готового примера «ArduinoISP».
После его загрузки в плату (кстати я буду использовать Arduino UNO для наглядности, но это не принципиально, можно и другую) в меню Инструменты — >>Программатор необходимо выбрать «Arduino as ISP» .
Дальнейшие действия по подключению МК к Ардуинке описаны в комментариях к коду который мы в неё загрузили, а именно подключаем следующие пины:
- 17 нога микроконтроллера (MOSI) к 11 пину платы Ардуино
- 18 нога микроконтроллера (MISO) к 12 пину
- 19 нога микроконтроллера (SCK) к 13 пину
- 1 нога (RESET) к 10 пину платы Ардуино
- 8 ногу к GND
- 7 ногу к +5V
Дополнительно подключим на нулевой цифровой выход ATmega8 (вторая ножка микросхемы) светодиод через токоограничивающий резистор на 220 Ом, для наглядного подтверждения того, что микроконтроллер работает.
// Put an LED (with resistor) on the following pins:
// 9: Heartbeat — shows the programmer is running
// 8: Error — Lights up if something goes wrong (use red if that makes sense)
// 7: Programming — In communication with the slave
Как видно из описания примера «Arduino ISP» к 7, 8 и 9-му пинам платы Ардуино можно подключить информационные светодиоды (через резисторы) отображающие ход работы программатора, но это по желанию.
Теперь почти всё готово, осталось только сообщить среде программирования, что именно мы собираемся прошивать. Для этого нужно добавить нашу ATmega8 в среду разработки Arduino IDE, тоесть нужно установить так называемое ядро, или как оно называется в самой IDE – плату.
MiniCore – ядро для поддержки микроконтроллеров ATmega328, ATmega168, ATmega88, ATmega48 и ATmega8, для его установки нажимаем Файл —>> Настройки и в открывшемся окне ищем строчку: «Дополнительные ссылки для менеджера плат:» , в это поле необходимо ввести ссылку:
Далее заходим в Инструменты —>> Плата —>> Менеджер плат находим и устанавливаем нужное ядро.
После всех манипуляций в менеджере плат должно появиться следующее:
В качестве платы выбираем нашу ATmega8, параметр «Clock:» устанавливаем «Internal 8 MHz», так МК будет работать от внутреннего генератора.
Все готово! Теперь подключаем плату Ардуино к компьютеру и не забыв выбрать нужный COM порт, выбираем в меню «Инструменты» пункт «Записать загрузчик» .
Теперь МК знает от какого генератора и на какой частоте ему работать, можно загружать в него свои программы. Для примера загрузим классическую мигалку, только поменяем порт вывода на нулевой (вторая нога МК), именно к нему по схеме мы подключили светодиод.
Загружать нужно не кнопкой как обычно, а через меню Скетч —>> Загрузить через программатор , если все сделано правильно, то светодиод начнет мигать.
В Arduino IDE можно прошить ATmega8 и без установки дополнительных плат, выбрав в качестве платы «Arduino NG or older» и в качестве процессора «aTmega8». Но в таком случае не будет возможности выбора от какого генератора (внешнего или внутреннего) и на какой частоте будет работать МК, а работать он будет от внешнего генератора на частоте 16 MGz, и перезаписать его настройки в дальнейшем без подключения кварцевого резонатора к выводам 9 и 10 будет невозможно, будьте внимательны!
Ну и напоследок приведу ссылки на ядра для работы с микроконтроллерами серии ATtiny, устанавливаются они аналогично MiniCore:
- ATTinyCore — поддержка микроконтроллеров ATtiny 441/841, 44/84, 45/85, 461/861, 48/88, 828, 1634, 87, 167. Ссылка для менеджера плат: http://drazzy.com/package_drazzy.com_index.json
- MicroCore — поддержка микроконтроллеров ATtiny13. Ссылка для менеджера плат: https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json
- Какие бывают Arduino
- Как мигнуть светодиодом в Arduino через USB с помощью Питона
- Установка ПО Arduino под Линуксом
- Установка ПО Arduino под MS Windows XP
- Страница ссылок на Arduino на русском
- Набор Матрешка UNO
- Как не переплачивать за Arduino и компоненты к нему
- Прошивка бутлоадера в Arduino
- Команды avrdude чтобы проверить и прошить AVR Mega8 через LPT-порт
- Прошивка bootloader (загрузчика) ATmega 328
- Память EEPROM (ППЗУ) в AVR. Запись и чтение
- EEPROM. Avrdude. Снова про работу с контроллерами. Как считать и записать данные
- Пример работы с EEPROM. Библиотека EEPROM и EEPROM2
- Что делать при ошибке avrdude: ser_open(): can’t open device «/dev/ttyACM0»: Permission denied
- Распиновка платы Arduino UNO (R3)
- Распиновка контроллера Arduino UNO — Atmel 328P-PU (DIP-корпус)
- Как прошить контроллер Atmel/Atmega через Arduino UNO на примере ATmega8
- Схема Arduino UNO Rev3
- Где взять настройки прошивальщика avrdude, которые формирует среда Arduino IDE
- Описание опций прошивальщика avrdude
- Программатор SPI Flash на Arduino своими руками
ATmega8 (Arduino IDE)
Большое кол-во проектов выполненных на платформе Arduino не требовательных к размеру памяти могут быть выполнены на микроконтроллере ATmega8.
Основное отличие ATtmega8 от Atmega328 (Arduino NANO), это размер памяти:
Atmeg328 | Atmega168 | Atmega8 | |
Flash | 32 кб | 16 кб | 8 кб |
ОЗУ | 2 кб | 1 кб | 1 кб |
ПЗУ | 1 кб | 512 б | 512 б |
Каналы ШИМ | 6 | 6 | 3 |
Так же учитывайте что ATmega8 имеет диапазон питающего напряжения от 4.5 до 5.5 В и тактовую до 16 МГц, а ATmega8L имеет диапазон питающего напряжения от 2.7 до 5.5 В и тактовую частоту до 8 МГц.
Для использования ATmega8 в Arduino IDE Вам необходимо собрать следующую схему:
Перед прошивкой ATmega8 необходимо установить поддержку контроллера в Arduino IDE, для этого откройте меню Файл >> Настройки и в пункте Дополнительные ссылки для Менеджера плат вставьте ссылку:
https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
Далее переходим в меню Инструменты >> Плата >> Менеджер плат
В списке менеджера плат выберите пакет: MiniCore by MCUdude
После установки поддержки плат в Arduino IDE появится плата Atmega8
Для прошивки ATmega8 нам понадобится программатор, в качестве программатора я буду использовать Arduino UNO.
Подключите плату Arduino UNO к USB порту, в Arduino IDE выберите плату Arduino UNO и примерах откройте скетч Arduino ISP.
Залейте скетч в плату, далее подключите Atmega8 к Arduino UNU согласно таблице:
Arduino UNO | ATmega8 |
D10 | RES (1) |
D11 | MOSI (17) |
D12 | MISO (18) |
D13 | SCK (19) |
+5V | VCC (7) |
GND | GND (8) |
Далее выберите плату Atmega8 и укажите частоту кварцевого резонатора (в моем случае 4 МГц)
В пункте Программатор выберите Arduino as ISP. Скопируйте и вставьте в Arduino IDE следующий скетч (Blink):
void setup() pinMode(LED_BUILTIN, OUTPUT); > void loop() digitalWrite(LED_BUILTIN, HIGH); delay(1000); digitalWrite(LED_BUILTIN, LOW); delay(1000); >
Далее в пункте меню Инструменты выберите — Загрузить через программатор.
После загрузки скетча должен начать мигать светодиод подключенный к пину 19 ATmega8 (PB5).
Очень удобно для прошивки микроконтроллера использовать переходник USB — TTL используя для этого пины 2 и 3 (TXD и RXD) . Фактически Вы будете загружать скетчи как в плату Arduino.
Для использования USB-TTL Вам нужно установить загрузчик, для его установки в Arduino IDE достаточно выбрать пункт Инструменты > Записать загрузчик.
После чего Atmega8 можно отключить от Arduino UNO который использовали как программатор и подключить USB-TTL переходник согласно таблице:
ATmega8 | USB to TTL |
VCC (7) | +5V |
GND (8) | GND |
TDX (3) | RDX |
RDX (2) | TDX |
Далее выберите программатор — AVRISP mkll, после нажмите Загрузка и после сообщения «Компиляция» нажмите на кнопку RESET.
ATmega128 + Arduino IDE
ATmega128, ATmega128L представляют собой 8-разрядные AVR-микроконтроллеры с внутрисистемно программируемой флэш-памятью емкостью 128 кбайт. За счет выполнения большинства инструкций за один машинный цикл ATmega128 достигает производительности 1 млн. операций в секунду/МГц, что позволяет проектировщикам систем оптимизировать соотношение энергопотребления и быстродействия. Отличительные особенности: Высокопроизводительный, маломощный 8-разрядный AVR-микроконтроллер Развитая.
ATmega8515 (Arduino IDE)
ATmega8515 – экономичный 8-разрядный микроконтроллер, основанный на усиленной AVR RISC архитектуре. Выполняя команды за один цикл, ATmega8515 достигают производительности 1 MIPS при частоте задающего генератора 1 МГц, что позволяет разработчику оптимизировать отношение потребления к производительности. AVR ядро объединяет богатую систему команд и 32 рабочих регистра общего назначения. Все 32 регистра непосредственно связаны с арифметико-логическим устройством (АЛУ), что позволяет получить.
ATmega16 + Arduino IDE
ATmega16, ATmega16L представляют собой 8-разрядные AVR-микроконтроллеры с внутрисистемно программируемой флэш-памятью емкостью 16 кбайт. Отличительные особенности: 8-разрядный высокопроизводительный AVR микроконтроллер с малым потреблением Прогрессивная RISC архитектура 130 высокопроизводительных команд, большинство команд выполняется за один тактовый цикл 32 8-разрядных рабочих регистра общего назначения Полностью статическая работа Производительность приближается к 16.
ATmega64 + Arduino IDE
ATmega64 представляют собой 8-разрядные AVR-микроконтроллеры с внутрисистемно программируемой флэш-памятью емкостью 64 кбайт. За счет выполнения большинства инструкций за один машинный цикл ATmega64 достигает производительности 1 млн. операций в секунду/МГц, что позволяет проектировщикам систем оптимизировать соотношение энергопотребления и быстродействия. Отличительные особенности: 8-разрядный высокопроизводительный AVR микроконтроллер с малым потреблением Прогрессивная RISC.
ATmega8535 + Arduino IDE
ATmega8535/L является КМОП 8- битным микроконтроллером, построенным на расширенной AVR RISC архитектуре. Используя команды исполняемые за один машинный такт, контроллер достигает производительности в 1 MIPS на рабочей частоте 1 МГц, что позволяет разработчику эффективно оптимизировать потребление энергии за счёт выбора оптимальной производительности. Отличительные особенности: Высокая производительность при малом потреблении Развитая RISC архитектура 130- команд, большинство.