MicroDuino своими руками
2015-10-1 23:49 AVR
Загорелся однажды изучить микроконтроллеры семейства AVR (Atmega) и их программирование. Решил начать с популярного и простого решения, с макетных плат Arduino. Но покупать Arduino не хотелось из принципа. Решил собрать сам! Некоторое время выбирал, какую же версию собрать и выбрал Microduino. Супер маленький и всё что нужно есть.
С официального сайта (www.microduino.cc) скачал фотки платок, нашел даже фотки разводки дорожек с двух сторон и схемы. Дело осталось за малым: развести платы по схемам, изготовить и начать учиться.
Плата ядра microduino состоит из atmega328, кварцевого резонатора, фильтрующих конденсаторов, светодиодов, пары резисторов и цанговых коннекторов. Но Arduino так устроено, что прошивку нужно как-то загружать из среды разработки. Для этого понадобираться ещё одна плата из серии microduino. На дополнительной плате как раз и будет собран usb com port. Имея на руках 2 этих платки, можно будет начинать разрабатывать программы и собирать устройства на макетке.
Схемотехника достаточно простая, единственное, что нужно это навык изготовления двух сторонних плат. У меня получилось достаточно хорошо. Но я не сторонник следовать правилам. Atmega328 у меня не было в наличии и поэтому я собрал microduino на Atmega8, причем кварцевого резонатора у меня тоже не было в нужном корпусе, поэтому на первое время я использовал microduino с внутренним резонатором. Изменять схему не пришлось, т.к. распиновка Atmega328 и Atmega8 практически одинаковая.
Платы разведены в формате Sprint Layout 6.0 и скачать их можно ниже:
Для прошивки ядра microduino я развел платку адаптер microduino -> ICSP. Он будет нужен для прошивки загрузчика arduino в Atmega. Без загрузчика нельзя будет загружать прошивки из среды Arduino. Прошиваю с помощью программатора Willem PCB 4.5. Но можно использовать простейший программатор - LPT + 5 проводков.
Если развести сигнал D10 соединить с ICSP Reset и отключить основной сигнал Reset, то можно будет прошивать другие Atmega используя скетч Arduino ISP.
Печатная плата также разведена в формате Sprint Layout 6.0:
После сборки microduino настало время проверить устройство в работе, но не тут то было. Поскольку я использую не Atmega 328, и без внешнего кварцевого резонатора, нужно было искать загрузчик arduino именно для своей конфигурации microduino.
Среда разработки Arduino устанавливается с набором прошивок загрузчиков для разных конфигураций Arduino. Нужную мне я нашел в папке
Arduino\hardware\arduino\bootloaders\atmega8\
Нужное имя файла в этой папке:
ATmegaBOOT-prod-firmware-2009-11-07.hex
Поскольку я использую microduino без внешнего кварцевого резонатора, то при прошивке конфигурацией фьюзов указываем это нашей Atmega8:
fuse low bits: 0xE4
fuse high bits: 0xCA
Для прошивки всего этого дела я пользовался программатором Willem PCB 4.5 + адаптер AVR ICSP, о которых рассказывал тут.
Дальше нужно добавить конфигурацию microduino в среду Arduino. Для этого нужно добавить в файл Arduino\hardware\arduino\boards.txt следующий код:
############################################################## microduino_atmega8.name=Microduino ATmega8 (8 MHz internal OSC) microduino_atmega8.upload.protocol=arduino microduino_atmega8.upload.maximum_size=7168 microduino_atmega8.upload.speed=9600 microduino_atmega8.bootloader.low_fuses=0xc4 microduino_atmega8.bootloader.high_fuses=0xca microduino_atmega8.bootloader.path=atmega8 microduino_atmega8.bootloader.file=ATmegaBOOT-prod-firmware-2009-11-07.hex microduino_atmega8.bootloader.unlock_bits=0x3F microduino_atmega8.bootloader.lock_bits=0x0F microduino_atmega8.build.mcu=atmega8 microduino_atmega8.build.f_cpu=8000000L microduino_atmega8.build.core=arduino microduino_atmega8.build.variant=standard
Чтобы долго не искать выкладываю прошивку, которую прошивал я:
После поиска и чтения статей в интернете, нашел опциональный загрузчик работающий на скорости 115200 кбит/с, в отличии от 9600 кбит/с для описанного выше варианта. Вариант optiboot загрузчика arduino работает на Atmega8 с встроенным резонатором и поддерживает скорости подключения до 115200 кбит/с, кроме этого он обладает меньшим объемом, для Atmega8 на 25% меньше оригинального. Optiboot загрузчик запускается быстрее, при старте или сбросе Atmega.
При прошивке загрузчика нужно использовать следующие фьюз биты для конфигурации Atmega8 и внутренний резонатор:
fuse low bits: 0xA4
fuse high bits: 0xCC
Обозначим его в среде разработке Arduino в файле Arduino\hardware\arduino\boards.txt:
############################################################## microduino_atmega8o.name=Microduino Optiboot ATmega8 (8 MHz internal OSC) 115200 microduino_atmega8o.upload.protocol=arduino microduino_atmega8o.upload.maximum_size=7680 microduino_atmega8o.upload.speed=115200 microduino_atmega8o.bootloader.low_fuses=0xa4 microduino_atmega8o.bootloader.high_fuses=0xcc microduino_atmega8o.bootloader.path=atmega8 microduino_atmega8o.bootloader.file=optiboot_atmega8_8_115200_a4_cc.hex microduino_atmega8o.bootloader.unlock_bits=0x3F microduino_atmega8o.bootloader.lock_bits=0x0F microduino_atmega8o.build.mcu=atmega8 microduino_atmega8o.build.f_cpu=8000000L microduino_atmega8o.build.core=arduino microduino_atmega8o.build.variant=standard
Прошивка Optiboot для Atmega8 + 8Mhz внутренний резонатор:
После первой же прошивки небольшого кода я понял, что так дело не пойдет. Код для вывода hello world в com порт занял больше половины объема внутренней памяти Atmega8. Я принял решение перейти в среду разработки AVR Studio 6 и программировать на языке ассемблера для Atmega. Для прошивки кода напрямую из среды AVR Studio сделал небольшой лайфхак. Добавил кнопку для прошивки Microduino.
Для этого заходим в меню Tools -> External Tools...
Заполняем следующие поля:
Тitle: Arduino Upload Command: [путь к файлу]\avrdude.exe Arguments: -C"[путь к файлу]\avrdude.conf" -patmega8 -carduino -P\\.\COM4 -b115200 -Uflash:w:"$(ProjectDir)Debug\$(ItemFileName).hex":i
добавляем External Command 1 ( у меня это единственная команда поэтому номер 1)
В результате на панели инструментов у вас должна появиться кнопка Arduino Upload.
После сборки и настройки можно приступить к разработке устройств на микросхемах семейства Atmega. Желаю удачи!