Часто у начинающих ардуинщиков и более продвинутых пользователей возникает проблема: памяти микроконтроллера недостаточно или наоборот, слишком много. Основная часть моделей имеет объем памяти 32к или 256к. С портами ввода/вывода ситуация не сильно лучше. Конечно, есть расширители портов, но тогда придется менять логику программы. Одним словом тупик. И выход есть - создать свою копию Arduino на другом микроконтроллере.
Предупреждение
Перед использованием схем из этой статьи, проверьте, все ли в порядке. Я тоже могу допустить ошибку. Если вы это заметили, напишите в комментарии.
Выбираем микроконтроллер под свои задачи
Выбирая МК, нужно определить основные параметры:
Память Flash
Память SRAM
Память EEPROM
Кол-во линий ввода/вывода
Доступные интерфейсы
Большим плюсом при создании платы на базе официально не поддерживаемого МК, будет наличие загрузчика и ядра. Привожу некоторые МК, для которых есть ядро:
МК |
Flash, k |
SRAM, k |
EEPROM, b |
Порты |
Интерфейсы |
Корпус |
Atmega16 |
16 |
1 |
512 |
32 |
SPI, I2C,UART |
DIP40, TQFP44 |
Atmega32 |
32 |
2 |
1024 |
32 |
SPI, I2C,UART |
DIP40, TQFP44 |
Atmega64 |
64 |
4 |
2048 |
53 |
SPI, I2C,UART x2 |
TQFP64 |
Atmega8 |
8 |
1 |
512 |
23 |
SPI, I2C,UART |
DIP28, TQFP32 |
Atmega644 |
64 |
4 |
2048 |
32 |
SPI x3, I2C,UART |
DIP40, TQFP44 |
Atmega128 |
128 |
4 |
4096 |
53 |
SPI, I2C,UART x2 |
TQFP64 |
Atmega640 |
64 |
8 |
2048 |
86 |
SPI x5, I2C,UART x4 |
TQFP100 |
Atmega1284 |
128 |
16 |
4096 |
32 |
SPI x3, I2C,UART x2 |
DIP40, TQFP44 |
Главное найти баланс: чтобы желаемого пункта хватало, но не в ущерб остальным характеристикам.
Немного о маркировке МК ATmega
Маркировка МК ATmega обычно интуитивно понятна, в качестве примера разберем маркировку чипа ATmega32l - 8AU. ATmega - семейство МК, 32 - flash память, l - пониженное напряжение питания. Буквы после модели я вынес в таблицу:
Буква |
Значение |
Нет |
Напряжение питания от 4.5 до 5.5 |
L |
Напряжение питания от 2.7 до 5.5 |
V |
Напряжение питания от 1.8 до 5.5 |
U |
Напряжение питания от 0.7 до 5.5 |
P |
Потребление 100нА в режиме Power-down |
A |
Уменьшен ток потребления, перекрывается весь диапазон тактовых частот всех версий, напряжение питания 1,8 - 5,5 вольт |
Надо учитывать, что микроконтроллер без буквы в обозначении может иметь пониженное напряжение питания, это нужно проверять по документации.
Тактирование
После выбора микроконтроллера под свои задачи можно переходить к проектированию схемы. Сначала находим пины XTAL1 и XTAL2. К ним мы подключаем кварц. Сейчас их достаточно много - есть и со встроенными конденсаторами внутри.
Для его работы требуется обвязка - два конденсатора на 22 пикофарада.
Также существуют другие варианты - со встроенными конденсаторами и в других корпусах, включая SMD. Если в кварце уже есть конденсатор, то дополнительные не нужны, подключаем напрямую к XTAL1 и XTAL2.
Далее гуглим "НАЗВАНИЕ_МК максимальная частота". Для примера я загуглил "Atmega32l-8au максимальная частота". Почти гарантировано вы увидите строчку:
В этом случае смысла во внешнем кварце нет, можно использовать внутренний генератор. В большинстве случаев частота работы 16 МГц, иногда 20 МГц.
Корпус
Здесь все сводится к размерам и удобству сборки. Некоторые МК выпускаются только в SMD - в основном из-за огромного количества портов. Самые крупные выводные МК обычно выпускаются в корпусе DIP-40. Те, которые имеют 100+ выводов, конечно, идут в SMD. Паяльником реально припаять корпус TQFP-44 - ATmega16/32. Больше - я не пробовал, если у вас есть опыт - отпишите в комментарии. Однако, китайцы, если заказать у них печатную плату, могут нам припаять МК хоть TQFP-100. Естественно, это недёшево, но когда очень большая партия - это единственный выход.
Прошивка
Если мы копируем Arduino, нам необходимо добавить возможность прошивки через бутлоадер - загрузчик, через разъем USB. Существуют специализированные микросхемы - CH340, FT232, CP2102. На оригинальных Arduino для загрузки прошивки используется отдельный камень - Atmega8u2/16u2 со своей прошивкой и аппаратным USB. Я сам использую чип CH340C. Некоторые на него жалуются, но у меня все достаточно хорошо. Прилагаю рекомендуемую схему подключения:
Итоговая схема
Итак, сложим все требования воедино. Я хочу Atmega32l на частоте 8МГц с прошивкой по USB. У меня получилось это:
Вывод
Создание своего клона Arduino имеет смысл, если вам не хватает мощности UNO, а MEGA использовать нецелесообразно, а также хочется иметь USB порт для прошивки.
Надеюсь, что статья была вам полезна, и вы узнали что-то новое. Если есть вопросы или замечания, напишите в комментарии, спасибо за дочитывание статьи, пока!
Комментарии (15)
Gengenid
09.12.2021 12:54+6Это вредные советы?
В этом случае смысла во внешнем кварце нет, можно использовать внутренний генератор.
UART без кварца? Отлично, просто отлично.
AlexTutorialYT Автор
09.12.2021 13:12-3Atmega328 шьется по uart на внутреннем клоке.
Gengenid
09.12.2021 13:26+4Толерантность UART к изменению частоты тактирования примерно +-3%
А это графики частоты внутреннего RC-генератора для вашего контроллера в зависимости от напряжения питания и температуры.
Сами выводы сделаете?
Engenigger
09.12.2021 14:18+1Для целей прошивки внутреннего RC более чем достаточно.
Лично я как-то не представляю себе разработчика, программирующего МК в неотапливаемом ангаре глубокой зимой на Севере от маломощного источника питания, который просаживается до 3 В. )))Polaris99
09.12.2021 16:02+4Уже на 115200 могут возникнуть проблемы даже при комнатной температуре. Но у ардуинщиков всегда так - я с этим не сталкивался, значит, этого не существует.
forthuser
09.12.2021 13:27Не проще ли закопать «стюардессу» при наличии других лучших альтернатив, даже с учётом рекламируемого кризиса полупроводниковой промышленности? ????
P.S. В Ардуино же, если её самостоятельно изготавливать, то имеет смысл и добавить память и другие нужные модули в конструктиве одной платы.
lenz1986
09.12.2021 18:31<тут должна быть картинка про троллейбус из хлеба>
Логический смысл статьи был бы понятен в случае если бы это решение вдруг стоило копейки... НО изобретать велосипед... Заходим на Али, забиваем Ардуино и выбираем под любой вкус и цвет....
Ну и второй момент ..... Ардуино - это все таки ИДЕ а не конкретная плата на Атмеге
COKPOWEHEU
10.12.2021 09:09Логический смысл статьи непонятен в любом случае. Рассмотрены разные камни, но не указано какие с ними будут проблемы. Не указано даже каким реальным портам соответствуют богомерзкие digitalWrite. Много времени уделено переходнику usb-uart, но ни слова про загрузчик. Как его настроить, собрать, прошить, где его взять?
О чем вообще статья, что хотел сказать автор?
unsignedchar
09.12.2021 22:34Если уж упарываться в изготовление плат и пайку SMD, может, сразу делать готовое устройство? Или прототип устройства? Ведь если вдруг не хватает ног - значит, какая то периферия уже есть, может, имеет смысл сделать всё сразу на одной плате без пучка проводов?
VolodjaT
А зачем создавать свою модификацию ардуино если есть навык создания печатных плат? Почему сразу не делать нужное устройство?
AlexTutorialYT Автор
Arduino - плата для макетирования и отладки. Значит, наша плата тоже для макетирования и отладки
VolodjaT
Ну отлаживать на макетке если уж возникла проблема нехватки пинов - таке себе (аж страшно какой это клубок проводов)
COKPOWEHEU
Смысл-то есть. Я недавно сделал себе клон, просто потому что нужная обвязка уже была, а покупать целую Ардуину не хотелось. Заодно предусмотрел на плате второй светодиод, кнопку и обвязку для vusb.
Но основное назначение у Ардуины — тестировать периферию на скетчах от производителей чтобы было на что ориентироваться при переписывании по-человечески для использования.