- PVSM.RU - https://www.pvsm.ru -

Привет, читатель!
Сегодня существуют десятки вариантов платы Arduino. Их популярность обусловлена, по моему мнению, фреймворком Wiring [1] для микроконтроллеров, распространением «шилдов» (нет необходимости паять компоненты) и, что самое удобное, загрузкой программ по USB. В рамках этой статьи расскажу, как я создал небольшую оценочную плату для микроконтроллера и добавил в нее загрузочную запись.
По своей сути, большинство «ардуинок» (оценочных плат) — это печатные платы с минимально необходимыми для микросхемы деталями. Такие прототипы позволяют сделать работу с чипами удобнее, проще и приятнее. Однако бывает, что под контроллер либо нет подобных решений, либо они универсальные и имеют некоторые неточности. С этим можно бороться, но возникают различные костыли, поэтому я решил разработать оценочную плату для отечественного чипа. Самому чипу посвящена отдельная статья на Хабре [2], его я использую в паре пет-проектов. Приступим к разработке!
Используйте навигацию, если не хотите читать текст полностью:
→ Референсы и исходные варианты [3]
→ Схема [4]
→ Плата [5]
→ Загрузочная запись [6]
→ Заключение [7]
Можно при помощи ЛУТ собрать свою одностороннюю плату Arduino с DB9-интерфейсом. Подробности описаны в официальной документации [8].
Существуют уже две отечественных версии Arduino: Elbear Ace-Uno [9] и Vostok UNO-VN035 [10]. Давайте реализуем свою?
Одной из первых плат для макетирования и прототипирования были Basic Stamp. О них я узнал из старой, но хорошей книги «Радиоэлектроника для чайников». Данная плата имеет цепь подготовки питания, конвертор интерфейсов usb-uart (раньше был просто разъем DB9), сокет для микросхемы или впаянный контроллер, а также небольшую макетную плату (breadboard) и PLC-разъемы. Есть подобная занимательная плата на базе ESP8266 от PINLAB [11].

Источник [12].
Большее распространение получили платы Arduino. Одна из причин — так называемые «шилды». Это платы расширения, монтируемые на разъемы сверху. Сами платы зачастую реализуют одну-две функции и занимают действительно много места. Но они при этом используются для образовательных целей, а также имеют удобные платы для проверки схем, гипотез и отображения информации. Одной из первых плат была Arduino Uno.

Забавный факт: первая Arduino была сделана как конкурент Basic Stamp и подключалась к ПК через порт DB25 COM. Сегодня COM-порт стал виртуальным, но загрузка ПО по-прежнему осуществляется через него.

Источник [12].
Позже вышла более удобная, на мой взгляд, плата — Aarduino Nano. Мне нравится ее форм-фактор — он отлично встает на макетную плату, тем самым позволяет сделать красивую и наглядную разводку. Аналогичным образом можно смонтировать появившиеся позже ESP8266 или ESP32.

Источник [13].
Отмечу проект Руслана Надыршина на базе esp32, который он описал в своей статье [14] на Хабре. Довольно интересный конструктив в виде небольших квадратных плат, который позволяет собрать несколько необходимых блоков в стойку. Объединение модулей происходит через разъемы BLD с длинными штырями.
В этом видео автор проекта описывает идеи и прототипы плат next.module:
Еще один классный и удобный вариант для отладки и обучения — плата STEMTera. Это макетная плата, в которую встроили atmega32 и вывели порты наружу. Пины микроконтроллера соответствуют расположению и функционалу на отладочной плате Uno и дополнительно продублированы.
Обзор и пример работы с платой STEMTera:
Я решил остановиться на варианте Nano, немного его изменив под используемый контроллер. Для себя поставил следующие технические требования:
Вы можете спросить, почему планируется устаревший micro-USB? Исключительно из соображений практичности. Это плата для отладки и прототипирования. Если на ней будет случайно отломлен интерфейс или сломан «язычок» внутри, micro-USB проще перепаять. В этом бою пять широких ножек выглядят более привлекательно, чем 13 тонких контактов type-С. К тому же, провода с таким разъемом сейчас можно найти во многих магазинах.
В качестве основного микроконтроллера рассматриваю К1946. Почему? Отечественные контроллеры — отличное решение для экспериментов, если у вас есть возможность их оперативно достать. По сути, это близкие аналоги существующих на рынке образцов, для которых уже есть разработанные среды, библиотеки кода, общие методы и подходы к применению.
Больших секретов здесь нет. Исходные коды, схемы и платы лежат в свободном доступе как в документации от вендоров [15], так и в статьях от любителей [16]. Китайцы вообще поставили на поток создание клонов любых цветов и их продажу на маркетплейсах [17].
Основное отличие от других аналогичных схем в том, что у каждого входа микроконтроллера установлены конденсаторы. Когда работал с китайской отладочной платой, очень пожалел об их отсутствии во время отладки программы.
Другая отличительная черта — использование регулятора LP2985 вместо классического 78L05. Он имеет больший ток нагрузки и меньшее падение напряжения. Еще один его плюс — наличие вывода выключения, который отрубает источник. Использовал этот функционал для одновременного подключения платы к USB без извлечения внешнего источника.

