Как перенести проект с Arduino в отдельный AVR микроконтроллер

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

Но все они относятся к числу отладочных. Используя их, можно быстро собрать макет устройства, разработать и отладить его программу. Однако использовать плату Arduino в готовом устройстве бывает неудобно.

Кроме того, встроив такую плату в законченное устройство, приходится для дальнейшей разработки и отладки программ разбирать его либо приобретать ещё одну плату Arduino.

Arduino UNO R3

Рис. 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 как программатор".

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.

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

Немаловажны объём памяти и число выводов микроконтроллера. Если памяти мало, программа может просто в ней не поместиться. А недостаточное число выводов не позволит подключить к микроконтроллеру все нужные внешние устройства.

Чтобы избежать проблем, рекомендуется для окончательной компиляции отлаженного скетча выбрать в пункте меню "Инструменты->Плата:" плату именно с тем микроконтроллером, который предполагается применить, и использовать полученный НЕХ-файл.

Принципиальная схема макета простого велоспидометра с платой Arduino UNO

Рис. 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".

Схема велоспидометра после замены платы Arduino на микроконтроллер ATmega328P-PU

Рис. 4. Схема велоспидометра после замены платы Arduino на микроконтроллер ATmega328P-PU.

Предусмотрен также интегральный стабилизатор DA1, формирующий, как и в Arduino, из напряжения 7...12 В стабилизированное напряжение 5 В для питания микроконтроллера и ЖКИ.

Конфигурация микроконтроллера

Рис. 5. Конфигурация микроконтроллера.

Если загрузить в память микроконтроллера DD1 коды из полученного, как было описано выше, с помощью Arduino IDE НЕХ-файла, а конфигурацию микроконтроллера установить в соответствии с рис. 5, то велоспидометр, собранный по схеме рис. 4, будет вести себя точно так же, как собранный по схеме рис. 3.

Скачать файлы с программой - spidometr-arduino-atmega328p

Н. Камнев, г. Москва. Р-12-17.

2 82 Микроконтроллеры
arduino avr микроконтроллер микроконтроллер программирование
Написать комментарий:

cashback