Многие радиолюбители, начинали знакомство с микроконтроллерами через 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;
- Компактный размер платы;
- Низкое энергопотребление, автор проекта сообщал, что от одного комплекта батареек устройство работает около года;
На этот раз я поведаю о том, как сделать Ардуино своими руками, да еще и без паяльника. Схема этого простого Ардуино-клона называется Shrimp . Самодельный Shrimp полностью совместим с Arduino IDE, так что можно легко запускать на нем любые скетчи. Сразу следует отметить, что для создания Shrimp с нуля потребуется рабочая плата Ардуино. Она необходима для установки загрузчика на пустой микроконтроллер. Если под рукой нет Ардуино, то можно приобрести уже прошитый микроконтроллер и сразу прыгнуть к разделу 2. Для создания Shrimp нам потребуется:
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 |
Для работы с микроконтроллером 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 содержат 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 биты НЕ записываются в микроконтроллер когда вы заливаете скетчи. Если в меню Сервис / Плата будет выбрано не подходящая платформа то:
Внимание , Ваши не корректные действия могут вывести из строя микроконтроллер для восстановления которого потребуется программатор.
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
Очень давно хотел собрать свою плату Arduino, смотрел на схемы, но так и не решался. Причин было несколько:
Ну вот однажды я наткнулся на статью на Хабре, где использовали конвертер на AVR вместо FT232R (схемы там нет), а так же на Zelectro аналогичную реализацию, но на микроконтроллере Atmega8. Последняя была сделана на базе японского проекта . Именно все это и вдохновило меня сделать собственную реализацию Arduino.
И так, если зайти на сайт AVR-CDC и посмотреть последние изменения (в архиве с прошивкой, на сайте нет информации) то там реализованы линии Rx Tx, а так же DTR, CTS, RTS не только на относительно дорогой ATMega8, но и на дешевой AtTiny2313. Работают последние линии только на кварце в 16 или 20 мгц. Именно на основе данного чипа я решил собрать USB — UART преобразователь.
Часть 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 с программатором