Как перенести проект с Arduino в отдельный AVR микроконтроллер
Предлагаемый метод переноса программы, разработанной и отлаженной в среде Arduino IDE, на микроконтроллер, установленный не на плате Arduino, а в другом устройстве, даёт возможность создать законченное устройство меньших габаритов и стоимости. В настоящее время платы Arduino весьма популярны, поскольку обеспечивают простой вход в мир программирования. Выпускают много вариантов плат этого семейства, различающихся размерами, функциями и ценами.
Но все они относятся к числу отладочных. Используя их, можно быстро собрать макет устройства, разработать и отладить его программу. Однако использовать плату Arduino в готовом устройстве бывает неудобно.
Кроме того, встроив такую плату в законченное устройство, приходится для дальнейшей разработки и отладки программ разбирать его либо приобретать ещё одну плату Arduino.
Рис. 1. Arduino UNO R3.
В некоторых вариантах плат этого семейства, например, в оригинальной Arduino UNO R3 (рис. 1), микроконтроллер установлен в панель. Завершив отработку программы, его можно извлечь из панели и прочитать с помощью программатора содержимое его памяти.
Копию этого содержимого можно загрузить в память другого аналогичного микроконтроллера, который и использовать в своей разработке. Но даже если установленный на плате Arduino микроконтроллер снять с нее без пайки невозможно (рис. 2), доступ к его памяти можно получить, подключив программатор к выводам платы D11 (MOSI), D12 (MISO), D13 (SCK), а также RST, +5V и GND.
Эти цепи выведены не только на главные разъёмы платы, но и на шестиконтактный разъём ICSP, который на рис. 1 и рис. 2 виден справа.
Однако существует и более простой способ загрузки программы, разработанной в среде программирования Arduino IDE, в отдельный, не установленный на плате Arduino, микроконтроллер.
Для этого достаточно найти в памяти компьютера, на котором производилась трансляция исходного текста (скетча) программы, созданный в ходе этого процесса НЕХ-файл программы и загрузить его в память своего микроконтроллера с помощью программатора.
Послужить программатором может сама плата Arduino. Чтобы узнать, как это сделать, достаточно набрать в любой поисковой системе запрос "Arduino как программатор".
Рис. 2. Arduino с запаянным микроконтроллером.
Но найти этот НЕХ-файл до недавнего времени было довольно трудно. Arduino IDE помещала его вместе с прочими генерируемыми в процессе компиляции служебными файлами в специальную папку со всякий раз другим длинным цифровым именем. Имя этой папки нужно было искать в сообщениях, выводимых во время компиляции. Однако задачу можно упростить.
Для этого нужно открыть любым текстовым редактором файл preferences.txt, путь к которому указан в окне "Файл->Настройки" системы разработки.
В этот файл нужно добавить строку "build.path=", в которой после знака равенства указать полный путь к папке, в которую следует помещать генерируемые компилятором файлы. Имя этой папки можно задать любое, по своему усмотрению.
Но учтите, что файлы в ней будут обновляться после каждой компиляции. Чтобы сохранить нужный файл для дальнейшего использования, его следует перенести в другое место.
В последних версиях Arduino IDE задача ещё более упростилась. В меню "Скетч" появился пункт "Экспорт бинарного файла". Если после успешного завершения компиляции выбрать этот пункт, готовый к загрузке НЕХ-файл программы появится под именем *.standard, hex в папке с её скетчем. Место звёздочки займёт имя скетча.
Ещё один файл по имени *.with_bootloader.standard.hex появится там же, но в рассматриваемом случае он не потребуется.
Вместо слова standard в имени файла может стоять другое, отражающее особенности платы, для которой выполняется компиляция. Например, для платы Arduino Nano, имеющей дополнительные аналоговые входы А6 и А7, это будет "eightanaloginputs" - даже в том случае, если эти входы программа не использует.
Для примера рассмотрим принципиальную схему макета простого велоспидометра с платой Arduino UNO, изображённую на рис.3. Программа для него приложена к статье. Как собрать такое устройство, заменив в нём плату Arduino одиночным микроконтроллером?
Лучше всего, если это будет микроконтроллер того же типа, что установлен на плате. В данном случае - ATmega328P (возможно, в другом корпусе). Вполне возможна и замена, например, на АТтеда168 или АТтеда8.
В других случаях следует убедиться, что выбранный микроконтроллер совместим с заменяемым по системе команд, числу, назначению и адресам регистров и их разрядов.
Немаловажны объём памяти и число выводов микроконтроллера. Если памяти мало, программа может просто в ней не поместиться. А недостаточное число выводов не позволит подключить к микроконтроллеру все нужные внешние устройства.
Чтобы избежать проблем, рекомендуется для окончательной компиляции отлаженного скетча выбрать в пункте меню "Инструменты->Плата:" плату именно с тем микроконтроллером, который предполагается применить, и использовать полученный НЕХ-файл.
Рис. 3. Принципиальная схема макета простого велоспидометра с платой Arduino UNO.
Например, платы Arduino Nano бывают как с микроконтроллерами ATmega328, так и ATmega168, а платы Arduino NT - с ATmega168 или ATmega8. Причём для компиляции скетча подключать к компьютеру выбранную плату вовсе не обязательно.
Анализ приведённой на рис. 3 схемы показывает, что в велоспидометре использованы дискретные выходы D2-D7 и дискретный вход D10 платы Arduino.
Такой же вывод можно сделать, изучив текст программы. Номера используемых выводов Arduino указаны в её строках Liquidcrystal lcd(2, 3, 4, 5, 6, 7); int pin = 10;
Осталось найти соответствие между именами выводов Arduino и номерами выводов микроконтроллера, с которыми они соединены. Это можно сделать, воспользовавшись таблицей. Она составлена для микроконтроллеров ATmega328P в корпусе TQFP32 (индекс -AU), в корпусе VQFN28 (индекс -ММ) и в корпусе PDIP28 (индекс -PU).
Аналогичную таблицу для микроконтроллеров других типов или в других корпусах можно составить, ориентируясь на их описания и названия выводов согласно справочным данным.
ATmega328P | Вывод Arduino | |||
Назв. вывода | Номер вывода | |||
-AU | -MM | -PU | ||
РВ6, XTAL1 | 7 | 5 | 9 | - |
РВ7, XTAL2 | 8 | 6 | 10 | - |
VСС | 4 | 3 | 7 | +5V |
VСС | 6 | - | - | +5V |
VСС | 18 | 16 | 20 | +5V |
РС0, ADC0 | 23 | 19 | 23 | A0 |
PCI, ADC1 | 24 | 20 | 24 | A1 |
PC2, ADC2 | 25 | 21 | 25 | A2 |
PC3, ADC3 | 26 | 22 | 26 | A3 |
PC4, ADC4 | 27 | 23 | 27 | A4, SDA |
PC5, ADC5 | 28 | 24 | 28 | A5, SCL |
ADC6 | 19 | - | - | A6 |
ADC7 | 22 | - | - | A7 |
AREF | 20 | 17 | 21 | AREF |
PDO, RXD | 30 | 26 | 2 | D0, RXD |
PD1, TXD | 31 | 27 | 3 | D1,TXD |
PD2, INTO | 32 | 28 | 4 | D2 |
PD3, INTI | 1 | 1 | 5 | D3 |
PD4, TO | 2 | 2 | 6 | D4 |
PD5, T1 | 9 | 7 | 11 | D5 |
PD6, AIN0 | 10 | 8 | 12 | D6 |
PD7, AIN1 | 11 | 9 | 13 | D7 |
PBO, CLKO | 12 | 10 | 14 | D8 |
PB1, OC1A | 13 | 11 | 15 | D9 |
PB2, SS | 14 | 12 | 16 | D10 |
PB3, MOSI | 15 | 13 | 17 | D11, MOSI |
PB4, MISO | 16 | 14 | 18 | D12, MISO |
PB5, SCK | 17 | 15 | 19 | D13, SCK |
GND | 3 | - | - | GND |
GND | 5 | 4 | 8 | GND |
GND | 21 | 18 | 22 | GND |
RSJ, PC6 | 29 | 26 | 1 | RST |
Fla рис. 4 показана схема велоспидометра после замены платы Arduino на микроконтроллер ATmega328P-PU (DD1). Позиционные обозначения элементов, имевшихся на схеме рис. 3, здесь сохранены.
Добавлены необходимый для работы микроконтроллера кварцевый резонатор ZQ1 на 16 МГц с конденсаторами С4 и С6, а также цепь установки микроконтроллера в исходное состояние R3C2 с кнопкой SB1 "Reset".
Рис. 4. Схема велоспидометра после замены платы Arduino на микроконтроллер ATmega328P-PU.
Предусмотрен также интегральный стабилизатор DA1, формирующий, как и в Arduino, из напряжения 7...12 В стабилизированное напряжение 5 В для питания микроконтроллера и ЖКИ.
Рис. 5. Конфигурация микроконтроллера.
Если загрузить в память микроконтроллера DD1 коды из полученного, как было описано выше, с помощью Arduino IDE НЕХ-файла, а конфигурацию микроконтроллера установить в соответствии с рис. 5, то велоспидометр, собранный по схеме рис. 4, будет вести себя точно так же, как собранный по схеме рис. 3.
Скачать файлы с программой - spidometr-arduino-atmega328p
Н. Камнев, г. Москва. Р-12-17.
- PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН.
- Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет.
- Проекты с открытым исходным кодом - доступ к тысячам открытых проектов в сообществе PCBWay!
- Самодельный велоспидометр на ARDUINO UNO (ATMEGA328)
- Дублирующий электронный счетчик показаний использования воды (PIC16F84A)
- Защита питания микроконтроллера от помех
- Схемы усилителей сигналов на нескольких ОУ к микроконтроллеру

вожможно ли, перенос проекта работы шагового двигателя с ардуино atmega328 16MHz на atmega8 без кварца (на внутренний генератор 8MHz) без снижения оборотов в 2 раза, можно ли их програмно увеличить ?