Я свое знакомство с Arduino начал с Arduino nano. Соответственно и практиковался на ней и ее буду использовать в качестве примера.
Для разработки программного обеспечения используем фреймворк Arduino, затем плавно можно от него отказаться, но это не входит в тему статей этого цикла.
Идея и цель перехода к «голому» микроконтроллеру достаточно проста:
экономим в габаритах устройства
для пайки используем SMD компоненты- это дешевле и менее трудоемко
выбрасываем все лишнее
определяем соответствие выводов Arduino и микроконтроллера
добавляем все нужное. :-)
Несмотря на простоту идеи, путь не так очевиден и содержит некоторые подводные камни. Описывая проблему, сразу буду предлагать использованное мной решение.
Сокращения:
ПО- программное обеспечение
МК- микроконтроллер
1. Смотрим что внутри Arduino nano и убираем лишнее:
Arduino nano построена на базе микроконтроллера Atmega 328p — без него нам не обойтись.
конвертор USB — UART — лишний хлам если нет постоянной связи с ПК.
стабилизатор питания на 5 вольт — пригодится если питание вашей системы будет не совпадать с питанием микроконтроллера.
опорный стабилизатор на 3,3 вольт- пригодится если не хватает внутреннего опорного напряжения на 1,1 В.
кварцевый резонатор- может пригодиться, а может и нет. Все зависит от целей и соответственно от тактовой частоты устройства.
2. Ставим в соответствие выводы Arduino nano выводам микроконтроллера.
Если у вас есть программное обеспечение для прототипа, то очевидно вы захотите использовать его и на целевом устройстве, возможно на первых этапах, возможно для первичной отладки. Это имеет смысл. Это возможно и несложно.
Если составить соответствие выводов Arduino и микроконтроллера, то это будет происходить безболезненно и с минимумом телодвижений. Если вы не переназначаете выводы, то и в ПО ничто не поменяется.
Схема действий:
смотрим на прототипе, куда подключена периферия -> находим соответствующий вывод микроконтроллера -> рисуем связь на схеме электрической принципиальной
в программном обеспечении вывод МК обозначаем, как вывод Arduino
Нам пригодится вот такая картинка (если вы знаете ее наизусть, то можно обойтись без картинки) :
И такая картинка:
А еще не помешает составить таблицу, которая сильно облегчит работу связки схемотехник, конструктор, программист, даже если это одно лицо.
Сначала описание таблицы:
номер контакта на плате Arduino nano, условно сверху вниз, отдельно левый ряд по рисунку (L) и правый ряд по рисунку (R). Пригодится если у вас уже есть схема кроссплаты в которую вы втыкали Arduino nano.
наименование контакта на плате, то как подписан контакт на плате и как он называется в ПО
номер контакта микроконтроллера, пригодится схемотехнику - наименование вывода в библиотеке CAD системы…
функциональные возможности, основные и дополнительные. Этот столбец имеет смысл формировать под ваш проект.
Таблица. Сопоставление выводов Arduino nano и ATmega328PU.
Нумерация выводов на плате.
Обозначение вывода на плате.
Номер контакта микроконтроллера
Наименование вывода в библиотеке CAD системы
Функциональные возможности. (Формируем под проект)
L 1
TX1
31
PD1
TXD
L 2
RX0
30
PD0
RXD
L3
RST
29
PC6
RESET
L 4
GND
L 5
D2
32
PD2
INT0
L 6
D3
1
PD3
INT1, OC2B
L 7
D4
2
PD4
T0
L 8
D5
9
PD5
T1
L 9
D6
10
PD6
AIN0,
L 10
D7
11
PD7
AIN1,
L 11
D8
12
PB0
CLKO
L 12
D9
13
PB1
OC1A
L 13
D10
14
PB2
OC1B
L 14
D11
15
PB3
OC2
L 15
D12
16
PB4
MISO
R 1
Vin
R 2
GND
R3
RST
29
PC6
RESET
R 4
5V
R 5
A7
22
ADC7
ADC7
R 6
A6
19
ADC6
ADC6
R 7
A5
28
PC5
ADC5
R 8
A4
27
PC4
ADC4
R 9
A3
26
PC3
ADC3
R 10
A2
25
PC2
ADC2
R 11
A1
24
PC1
ADC1
R 12
A0
23
PC0
ADC0
R 13
REF
21
AREF
AREF
R 14
3V3
R 15
D13
17
PB5
SCK
3. Добавляем все нужное.
Далее сформулирую некоторые решения к которым я пришел на пробных проектах:
загрузка ПО внутрисхемное т. к. без отладки не обойтись. У нас же учебный единичный проект, кроме того и в мелкосерийном производстве без этого не обойтись.
выбор программатора для внутрисхемной загрузки, достаточно очевиден- USBasp. Стоит копейки. Поддерживается многими средами разработки. Не забыть, соответствующий разъем вывести на плату.
внутрисхемная отладка по аппаратному UART. Не забыть вывести на плате контрольные точки Rx, Tx, GND, +5V . Приобрести конвертер USB-UART.
защитный диод по питанию МК для отсечки левой нагрузки при загрузке программного обеспечения. В то же время имеет смысл «легкую» периферию питать от программатора, для первичной диагностики и отладки.
светодиод наличия питания - светодиод + резистор на дискретном выходе ( иначе как мы запустим blink), да и вообще индикатор режимов пригодится.
использование микроконтроллера в DIP корпусе- малоинтересно, из-за гигантских размеров, соответственно плавно выходим на разработку печатных плат в САПР и заказу их в специализированной фирме. Мной использовался САПР KiCAD и https://jlcpcb.com/, соответственно.
Схемотехника и расположение элементов. Решения к которым я пришел на практике.
Возможно существуют и лучшие решения, но то что я привожу, работает и в моих вариантах меня устраивает.
схема первоначального сброса микроконтроллера, на основе RC цепи. (кнопку сброса не впаиваем)
кварцевый резонатор и конденсаторы в его цепи, максимально близко к выводам микроконтроллера
конденсаторы в цепи питания с обратной стороны платы, под микроконтроллером. Танталовый и керамический, емкостью 10 и 0,1 мкФ соответственно.
индикация подачи питания на плату, в цепи питания микроконтроллера - на цифровой выход светодиод и резистор, для первоначальной отладки
диод, отсекающий микроконтроллер от других потребителей при прошивке
выводы Rx, Tx, GND и +5В, для отладки программного обеспечения по RS интерфейсу
на плате расположите подписи элементов, для удобства монтажа. Это важно.