Системный интегратор. Самодельный Arduino Самодельный ардуино на atmega8

На этот раз я поведаю о том, как сделать Ардуино своими руками, да еще и без паяльника. Схема этого простого Ардуино-клона называется 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
  • с нашего сайта:
Распаковываем архив и открываем скетч в Arduino IDE. Загружаем скетч в рабочую плату Ардуино. Отключаем Ардуино от питания USB. Примечание. Если скачать программу с github, то нужно будет переименовать папку «optiLoader-master» в просто «optiLoader» Шаг 2. Подключение чистого микроконтроллера Соединяем рабочую плату Ардуино с чистым микроконтроллером по приведенной схеме. Здесь все очень просто. Внимательно смотрим на картинку, вставляем проводки, семь раз проверяем. Принципиальная схема Внешний вид макета
Шаг 3. Прошивка загрузчика (bootloader) Теперь подключим Ардуино к питанию через USB. Сразу после включения, программа начнет копирование загрузчика на чистый микроконтроллер. При это будут активно мигать светодиоды RX и TX. Как только светодиоды перестанут мигать — копирование окончено. Если что-то пошло не так и светодиоды не мигают, можно открыть COM-монитор. OptiLoader отображает весь процесс копирования загрузчика. В случае успеха, отчет о процедуре будет выглядеть следующим образом.

2. Загрузка программ на Shrimp

Итак, теперь у нас есть самодельный Arduino с прошитым загрузчиком. Чтобы залить на него какой-нибудь скетч, нам потребуется частично разобрать предыдущую схему, и дополнить её новыми элементами.В частности, добавляется кнопка сброса, и защитные цепи питания.

Сразу признаюсь, что заголовок призван привлекать внимание — конечно, за $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 нФ (подключается между плюсом и минусом питания для фильтрации помех).

Выбор именно ATmega8(A) объясняется очень просто: в местных магазинах радиотоваров не было никаких других контроллеров, поддерживаемых средой Arduino. С одной стороны, это сильно ограничило меня в объёме кода, с другой — именно благодаря тому, что код моего проекта на Arduino не поместился в память контроллера, я был вынужден разобраться с WinAVR и переписать проект под AVR-GCC. Времени на вспоминание C и чтение datasheet"ов ушло довольно много, но код получился раз в пять компактнее и, пожалуй, к программированию в среде Arduino я врядли вернусь:).

Подготовка IDE

Скачайте архив с настройками и 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-совместимой платы в программатор

В 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, если есть ArduinoISP?
  • использование bootloader"a обеспечивает совместимость и с Arduino IDE, и с AVR Studio;
  • меньше проводов для подключения (вместо линий ISP только UART). При этом UART часто используется для отладки, поэтому его все равно приходится подключать.
Скачать

Самую простую схему Arduino вы можете собрать на макетной плате своими руками и без паяльника. Для сборки Arduino вам понадобится микроконтроллер ATmega8A-PU, адаптер USB-UART CP2102, резистор на 10k и кнопка.

Собрать схему можно на макетной плате Breadboard Half (BREADBOARD - 456 HOLES) размером 82х59 мм. При чем, на такой макетной плате, после сборки Arduino, еще останется много места для тестирования своих устройств или для программатора микроконтроллеров. Для большей помехо-защищенности Вашего самодельного Arduino могут понадобиться, но не обязательно, по одному конденсатору на 220мкФ, 2мкФ, 22нФ и 2 резистора по 1k.

Секрет такой простоты и функциональности самодельного Arduino 8 mini (назовем его так, от слова минимальный) кроется в том, что мы будем использовать микроконтроллер ATmega8-PU на частоте 8МГц с внутренним генератором.

Микроконтроллер ATmega8-PU для использования на частоте 8МГц необходимо подготовить. Необходимо выставить фьюзы и загрузить подходящий bootloader (загрузчик). Для наших целей мы воспользовались Конструктором загрузчика . и получили файл загрузчика a8_8MHz_a4_dc.hex и следующие настройки Arduino:

############################################################## a8_8MHz.name=ATmega8-mini (8 MHz internal) 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 ##############################################################

Эту секцию настроек необходимо добавить в файл hardware/arduino/boards.txt.

После того как схема будет собрана -

  • Загрузите в плату Arduino sketch ArduinoISP из примеров: Файл / Примеры / ArduinoISP
  • Установите в меню Сервис / Программатор / Arduino as ISP .
  • Выполните Сервис / Записать загрузчик

После записи загрузчика (bootloader) в ATmega8-PU кварц больше не понадобится, а схему, собранную для программирования можно разобрать и приступить к сборке схемы Arduino 8 mini.

Принципиальная схема Arduino 8 mini предназначенная для сборки своими руками на макетной плате:

Подключите плату Arduino 8 mini к компьютеру и сделайте настройки в программе Arduino:

  • Установите в меню Сервис / Программатор / AVRISP mkII .
  • Установите в меню Сервис / Плата / ATmega8-mini (8 MHz internal)
  • Выберите Сервис / Последовательный порт

Для загрузки скетчей, одновременно нажимайте кнопку загрузить в программе Arduino и кнопку Reset на плате Arduino 8 mini.

Загрузите в свой самодельный Arduino 8 следующий скетч:

Void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1500); digitalWrite(13, LOW); delay(500); }

Если Вы все сделали правильно, светодиод должен мигать.

Как я уже упоминал, резисторы по 1k в линию RX и TX можно не ставить, конденсатор 2мкФ можно заменить проводником и не ставить конденсаторы 220мкФ и 22нФ, под Вашу ответственность.