Изначальным планом было сделать печатную плату, максимально совместимую с Arduino Nano. На схеме было три разъема для порта С-микроконтроллера, чтобы использовать все ножки чипа. Эти восемь ножек вывел на отдельную «отламываемую» часть платы. Перфорация позволяла в таком варианте попросту отломать дополнительный порт, если не нужно установить плату в «шилды» для Nano. Сама идея таких плат не нова и позаимствована у STM8-Discovery от STMicroelectronics.

Один из вариантов. Было много переходных отверстий. Половина схемы — с другой стороны платы, включая все фильтры.
Эксперементируя с форм-факторам отошел от повторения в габаритах Nano. Вместо длинной платы удачнее оказалось сделать ее шире: в таком варианте отладочное устройство удобно встает на большую макетную плату. Идею с портом на одном из торцов решил оставить, обогатив этот разъем двумя аналоговыми линиями и интерфейсом UART.
После всех изысканий и экспериментов заказал партию зеленых плат.

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

Зачем на чипе загрузочная запись, если есть программатор? Да, они просты в использовании (все вызывается одной командой), дешевы и довольно надежны. Однако для отладки удобно выводить информацию в последовательный интерфейс. Через него же можно настроить связь с ПО верхнего уровня на ПК. А в готовый проект (уже в виде прибора, а не оценочной платы) можно загружать обновление ПО по USB без дополнительных инструментов и открытия корпуса устройства. Для этого вообще не требуется никаких специальных знаний.
Забавный факт: контроллер можно запрограммировать всего двумя кнопками. На эту тему на Хабре есть замечательная статья [18].
В качестве загрузочной записи выбрал optiboot. Он имеет достаточную функциональность, активно поддерживается сообществом в официальном репозитории на GitHub [19] и мало весит. На базе этого проекта изначально также были построены загрузчики для других оценочных плат. Кстати, на optiboot работает более эффективное ядро GyverCore [20].
Итак, сначала необходимо подготовить ОС для сборки файлов. Понадобится avr-gcc, желательно последней версии.
Установка на Ubuntu самая простая и описана в туториале [21].
Для macOS понадобится brew [22] и установить пакет (можно найти на GitHub [23]).
Установка на Winows чуть сложнее, чем на Linux, но вам поможет пошаговая инструкция [24].
Альтернативный вариант для Windows — avr-gcc в составе ide arduino.
Для сборки достаточно скачать репозиторий и по инструкции из вики проекта на GitHub [25] собрать исходные файлы и загрузить бинарный код. Для скачивания потребуется git на ПК. Либо можно скачать архивом:
git clone https://github.com/Optiboot/optiboot.git
cd optiboot/optiboot/bootloaders/optiboot
Далее выполняем сборку. Необходимо указать используемую ОС, чтобы скрипт донастроил некоторые переменные, а также исправил символы пути (на Windows).
make OS=macos
UART=0 BAUD_RATE=115200
LED=B7 LED_DATA_FLASH=1
AVR_FREQ=16000000L atmega8535
Дополнительно можно указать опцию BOOT_ON_POR=1. В таком случае бутлоадер будет ожидать сигнал от ПК в течении секунды (настраивается опцией TIMEOUT) после включения, прежде чем начнет проводить загрузку. Это полезно в ситуациях, когда необходимо подключаться по USB, не выполняя перезагрузку контроллера. Также с этой опцией можно выполнять загрузку ПО через RS-485, по беспроводной связи через стандартные Bluetooth, Wi-Fi модули или даже по радио [26] (при очень большом желании).
Во время сборки make выдаст строки с предупреждением:

