Самодельный ардуино на atmega8. Минимальный клон Arduino за $3 на ATmega8A с модифицированным bootloader'ом. Копирование загрузчика на чистый микроконтроллер
На этот раз я поведаю о том, как сделать Ардуино своими руками, да еще и без паяльника. Схема этого простого Ардуино-клона называется 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 отображает весь процесс копирования загрузчика. В случае успеха, отчет о процедуре будет выглядеть следующим образом.
2. Загрузка программ на Shrimp
Итак, теперь у нас есть самодельный Arduino с прошитым загрузчиком. Чтобы залить на него какой-нибудь скетч, нам потребуется частично разобрать предыдущую схему, и дополнить её новыми элементами.В частности, добавляется кнопка сброса, и защитные цепи питания.Многие радиолюбители, начинали знакомство с микроконтроллерами через Arduino. Большинству пользователей mysku известно про этот электронный конструктор и удобную платформу для быстрой разработки электронных устройств, поэтому особо останавливаться на достоинствах и недостатках самой платформы я не буду.
В обзоре будет описана возможность использования Arduino в качестве программатора далее по тексту Arduino ISP. Кому интересно, прошу под кат.
Наигравшись с различными модулями к Arduino, у меня возникло желание создать полноценное устройство, которое будет полезно в повседневной жизни.
Случайно наткнувшись в интернете на проект , решил попытаться его повторить.
Прочитав описание проекта, были сформулированы основные для меня проблемы или как принято говорить подводные камни:
- Создание печатной платы;
- Прошивка микроконтроллера Atmega8A в корпусе TQFP-32.
До этого я не вытравил ни одной платы и прошивал только встроенный в Arduino микроконтроллер в корпусе DIP.
Atmega8 в корпусе TQFP-32 помимо достоинств, таких как более низкая цена и меньший размер по сравнению с DIP, имеет и недостаток - это неудобство прошивки микроконтроллера и более сложный монтаж на плату.
Устранить первый недостаток можно различными способами:
- Приобрести переходник TQFP32 TO DIP32, который имеет механизм зажима. Стоимость около 1 тыс. рублей;
- Приобрести переходник TQFP32 TO DIP32, который не имеет механизма зажима, рассчитан на припаивание микроконтроллера. Стоимость около 100 рублей за 5 штук;
- Сделать печатную плату-переходник TQFP32 TO DIP32 своими руками;
- Припаять тонкие провода к нужным ножкам и отпаять после прошивки.
Выбрав предпоследний вариант, чтобы не ждать еще месяц доставки, я приступил к созданию печатной платы по методу ЛУТ. Информации и роликов в интернете о данном методе очень много и каждый без труда сможет повторить его дома. Вытравив плату в хлорном железе и припаяв штырьки, получился вот такой переходник:
Исходные файлы для Sprint Layout, можно скачать .
Припаиваем Atmega8 феном или паяльником. Можно «прихватить», только 8 ножек, которые участвуют в прошивке. Не рекомендую использовать различные зажимы или «колхозить» с прищепками.
Подключаем Arduino Uno к компьютеру по USB и загружаем скетч Arduino ISP. Компилируем и прошиваем Arduino Uno. В комментариях, есть подсказка по подключению для прошивки через Arduino ISP, нам потребуются пины MOSI, MISO, RESET, GND, GND, VCC, VCC, SCK.
// pin name: not-mega: mega(1280 and 2560) // slave reset: 10: 53 // MOSI: 11: 51 // MISO: 12: 50 // SCK: 13: 52
Общая схема подключения будет выглядеть следующим образом:
Для прошивки будем использовать консольную утилиту :
Avrdude -p m8 -P USB15 -c arduino -b 19200 -U lfuse:w:0xE4:m -U hfuse:w:0xDA:m -U flash:w:main.hex
Где -p m8 - Прошиваемый микроконтроллер в нашем случаи Atmega8;
-P USB15 - Имя порта, под которым опеределяется программатор Arduino ISP;
-с arduino - Тип программатора;
-b 19200 - Скорость USB порта;
-U flash:w:main.hex - Прошивка;
-U lfuse:w:0xE4:m -U hfuse:w:0xDA:m - Фьюзы.
После успешной прошивки, можно дополнительно сравнить код на flash с исходным hex файлом:
Avrdude -p m8 -P USB15 -c arduino -b 19200 -U flash:v:main.hex
Если у Вас нет в наличии Arduino, то в качестве дешевого программатора, можно использовать . Его стоимость порядка 100 руб.
В заключении, продемонстрирую фотографии устройства, которое я собрал по проекту ClusterM.
Фотографии
Особенности:
- Эмуляция iButton/Cyfral/Metacom;
- Считывание iButton/Cyfral;
- Синхронизация базы ключей с компьютером по USB;
- Компактный размер платы;
- Низкое энергопотребление, автор проекта сообщал, что от одного комплекта батареек устройство работает около года;
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, смотрел на схемы, но так и не решался. Причин было несколько:
- В моем ноутбуке отсутствует 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 с программатором
Самую простую схему 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нФ, под Вашу ответственность.