Development board ATMEGA8 анти-ардуино-одурино

Одной из наиболее деструктивно повлиявших на популяризацию любительской радиоэлектроники вещей стало массовое распространение Ардуино (одурино). Это - готовая плата с запаянным микроконтроллером и минимальной обвязкой. Казалось бы, удобная и полезная штука? Не спешите делать такое заключение.

Человек, не знакомый с радиоэлектроникой, получая такую вещь, начинает ей пользоваться. В этом - один из первых и самых главных минусов: человек не постигает азов и даже не учится паять.

Все соединения для ардуины выполняются проводами с наконечниками. Это удобно, но есть есть и существенный недостаток: схемы, с позволения сказать, с использованием ардуино выглядят уродливо - в виде кучи цветных линий. В этом - второй важный минус: человек не учится схемной грамоте.


Под ардуину есть своя среда разработки с примитивным языком, на котором любители написали кучу непрофессиональных, как они их назвали, скетчей - готовых решений для большинства применений. Пользуясь ими, возникает и третий минус: человек не учится программированию, качественно не улучшает знания и не оттачивает мастерство программирования, будучи запертым в тесных рамках примитивной среды разработки.

На самом деле, минусов у ардуины - куда больше, и перечислять их все нет смысла. Речь здесь о том, что же сделать, чтобы получить плюсы.

Всё очень просто. Если ты хочешь заниматься радиоэлектроникой, научись паять: собери свою девелопмент боард с минимальным, но достаточным обвесом. Возьми достоинства ардуины и не бери недостатки. Используй провода с наконечниками для подключения периферии и не используй ардуинную ide.

В итоге ты получишь все базовые преимущества ардуины практически без минусов. Бонусом к этому ты добавишь множество своих плюсов. Если это лирическое вступление тебя убедило, то продолжим.

Итак, наша девелопмент боард содержит:

  • микроконтроллер ATMEGA8
  • разъёмы для графического и символьного дисплеев на популярных контроллерах SED1520 и HD44780 соответственно
  • каждый вывод микроконтроллера продублирован тремя штырьками
  • имеется разъём внутрисхемного программирования для популярного ICSP (ISP) USBASP
  • линии +5 вольт и масса выведены на несколько штырьков в разных местах платы
  • три разноцветных светодиода и одна кнопка, а также кнопка RESET
  • разъём питания 7,5-20 вольт и LDO стабилизатор
  • для графического дисплея имеется формирователь отрицательного напряжения с регулировкой на ICL7660
  • питание цепей АЦП заведено через фильтр
  • есть кварцевый резонатор, но его использование не обязательно
Как видишь, набор более, чем минимальный. Размер платы - 10*10 см. На большой площади удобнее работать. Кстати, ты можешь перекроить под свои нужды всё, что хочешь. Так, как проект ещё не завершён, то он будет развиваться. Поэтому ты можешь высказать свои замечания и предложения по улучшению.

Писать программы можно на любом языке.

Схема v1.0b:


Нажми для увеличения
Кнопка S1 - RESET, предназначена для сброса микроконтроллера. S2, если она нужна, подключается к любому пину. На плате версии 1.0b подключается с нижней стороны платы двумя проводками к линиям VCC и GND. Джампер JP6 CONTR должен быть замкнут, если для символьного дисплея требуется регулировать контрастность переменным резистором R6. Если же контрастность уже установлена на самом дисплее припаянными резисторами, то джампер размыкается. Джампер JP5 PROG должен быть замкнут во время работы. При программировании он размыкается, при этом питание подаётся только на МК и только от разъёма ICSP. Контрастность графического дисплея регулируется переменным резистором R7.

Печатная плата v1.0b.

Очень давно хотел собрать свою плату Arduino, смотрел на схемы, но так и не решался. Причин было несколько:

  • В моем ноутбуке отсутствует COM порт, потому версия с COM портом мне не подходит
  • USB версия использует очень дорогую микросхему FT232R

Ну вот однажды я наткнулся на статью на Хабре, где использовали конвертер на AVR вместо FT232R (схемы там нет), а так же на Zelectro аналогичную реализацию, но на микроконтроллере Atmega8. Последняя была сделана на базе японского проекта . Именно все это и вдохновило меня сделать собственную реализацию Arduino.

И так, если зайти на сайт AVR-CDC и посмотреть последние изменения (в архиве с прошивкой, на сайте нет информации) то там реализованы линии Rx Tx, а так же DTR, CTS, RTS не только на относительно дорогой ATMega8, но и на дешевой AtTiny2313. Работают последние линии только на кварце в 16 или 20 мгц. Именно на основе данного чипа я решил собрать USB — UART преобразователь.

  • Прошивка AtTiny2313 под кварц 16 мгц —
  • USB драйвер —
  • Fuse bits — HFuse: CD; LFuse: FF

Часть Arduino взята с официального сайта практически без изменений.

Плата питается как от USB так и от внешнего питания. На плате установлен стандартный для программатора AVR910 разьем для прошивки основного чипа. В моем случае это AtMega8, но можно использовать и AtMega168.

Для работы программатора AVR910 в фале конфигурации программатора..\Arduino\arduino-1.0.6\hardware\arduino\programmers.txt необходимо добавить следующие строки:

Avr910.name=avr910 avr910.protocol=avr910 avr910.communication=serial avr910.speed=115200

Выше указанный файл редактируется нормально только редактором Notepad++. В обычном Notepad он выглядит не читабельно.

Ниже привожу фото этого Arduino в сборке от Павла!

Самодельное USB Arduino с программатором

Понравилось? Лайкни нас на Facebook