Погрешность в 2% не страшна, но вас предупредили. Чтобы этого избежать, можно изменить частоту резонатора или скорость интерфейса.
Последней командой загрузим сформированный бутлоадер в плату. Для этого использую avrdude:
avrdude -P usb -c usbasp -p ATmega8535 -s -B 16kHz -U flash:w:optiboot_atmega8535_UART0_115200_16000000L.hex
Для дальнейшего использования из консоли берем эту строку и заменяем поля на собственные:
avrdude -p m8535 -c arduino -P /dev/tty.usbserial-0001 -b 115200 -U flash:w:build/k1946vm014.hex
Я же добавил в makefile, описанный ранее на Хабре [2], пару строк:
pusb: $(TARGET).hex
avrdude -p $(DUDE_MCU) -c arduino -P $(PORT) -B $(PORTSPEED) -U flash:w:$(BUILD_DIR)/$(TARGET).hex
На этом этапе основная задача завершена. Плата определяется и обновляется по USB из VSCode:

Полученные платы успешно используются для отладки некоторых решений. Опытным путем я понял, что не хватает некоторых элементов, которые делают работу удобнее. Например, стоило добавить:
Однако основная функциональность в виде «бутлоадер + микроконтроллер + конвертор интерфейсов» используется по максимуму. Когда плата установлена в макете и работает, разработчик может подключиться, снять логи, изменить режимы работы или обновить прошивку. Попробовал кейс с обновлением прошивки не специалистом: работа выполнена успешно за счет использования созданного bat-скрипта и hex-файла прошивки.
Автор: Владислав Рябчевский
Источник [27]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/arduino/391995
Ссылки в тексте:
[1] Wiring: http://wiring.org.co/
[2] отдельная статья на Хабре: https://habr.com/ru/articles/815269/
[3] Референсы и исходные варианты: #1
[4] Схема: #2
[5] Плата: #3
[6] Загрузочная запись: #4
[7] Заключение: #5
[8] в официальной документации: https://docs.arduino.cc/retired/boards/arduino-serial-single-sided-3/
[9] Elbear Ace-Uno: https://www.ixbt.com/news/2024/04/22/sdelano-v-rossii-predstavlena-polnostju-otechestvennaja-plata-sovmestimaja-s-arduino.html
[10] Vostok UNO-VN035: https://www.rlocman.ru/news/new.html?di=658807
[11] ESP8266 от PINLAB: https://www.chipdip.ru/product/laboratorija-internet-veshchej-medium
[12] Источник: https://www.techspot.com/article/2126-arduino/
[13] Источник: https://www.serveronthemove.com.au/blogs/tips/nodemcu-esp8266-w-lua-moisture-sensor-display-and-extended-breadboard
[14] в своей статье: https://habr.com/ru/articles/714998/
[15] в документации от вендоров: https://docs.arduino.cc/learn/hardware/nano-pcb-guide/%23soldering-directly-to-pcb
[16] в статьях от любителей: https://oshwlab.com/Alex_Tien/arduino-nano
[17] на маркетплейсах: https://ru.banggood.com/5Pcs-RGBDuino-UNO-V1_2-Jenny-Development-Board-ATmega328P-Chip-CH340C-VS-UNO-R3-Upgrade-for-Raspberry-Pi-4-Raspberry-Pi-3B-Geekcreit-for-Arduino-p-1759979.html?cur_warehouse=CN
[18] замечательная статья: https://habr.com/ru/articles/152052/
[19] на GitHub: https://github.com/Optiboot/optiboot
[20] ядро GyverCore: https://github.com/AlexGyver/GyverCore
[21] в туториале: https://baremetalmicro.com/tutorial_avr_toolchain/03-Install-on-Ubuntu-Linux.html
[22] brew: https://brew.sh
[23] на GitHub: https://github.com/osx-cross/homebrew-avr
[24] пошаговая инструкция: http://fab.cba.mit.edu/classes/863.16/doc/projects/ftsmin/windows_avr.html
[25] на GitHub: https://github.com/Optiboot/optiboot/wiki/CompilingOptiboot
[26] радио: https://habr.com/ru/companies/audiomania/articles/572982/
[27] Источник: https://habr.com/ru/companies/selectel/articles/820731/?utm_source=habrahabr&utm_medium=rss&utm_campaign=820731
Нажмите здесь для печати.