Самодельный ардуино на atmega8. Бюджетный USB Arduino своими руками
Для работы с микроконтроллером ATmega8 или с Arduino устройством на ATmega8 в среде разработки Arduino программу Arduino необходимо настроить. Нужно добавить в файл hardware/arduino/boards.txt параметры поддерживаемых устройств на микроконтроллере ATmega8.
Возможно, будет необходимо добавить файлы bootloader (загрузчик) в папку hardware/arduino/bootloaders/optiboot.
Микроконтроллер ATmega8 может работать на частоте 0-16МГц при напряжении ~5В, а ATmega8L на частоте 0-8МГц и ATmega8A на частоте 0-16МГц в широких пределах напряжения питания. Это по паспорту, а практически, при напряжении 5В, все микроконтроллеры серии ATmega8 могут работать на частоте 16МГц с внешним кварцевым резонатором и на частотах 8, 4, 2, 1МГц с внутренним генератором.
Существует вариант платы Arduino на микроконтроллере ATmega8, это Arduino NG. Среда разработки Arduino (Arduino IDE) готова к работе с микроконтроллером ATmega8, но только с одним устройством - это плата Arduino NG с микроконтроллером ATmega8 на частоте 16МГц с внешним кварцевым резонатором. Так обстоят дела в Arduino v. 1.0.6. Кроме того, для Arduino NG предлагается не самый оптимальный и главное не удобный bootloader.
Для того, чтобы была возможность программировать микроконтроллеры ATmega8 работающие на разных частотах с кварцевым резонатором и без него необходимо внести изменения в файл hardware/arduino/boards.txt Например, можно добавить в него следующие секции:
# http://optiboot.googlecode.com # http://homes-smart.ru/index.php/oborudovanie/arduino/avr-zagruzchik ############################################################## atmega8o.name=ATmega8 (optiboot 16MHz ext) atmega8o.upload.protocol=arduino atmega8o.upload.maximum_size=7680 atmega8o.upload.speed=115200 atmega8o.bootloader.low_fuses=0xbf atmega8o.bootloader.high_fuses=0xdc atmega8o.bootloader.path=optiboot50 atmega8o.bootloader.file=optiboot_atmega8.hex atmega8o.bootloader.unlock_bits=0x3F atmega8o.bootloader.lock_bits=0x0F atmega8o.build.mcu=atmega8 atmega8o.build.f_cpu=16000000L atmega8o.build.core=arduino:arduino atmega8o.build.variant=arduino:standard ############################################################## a8_8MHz.name=ATmega8 (optiboot 8 MHz int) a8_8MHz.upload.protocol=arduino a8_8MHz.upload.maximum_size=7680 a8_8MHz.upload.speed=115200 a8_8MHz.bootloader.low_fuses=0xa4 a8_8MHz.bootloader.high_fuses=0xdc a8_8MHz.bootloader.path=optiboot a8_8MHz.bootloader.file=a8_8MHz_a4_dc.hex a8_8MHz.build.mcu=atmega8 a8_8MHz.build.f_cpu=8000000L a8_8MHz.build.core=arduino a8_8MHz.build.variant=standard ############################################################## a8_1MHz.name=ATmega8 (optiboot 1 MHz int) a8_1MHz.upload.protocol=arduino a8_1MHz.upload.maximum_size=7680 a8_1MHz.upload.speed=9600 a8_1MHz.bootloader.low_fuses=0xa1 a8_1MHz.bootloader.high_fuses=0xdc a8_1MHz.bootloader.path=optiboot a8_1MHz.bootloader.file=a8_1MHz_a1_dc.hex a8_1MHz.build.mcu=atmega8 a8_1MHz.build.f_cpu=1000000L a8_1MHz.build.core=arduino a8_1MHz.build.variant=standard ############################################################## a8noboot_8MHz.name=ATmega8 (no boot 8 MHz int) a8noboot_8MHz.upload.maximum_size=8192 a8noboot_8MHz.bootloader.low_fuses=0xa4 a8noboot_8MHz.bootloader.high_fuses=0xdc a8noboot_8MHz.build.mcu=atmega8 a8noboot_8MHz.build.f_cpu=8000000L a8noboot_8MHz.build.core=arduino a8noboot_8MHz.build.variant=standard ##############################################################
Теперь в программе Arduino в меню Сервис / Плата появятся следующие устройства:
- ATmega8 (optiboot 16MHz ext)
- ATmega8 (optiboot 8 MHz int)
- ATmega8 (optiboot 1 MHz int)
- ATmega8 (no boot 8 MHz int)
Первые три устройства на микроконтроллере ATmega8 содержат bootloader, являются Arduino совместимыми и в них непосредственно можно загружать скетчи (программы) из среды разработки Arduino. Четвертое устройство не содержит bootloader, это может быть отдельная микросхема ATmega8. В ATmega8 (no boot 8 MHz int) скетчи из программы Arduino можно загружать через программатор, в том числе и через программатор на базе платы Arduino.
ATmega8 (optiboot 16MHz ext) работает с внешним кварцевым резонатором, остальные устройства с внутренним генератором.
Параметры в файле hardware/arduino/boards.txt определяют fuse биты, путь к файлу загрузчика (bootloader), тип микроконтроллера и его частоту. Fuse биты записываются в микроконтроллер (с загрузчиком или без него) когда вы выбираете пункт меню Сервис / Записать загрузчик . Fuse биты определяют на какой частоте будет работать Ваш микроконтроллер и другие важные параметры, в том числе и такие, от которых зависит его работоспособность, перепрограммируемость и т.д.
Fuse биты НЕ записываются в микроконтроллер когда вы заливаете скетчи. Если в меню Сервис / Плата будет выбрано не подходящая платформа то:
- При загрузке скетчей
- Не подходящая частота - приводит к изменению скорости работы программ
- Не подходящий процессор - приводит к неработоспособности программ
- При записи загрузчика
- Не подходящая частота - может привести к неработоспособности микроконтроллера в данной системе
- Не подходящий процессор (fuses) - к блокировке микроконтроллера
Внимание , Ваши не корректные действия могут вывести из строя микроконтроллер для восстановления которого потребуется программатор.
Bootloader для микроконтроллера ATmega8.
Optiboot bootloaders для различных рабочих частот микроконтроллера можно скачать с сайта Конструктор загрузчика .
Bootloaders Optiboot - это не зависимая свободная разработка загрузчиков, признанная разработчиками Arduino. Optiboot предназначен для использования в разных вариантах Arduino и для множества микроконтроллеров Atmel. Основные отличия загрузчика Optiboot от конкурентов - это до четырех раз уменьшенный размер кода, сокращение бесполезных задержек в работе микроконтроллера, высокая скорость загрузки скетчей с компьютера.
Размещайте файлы bootloaders в программе Arduino в соответствии с тем, что написано в файле hardware/arduino/boards.txt. Например, для устройства ATmega8 (optiboot 16MHz ext) файл загрузчика необходимо поместить в папку hardware/arduino/bootloaders/optiboot50 и имя файла должно быть optiboot_atmega8.hex
Сразу признаюсь, что заголовок призван привлекать внимание — конечно, за $3 полноценную Arduino-плату не собрать, но минимальное решение вполне можно.
Платы проекта Arduino идеальны для макетирования и сборки прототипов, а для законченных устройств хотелось найти что-то более дешевое и доступное. В этой заметке будет описана минимальная Arduino-совместимая конструкция.
В качестве отправной точки использовались статьи Minimal Arduino with ATmega8 (внимание : в этой статье есть ошибка, значения fuse-битов неверны) и страница об ArduinoISP из официальной wiki . К сожалению, ни одна из этих статей в своё время не ответила на все мои вопросы, кроме того появилось желание немного «подкрутить» стандартный bootloader, но об этом ниже.
Поддержка новых плат и IDE
(дополнение от 01.05.2012
, файлы исправлены 27.05.2012
)
Действия, описанные в статье, проверялись на Arduino IDE 0023
и клоне Arduino Duemilanove
. С момента написания статьи были выпущены новые платы и обновлена среда. Судя по комментариям пользователей к этой записи, всё работало если в качестве платы-программатора использовались Arduino Uno
и Arduino Mega 2560
. Для новой версии среды Arduino IDE 1.0.1
я подготовил обновлённый архив (доступен в конце статьи), обновление необходимо из-за незначительных изменений в формате файла boards.txt
Минимальная Arduino-конструкция за $3.5
(дополнение от 02.05.2012)
Этот способ является альтернативным описанному в статье ниже!
В комплекте Arduino IDE 1.0
поставляется новый бутлоадер Optiboot , который занимает всего 512 байт (бутлоадер, описанный в этой статье в два раза больше — 1 Кб) и работает на высоком бодрейте — 115200 (в статье ниже — 38400). Для работы этого бутлоадера дополнительно к описанным в статье компонентам нужен внешний кварц на 16МГц и два конденсатора на 22пФ его обвязки (этим объясняется увеличение стоимости на $0,5:)). В комплекте с Arduino IDE 1.0 есть уже скомпилированная версия для ATmega8, достаточно только добавить в boards.txt
следующее
и прошить бутлоадер:
##############################################################
atmega8optiboot.name=ATmega8 (optiboot, 16Mhz XTAL)
atmega8optiboot.upload.protocol=arduino
atmega8optiboot.upload.maximum_size=7680
atmega8optiboot.upload.speed=115200
atmega8optiboot.bootloader.low_fuses=0xBF
atmega8optiboot.bootloader.high_fuses=0xCC
atmega8optiboot.bootloader.path=optiboot
atmega8optiboot.bootloader.file=optiboot_atmega8.hex
atmega8optiboot.bootloader.unlock_bits=0x3F
atmega8optiboot.bootloader.lock_bits=0x0F
atmega8optiboot.build.mcu=atmega8
atmega8optiboot.build.f_cpu=16000000L
atmega8optiboot.build.core=arduino:arduino
atmega8optiboot.build.variant=arduino:standard
В версии файлов к статье от 14.07.2012 настройки для этого способа добавлены в состав архива
, поэтому править главный boards.txt
больше нет необходимости.
Что будет нужно:
- Arduino-совместимая плата (я использовал китайский клон Arduino Duemilanove , на момент написания заметки новая Arduino Uno не поддерживается скетчем ArduinoISP. Обновление : по сообщениям пользователей ArduinoISP из Arduino 023 поддерживает Arduino Uno). Плата будет использоваться в качестве программатора для прошивки bootloader"а и в дальнейшем как USB-TTL конвертер;
- Arduino IDE версии 0022 (последняя на момент написаний статьи);
- Микроконтроллер в корпусе DIP-28 ATmega8 или ATmega8A ( , версия с буквой «A» имеет более низкое энергопотребление). Для тактирования будет использоваться внутренний RC-осциллятор с максимальнй для него частотой 8Mhz.
- Провода для соединения всего этого на время прошивки bootloader"a (я использовал беспаечную макетную плату и набор зачищенных проводов к ней)
- 1 светодиод и токоограничительный резистор на 220-500 Ом (подключается к пину №19 (PB5), это тот же выход Digital pin 13, к которому на большинстве Arduino-совместимых плат подключен светодиод L );
- 1 резистор на 10 кОм (подключается от RESET"а микроконтроллера к +5V для предотвращения произвольного сброса);
- 1 конденсатор 100 нФ (подключается между плюсом и минусом питания для фильтрации помех).
Подготовка IDEВыбор именно ATmega8(A) объясняется очень просто: в местных магазинах радиотоваров не было никаких других контроллеров, поддерживаемых средой Arduino. С одной стороны, это сильно ограничило меня в объёме кода, с другой — именно благодаря тому, что код моего проекта на Arduino не поместился в память контроллера, я был вынужден разобраться с WinAVR и переписать проект под AVR-GCC. Времени на вспоминание C и чтение datasheet"ов ушло довольно много, но код получился раз в пять компактнее и, пожалуй, к программированию в среде Arduino я врядли вернусь:).
Скачайте архив с настройками и bootloader"ом и разархивировать его в папку Sketchbook (путь можно посмотреть в пункте меню File -> Preferences Arduino IDE). После перезапуска Arduino IDE в меню Tools -> Board должен появиться новый пункт .
В архиве находится следующее:
- Модифицированный bootloader для ATmega8 от проекта Arduino. Оригинальный исходный код можно найти в папке hardware\arduino\bootloaders\atmega8 . Этот bootloader занимает всего 1 Кб (512 слов) в памяти контроллера, в отличие от более нового hardware\arduino\bootloaders\atmega , который используется для плат на основе ATmega168 и ATmega328. Отличия от оригинальной версии заключаются в следующем: уменьшено время ожидания скетча при сбросе микроконтроллера, скорость загрузки поднята до 38400;
- Файл boards.txt , в котором описана конфигурация нового типа платы (с более высокой скоростью загрузки и fuse-битами для работы от внутреннего RC-осциллятора на частоте 8Mhz).
В Arduino нужно загрузить скетч ArduinoISP (File -> Examples -> ArduinoISP ), после этого Arduino может играть роль ISP-программатора практически для любых AVR чипов (я проверял на ATmega8 и ATtiny45).
Подключение «программатора» к контроллеру
Схема продублирована в тексте скетча ArduinoISP:
// this sketch turns the Arduino into a AVRISP
// using the following pins:
// 10: slave reset
// 11: MOSI
// 12: MISO
// 13: SCK
Обновление от 30.10.2011:
Для Arduino Mega назначение выводов другое:
// 50 (MISO)
// 51 (MOSI)
// 52 (SCK)
// 53 (slave reset)
Дополнительно можно подключить светодиоды, которые будут перемигиваться при прошивке (их наличие или отсутствие на функциональность не влияет):
// 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 использует для компиляции скетчей avr-gcc , штатной утилитой для прошивки в котором является программа avrdude (расположен в этой папке: \hardware\tools\avr\bin\ ). Прежде чем предпринимать что-либо дальше необходимо проверить, правильно ли мы подключили контроллер с помощью следующей команды:
avrdude -v -patmega8 -cstk500v1 -PCOM10 -b19200
Назначение параметров:
- -v — выводить больше информации
- -patmega8 — тип контроллера (для ATmega8A нужно всё равно указывать atmega8)
- -cstk500v1 — тип программатора (ArduinoISP эмулирует STK500)
- -PCOM10 — номер COM-порта (можно посмотреть в меню Tools -> Serial Port в Arduino IDE)
- -b19200 — скорость обмена, скетч ArduinoISP работат на этой скорости
AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.05s avrdude: Device signature = 0x1e9307 avrdude: safemode: lfuse reads as E1 avrdude: safemode: hfuse reads as D9 avrdude: safemode: lfuse reads as E1 avrdude: safemode: hfuse reads as D9 avrdude: safemode: Fuses OK avrdude done. Thank you.
Важно! Если всё подключено правильно, а всё равно не работает, возможно, проблема в версии avrdude . На одной из моих тестовых плат возникла следующая ситуация: avrdude из ArduinoIDE плату-«программатор» с ArduinoISP не видит, а avrdude из WinAVR работает отлично. Решение этого непонятного бага довольно простое — на время прошивки bootloader"a заменить файл \hardware\tools\avr\bin\avrdude.exe на более новую версию из WinAVR. Bootloader может прошиться не с первого раза, а со второго — жалоб о таком поведении на форумах тоже хватает. После прошивки bootloader"а можно восстановить оригинальную версию avrdude .
Прошивка bootloader"a
Самая простая часть. Нужно запустить Arduino IDE, выбрать в пункте меню Tools -> Board следующую плату: ATmega8(A) (8MHz int. RC osc, short bootloader delay, 38400 baud rate) . Здесь указывается целевая плата, поэтому нужно выбрать именно этот пункт, а не модель Arduino-совместимой-платы, которая работает ISP-программатором.
После этого нужно запустить процесс прошивки bootloader"а командой Tools -> Burn Bootloader -> w/ Arduino as ISP . Процесс прошивки занимает 1–2 минуты.
Что же получилось в итоге
После прошивки bootloader"а и установки fuse-битов новая ATmega8A будет работать от встроенного RC-осциллятора на частоте 8Mhz. Программы в флеш-памяти контроллера ещё нет, поэтому bootloader будет запускаться снова и снова, о чём будет свидетельствовать постоянное помигивание светодиода L.
Bootloader ждет команд по UART около половины секунды после сброса микроконтроллера. Для заливки прошивки в контроллер можно использовать:
- USB-TTL конвертер (его можно собрать или купить);
- Arduino-совместимая плата со снятым контроллером.
- использование bootloader"a обеспечивает совместимость и с Arduino IDE, и с AVR Studio;
- меньше проводов для подключения (вместо линий ISP только UART). При этом UART часто используется для отладки, поэтому его все равно приходится подключать.
EGYDuino – это клон Arduino, который можно изготовить самостоятельно, на односторонней печатной плате. Это простое и дешевое решение, которое можно изготовить в домашних условиях, причем на 100% совместимое с Arduino.
Описание
Микроконтроллер ATmega8 отвечает за последовательное подключение по USB. Он может быть запрограммирован с помощью . AVR-CDC создает виртуальный СОМ-порт на ПК после подключения устройства и устанавливает соответствующий драйвер. Микроконтроллер ATmega 8,168 следует запрограммировать с помощью загрузчика ArduinoNG boatloader . Данную операцию можно выполнить с использованием еще одной платы Arduino (выберите ISP программатор) и среды разработки Arduino IDE, или отдельного программатора (USB, последовательного или параллельного), например, USBasp с надлежащим программным обеспечением. Также вы можете использовать загрузчик Arduino Duemilanove для ATmega 168 или 328.
Плата имеет следующие характеристики:
Использует микроконтроллер ATmega8 как интерфейсную ИС
- USB-соединение с ПК
- Стандартная кнопка RESET
- 100% совместимость по выводам с Arduino
- Регулятор 5В
- Выход 3.3В
- Совместимый размер и конструкция
- Все компоненты вставляются в сквозные монтажные отверстия на плате
- USB или DC выключатель питания
- Светодиод для вывода PIN13 с перемычкой
- Светодиод питания
- ICSP-разъем
- Легко изготовляемая
- Микроконтроллеры ATmega8,168,328 с использованием загрузчика arduinoNG
- Стандартное гнездо DC питания
Плата EGYDuino может запитываться через USB-коннектор, или стабилизатор напряжения внешнего адаптера.
Схема
Полная схема устройства показана ниже
Печатная плата
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
IC1 | Микроконтроллер | ATmega8-P | 1 | В блокнот | ||
IC2 | МК AVR 8-бит | ATmega328 | 1 | В блокнот | ||
IC3 | Линейный регулятор | LM7805 | 1 | В блокнот | ||
D1 | Выпрямительный диод | 1N4001 | 1 | В блокнот | ||
D2, D3 | Стабилитрон | 3.6 В | 2 | В блокнот | ||
С1, С2, С5, С6 | Конденсатор | 22 пФ | 4 | В блокнот | ||
С3 | Конденсатор | 1000 пФ | 1 | В блокнот | ||
С4, С7, С10 | Конденсатор | 0.1 мкФ | 3 | В блокнот | ||
С8, С9 | Электролитический конденсатор | 100 мкФ | 2 | В блокнот | ||
R1, R2 | Резистор | 68 Ом | 2 | В блокнот | ||
R3 | Резистор | 1.5 кОм | 1 | В блокнот | ||
R4, R6 | Резистор | 10 кОм | 2 | В блокнот | ||
R5 | Резистор | 1 кОм | 1 | В блокнот | ||
R7 | Резистор | 470 Ом | 1 | В блокнот | ||
Q1, Q2 | Кварцевый резонатор | 16 МГц | 2 | В блокнот | ||
LED1 | Светодиод | Красный | 1 |
Arduino своими руками
Ну вот и настало время освоить платформу для duino самостоятельно. Для начала разберемся, что нам может потребоваться. Для начал было бы не плохо определиться, на базе чего мы будем делать наш экземпляр отладочной платы. Чтобы упростить изначальную задачу, я предлагаю использовать USB-(UART)TTL адаптер для загрузки скетчей. Это упростит нам жизнь в разы. лично я буду использовать дешевенький адаптер, заказанный в ныне несуществующем интернет-магазине, но все также рабочий.
При построении нашей Duino будем стараться использовать минимальное количество элементов. По мере освоения будем добавлять необходимые компоненты.
Для ознакомления найдем схемы различных платформ на официальном сайте:
На мой взгляд схемы хорошие, но неплохо было бы посмотреть уже проверенные реализации "самоделок", мне очень понравились 3 варианта:
Соорудим минимальную обвязку нашему устройству.На первом этапе деталей необходимо минимум:
Собственно сам МК atmega328P (в моем случае, хотя может использоваться и 168 и 8)
Кварц 16 MHz
Конденсатор 22pF x 2шт.
Резистор 10k
Кнопка сброса (любая, кстати не обязательный элемент)
Вот в принципе и все, что минимально необходимо для работы микроконтроллера. Я предлагаю все наши работы иллюстрировать и проектировать в очень не плохой программке Fritzing:
Ну вот, давайте разберемся, зачем нужны данные элементы. Кнопка позволяет перезапустить микроконтроллер, резистор R1 является подтягивающим резистором для кнопки. Кварц, C1 и C2 являются внешним тактовым генератором для контроллера.
Это необходимая и достаточная обвязка, но лично я настоятельно Вам рекомендую установить керамический конденсатор 100nF параллельно основному питанию микросхемы.
Ну вот и готова наша минимальная Duino. Для того, чтобы удобнее было использовать данный отладочный инструмент, я предлагаю наклеивать на корпус подсказку с распиновкой "атмеги". Мой вариант реализован в Corel Draw:
Для начала соберем схему нашей Duino на беспаечной макетной плате, вот что получилось у меня:
Для загрузки скетчей мы будем использовать USB - TTL адаптер, на фото мой уже изрядно потрепавшийся адаптер на базе микросхемы CP2102:
Но перед загрузкой скетчей необходимо залить бутлоадер в МК, иначе, он "не поймет", что мы от него хотим. Есть масса способов, но мы будем использовать простейший. При помощи замечательного программатора USBasp:
Для начала подключим нашу Duino к программатору, это очень просто, достаточно соединить контакты программатора с Duino:
GND - масса (22 нога)
MOSI - MOSI (d11)
5V - питание "+" (7 нога)
Затем Arduino IDE -> Сервис -> "Записать загрузчик":
В процессе записи загрузчика придется подождать около 2 минут. После этого нам могут выпасть разнообразные "warning", типа "can not set SCK period" - не пугаемся и идем дальше.
Ну чтож, вот мы и готовы записать тестовый скетч "Blink" в наш новоиспеченный Duino, но есть один момент, и на нем я хотел бы остановиться. Как мы уже говорили для записи скетчей используется последовательный порт, но в "обычной" жизни МК это цифровые порты 0 и 1. Все очень просто, мы уже залили бутлоадер, он инициализирует запись новой прошивки при включении в течении нескольких секунд, после этого Duino начинает выполнять программу, которая записана у нее в памяти.
Чтобы перевести Duino в режим "приема", необходимо перезагрузить МК, для этого мы сделали специальную кнопку, но нажать ее нужно строго в определенный момент, это совсем не подходит для нас. К счастью на переходниках есть специальный вывод "RST", который достаточно подключить к 1 ноге МК, чтобы автоматически перезагружать Duino перед загрузкой скетча. Подключение очень простое, (переходник - Duino):
GND - масса (22 нога)
RXD - подключить к TXD (3 нога)
TXD - подключить к КXD (2 нога)
5V - питание "+" (7 нога)
Как Вы заметили контакты приема/передачи подключаются перекрестно. И все бы хорошо, но есть одно "но": существует огромное множество переходников, а для автоматической перезагрузки МК необходимо внедрить конденсатор на 100pF в разрыв цепи RST - перезагрузка (1 нога). В некоторых адаптерах он есть, а в некоторых - увы нет. Тут нужно только проверять, в моем экземпляре встроенного конденсатора не оказалось. В итоге схема немного "усложнилась":
Ну что же, теперь можно загрузить скетч в памяти Duino и попробовать провести несколько экспериментов =) (на фото добавлены светодиоды - индикаторы загрузки скетча):
На этот раз я поведаю о том, как сделать Ардуино своими руками, да еще и без паяльника. Схема этого простого Ардуино-клона называется Shrimp . Самодельный Shrimp полностью совместим с Arduino IDE, так что можно легко запускать на нем любые скетчи. Сразу следует отметить, что для создания Shrimp с нуля потребуется рабочая плата Ардуино. Она необходима для установки загрузчика на пустой микроконтроллер. Если под рукой нет Ардуино, то можно приобрести уже прошитый микроконтроллер и сразу прыгнуть к разделу 2. Для создания Shrimp нам потребуется:
- микроконтроллер ATMEGA328P-PU;
- резистор 10 кОм;
- конденсатор 10-100 мкФ, электролитический;
- конденсатор 22 пФ, керамический — 2 шт;
- конденсатор 100 нФ, керамический — 4 шт;
- кнопка тактовая;
- кварц 16 МГц;
- макетная плата;
- набор перемычек для макетной платы;
- USB — UART конвертер на основе FT232R, CP2102 или CH340.
1. Копирование загрузчика на чистый микроконтроллер
Обычно, чтобы записать программу в микроконтроллер требуется использовать отдельное устройство — программатор. Ардуино же хороша тем, что программатор ей не нужен. Вместо него, используется особая микропрограмма, называемая загрузчиком (bootloader). Этот загрузчик умеет принимать программы из вне и записывать их во флеш-память микроконтроллера. Так вот, загрузчик записывается в микроконтроллер на заводе. И чтобы заставить наш Shrimp работать, мы должны повторить эту процедуру. Вот здесь-то нам и потребуется другая плата Ардуино, о которой упоминалось в самом начале. Процедура установки загрузчика состоит из трёх шагов. Шаг 1. Установка на рабочую плату Ардуино специальной программы — OptiLoader Открытая программа OptiLoader позволяет прошить загрузчик optiboot в микроконтроллер нашего Shrimp. На момент написания статьи OptiLoader поддерживал микроконтроллеры: ATmega8, ATmega168, ATmega168P, ATmega168PB, ATmega328, ATmega328P, ATmega328PB. Качаем архив по одной из ссылок:- из официального репозитория: https://github.com/WestfW/OptiLoader
- с нашего сайта:
Шаг 3. Прошивка загрузчика (bootloader) Теперь подключим Ардуино к питанию через USB. Сразу после включения, программа начнет копирование загрузчика на чистый микроконтроллер. При это будут активно мигать светодиоды RX и TX. Как только светодиоды перестанут мигать — копирование окончено. Если что-то пошло не так и светодиоды не мигают, можно открыть COM-монитор. OptiLoader отображает весь процесс копирования загрузчика. В случае успеха, отчет о процедуре будет выглядеть следующим образом.