Андрей Смирнов
Время чтения: ~13 мин.
Просмотров: 0

Arduino Nano: распиновка, схема подключения и программирование

Do It Yourselfheader-1-991x560.jpg

Вот вы написали программу, и залили её в свой UNO. Всё великолепно работает, но такую громадную железку не запихнуть в миниатюрный корпус. Да и вдруг, вы хотите сделать 100 таких устройств, а зачем вам увеличение себестоимости, ведь на платах Arduino куча ненужного барахла.

Ну что же, попробуем. Для начала, как мы помним, в самых распространённых платах Nano и Mega, используется камень AtMega328P. Логично, что для его запуска, нам нужно подать питание на него. Для этого здесь достаточно много пинов VCC и GND, особенно в планарных типах корпуса. Связано это с топологией чипа на уровне производства, ведь каждый пин контроллера держит токовую нагрузку, поэтому МК должен быть запитан равномерно со всех сторон

Снимок-экрана-354-1024x760.png

Пин AREF отвечает за опорное напряжение АЦП, туда можно подать напряжение, относительно которого вы хотите читать результаты, или, если это будет 5в, или 2.5 от внутреннего делителя, то подтянуть конденсатором к питанию. Также, по классике, на линию питанию нужно повесить конденсаторы для сглаживанию питающего напряжения – от этого зависит стабильность микроконтроллера.

Mega328-обвязка-голого-чипа-1024x756.png

Знаете, на arduino, есть такая кнопка – Reset, от которой можно перезагрузить МК. Это такой выход i/o, на который на который вроде бы можно повесить периферию, но с большими ограничениями. Поэтому, если вам хватает ног, лучше не трогайте этот пин. Изначально он подтянут внутренним резистором, но лучше, для надёжности и стабильности сделать внешнюю подтяжку резистором 10кОм. Перезагружать готовое устройство нужды особой нет – кнопку ставить не будем.

Смотрите также:  Готовим робота waybot к первым тестам

Теперь нужно разобраться с тактированием. Arduino работает на частоте 16Мгц, т.е. от внешнего кварца. Если вы продолжаете работать на этой частоте, то этот кварц нужно установить на создаваемую плату, вместе с конденсаторами 22пФ.

Но если точность вычислений вам не сильно нужна, а хочется сэкономить в размерах, как иногда мне, то кварц можно вообще не ставить, а тактироваться от внутренней RC цепочки с 8Мгц. Как скомпилировать прошивку в arduino с другой частотой в 8Мгц, я расскажу позже. А пока рассмотрим самую важную часть – как программировать то голый микроконтроллер? Ведь usb выхода у него нет. Есть разные пути, но самый простой – использовать внутрисхемное программирование SPI. И купить дешёвый программатор USB ASP. Мой выглядит так, у него не подписаны контакты

Нарисовал удобную распиновку, если смотреть со стороны контактов. Для SPI нам важны 5 контактов, но я обычно беру и питание с программатора – MISO, MOSI, SCK, RST, GND

Также у меня лежит самодельный UsbAsp, но он громоздкий, и у него не сделан вывод 3.3в, поэтому я его давно не использую

Смотрите также:  Демоплата на AVR

Теперь рассмотрим, какие выводы мы будем использовать для программирования на принципиальной схеме МК.

Теперь если подать питание, и подключить выводы программатора MOSI, MISO, SCK, RESET, GND то можно приступать к программированию. Как помните, из предыдущей статьи, где мы рассказали как достать HEX файл из среды Arduino, IDE делает два файла – *.hex и *with_bootloader.hex. Загрузчик нам не нужен, поэтому будем использовать обычный *.hex. Есть один нюанс – при покупке голого кристалла, он запрограммирован на RC цепочку 1Мгц. Да и вообще у atmega, есть система фьюз-битов. Выглядит это обычно не очень понятно, но конечно в среде Arduino всё это вырезано, чтоб не смущать новичков. Чтобы добраться до этих конфигураций, полезно будет скачать программу AVRDUDE. Главное окно выглядит так, здесь нужно сразу выбрать нужный МК

Переходим во вкладку Fuses – здесь, чтобы не наделать бед, а если вы запишите неправильные данные, контроллер можно превратить почти в кирпич (что не очень удобно на распаянной smd плате), я сначала СЧИТЫВАЮ биты, заодно можно убедиться в правильности подключения программатора к МК. Если всё хорошо – получаем такую картинку

Чтобы правильно выставить fuse-биты, нужно воспользоваться помощью специального калькулятора. Я пользуюсь этим. Тут также нужно выбрать чип, способ тактирования и другие параметры. В принципе для смены частоты достаточно сменить блок CKSEL фьюзов. В данном случае я выбрал Int RC – 8Mhz.

Смотрите также:  Таймер на avr

Получил картинку фьюзов.

А теперь переносим параметры в AVR DUDE, также калькулятор включает делитель на 8, бит CKDIV8, он нам не нужен. Можете пользоваться нижеприведённым скриншотом, для запуска atmega 328p на 8Мгц от внутреннего RC осциллятора.

Жмём запись – и МК принимает необходимую конфигурацию. Теперь осталось залить прошивку, но ведь она у нас рассчитана на 16Мгц, но в Arduino IDE, есть простой путь скомпилировать прошивку для atmega 328, для частоты 8Мгц. Нужно выбрать плату arduino pro, и указать частоту 8mhz

Как вы заметили, напротив чипа, стоит напряжение 3.3В при пониженной частоте – всё верно, но это не означает, что нельзя запитать кристалл от 5В. Зато от 3.3В теперь можно). Теперь после компиляции нам осталось по знакомому пути найти файл прошивки в формате HEX, и вернуться в AVR DUDE. Выбрать файл прошивки – и нажать программирование.

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

Типовая схема включения любого микроконтроллера содержит ряд компонентов и цепей, обеспечивающих его нормальное функционирование. Совокупность этих компонентов называется обвязкой микроконтроллера. Данная публикация посвящена функциям обвязки и ее особенностям в случае использования AVR микроконтроллера ATmega328P.

Распиновка ATmega328P

Прежде чем приступить к рассмотрению обвязки ATmega328P считаю нужным привести описание его выводов. Когда мы работаем с платами Ардуино, то не задумываемся о соответствии физических выводов микроконтроллера используемым в IDE Arduino обозначениям. Когда же речь идет об отдельном микроконтроллере, то под рукой всегда нужно иметь его распиновку. Поэтому советую сохранить ее: Есть еще один интересный прием — это распечатать номера выводов и наклеить получившуюся шпаргалку на микроконтроллер, как показано на следующем фото. Мелковато, но вполне читабельно. PDF файл для печати можно скачать по этой ссылке.

Подключение питания

ATmega328P имеет двойное питание: выводы VCC и GND (выводы 7 и 8) используются для питания цифровых схем микроконтроллера; AVCC и GND (выводы 20 и 22) — для питания аналого-цифрового преобразователя. Даже если вы не собираетесь использовать АЦП, к нему должно быть подведено питание: соедините выводы VCC с AVCC, а цифровую землю с аналоговой. Если же вы планируете использовать АЦП, то в цепь питания следует добавить фильтр для уменьшения помех. Так в даташите рекомендуется соединить AVCC c VCC через индуктивность 10мкГн и с GND через емкость 0.1мкФ. Однако данная рекомендация не выполняется даже в платах Ардуино и вывод AVCC на них просто соединен с VCC.

Вывод Reset и кнопка сброса

Вывод Reset используется для генерации сигнала сброса микроконтроллера. Во время сброса все регистры ввода-вывода принимают свои начальные значения и выполняется команда, расположенная в векторе сброса (по нулевому адресу). Как правило, это переход на адрес начала программы. Но, если пользовательская программа не использует прерывания, то она может располагаться сразу с нулевого адреса.

Схема начального сброса

Обвязка для предыдущих моделей микроконтроллеров обязательно включала в себя схему начального сброса, состоящую из резистора и конденсатора, которая обеспечивала постепенное нарастание сигнала на входе Reset при включении питания. Таким образом осуществлялся начальный сброс микроконтроллера. Сейчас же схема начального сброса (Power-on-Reset) присутствует, пожалуй, в каждом современном микроконтроллере. Внешняя цепь может потребоваться при наличии особых требований к длительности импульса сброса (в случае медленного нарастания напряжения питания).

Схема начального сброса микроконтроллера

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

Обвязка Reset и защита от непреднамеренного сброса

Еще один момент, требующий внимания — это стабилизация сигнала высокого уровня на входе Reset с целью предотвращения непреднамеренного сброса микроконтроллера. В публикации о подтягивающих резисторах я уже рассказывал о проблемах, возникающих, когда цифровой вход не подсоединен ни к питанию, ни к земле: электромагнитные наводки становятся причиной изменения уровня сигнала на этом входе. При его опросе микроконтроллер будет случайным образом фиксировать то высокий, то низкий уровень сигнала. В случае со входом Reset это приведет к непреднамеренному сбросу. Данная проблема решается добавлением в схему подтягивающего резистора, который гарантирует сигнал нужного уровня на входе Reset (в случае с AVR — высокого уровня). Востребованность подтягивающих резисторов как для входа Reset, так и для обычных линий ввода-вывода, привела к добавлению их в микроконтроллеры. В ATmega328P имеется собственный подтягивающий резистор на входе Reset номиналом 30-60кОм (конкретное значение из указанного диапазона устанавливается на заводе-изготовителе при калибровке). И тут часто возникает вопрос: нужен ли внешний подтягивающий резистор на входе Reset или можно обойтись внутренним. Всё зависит от конкретной ситуации и условий, в которых будет работать микроконтроллер: для любительских, «бытовых» проектов, возможно, будет достаточно встроенного резистора; для устройств, предназначенных для работы в промышленности, в неблагоприятных условиях номинал встроенного резистора может оказаться недостаточен. Это, что называется, слабая подтяжка, в таких случаях цифровой вход подтягивают внешним резистором номиналом в несколько кОм. Зачастую одного только подтягивающего резистора оказывается недостаточно и для дополнительной защиты от шума в схему добавляется конденсатор. Вход Reset AVR микроконтроллеров имеет собственный фильтр нижних частот. Внешний конденсатор, установленный между выводом Reset и землей, является дополнительной защитой. Однако, его нельзя добавлять в схему, если предполагается внутрисхемное программирование с помощью PDI или DebugWIRE. В отличие от выводов общего назначения, имеющих защитные диоды и к земле, и к питанию, для входа Reset предусмотрен единственный диод — на землю. Это объясняется тем, что Reset используется для высоковольтного программирования, когда на него подается сигнал 12В. Поэтому если микроконтроллер должен работать в условиях помех от электростатических разрядов (в англоязычной технической документации используется термин ESD — Electrostatic Discharge) и если не планируется использовать высоковольтный программатор, рекомендуется добавить в схему внешний диод между выводом Reset и линией питания. С учетом всего сказанного рекомендуемая схема обвязки вывода Reset выглядит следующим образом:

Обвязка вывода Reset для защиты от помех

Ну и в конце концов можно обойтись совсем без внешних компонентов, если просто соединить Reset с линией питания. Правда в этом случае вы уже не сможете добавить кнопку сброса и потеряете возможность внутрисхемного программирования.

Кнопка сброса

Если для защиты от случайного сброса микроконтроллера вход Reset подтягивается к питанию (встроенным резистором или внешним для более сильной подтяжки), то для сброса при нажатии на кнопку он должен замыкаться на землю. Нет ничего проще — добавляем кнопку между входом Reset и землей. Если обвязка вывода Reset содержит конденсатор как в вышеприведенной схеме, то для предотвращения его закорачивания через кнопку (что может привести к возникновению помех) разработчики из Microchip рекомендуют добавлять в схему резистор порядка 330Ом:

Подключение кнопки сброса к микроконтроллеру

Подключение резонатора

Кварцевый или керамический резонатор обеспечивают работу встроенного тактового генератора. Резонатор подключается к выводам XTAL1, XTAL2 микроконтроллера. Для его стабильной работы в схему добавляются керамические конденсаторы, номинал которых подбирается в соответствии с рекомендациями производителя резонатора или микроконтроллера. Так в даташите на ATmega328P для резонаторов на 400кГц и выше рекомендуется использовать конденсаторы номиналом 12..22пФ:

Подключение резонатора к микроконтроллеру

При использовании резонатора на 32.768кГц можно задействовать внутренние конденсаторы, подключив их к XTAL1 и XTAL2 установкой фьюзов CKSEL. При тактировании от внутреннего RC-генератора необходимость во внешнем резонаторе и согласующих конденсаторах отпадает.

Заключение

Итак, большинство компонентов, составляющих типовую обвязку, уже присутствуют в современных микроконтроллерах. Однако, их может оказаться недостаточно для стабильной работы в жестких условиях, в этом случае требуется принятие дополнительных мер. И здесь сложно предусмотреть все возможные ситуации и гарантировать успешную работу того или иного решения. Поэтому лучшая рекомендация — это всегда проверять работу схемы в реальных условиях. Интересный документ по теме — рекомендации Microchip, которые необходимо соблюдать при проектировании оборудования с использованием микроконтроллеров AVR, ссылка: AN2519 AVR Microcontroller Hardware Design Considerations 

Arduino Nano — аналог флагманской Arduino Uno в миниатюрном размере. %D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:arduino-nano:arduino-nano.1.jpeg На Arduino Nano предусмотрено всё необходимое для удобной работы с микроконтроллером: 14 цифровых входов/выходов (6 из них могут использоваться в качестве ШИМ-выходов), 6 аналоговых входов, кварцевый резонатор на 16 МГц, разъём Mini-USB, разъём питания, разъём для внутрисхемного программирования (ICSP) и кнопка сброса.

UPD: Вышла актуальная усовершенствованная версия платы под названием Arduino Nano Every.

Видеообзор

Подключение и настройка

Для запуска платформы скачайте и установите на компьютер интегрированную среду разработки Arduino — Arduino IDE.

При выборе платформы выбирайте Arduino Nano.

У меня не появляется новых устройств при подключении Arduino Nano

Если всё получилось — можете смело переходить к экспериментам.

Элементы платы

%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:arduino-nano:arduino-nano_annotation.png

Микроконтроллер ATmega328P

Сердцем платформы Arduino Nano является 8-битный микроконтроллер семейства AVR — ATmega328P с тактовой частотой 16 МГц. Контроллер предоставляет 32 КБ Flash-памяти для хранения прошивки, 2 КБ оперативной памяти SRAM и 1 КБ энергонезависимой памяти EEPROM для хранения данных.

Микросхема FT232R

Микросхема FTDI FT232R обеспечивает связь микроконтроллера ATmega328P с USB-портом компьютера. При подключении к ПК Arduino Nano определяется как виртуальный COM-порт.

USB-UART преобразователь общается с микроконтроллером ATmega328P по интерфейсу UART через пины 0(RX) и 1(TX). Рекомендуем не использовать эти контакты в своём проекте.

Светодиодная индикация

Имя светодиода Назначение
RX и TX Мигают при обмене данными между Arduino Nano и ПК.
L Пользовательский светодиод подключённый к 13 пину микроконтроллера. При высоком уровне светодиод включается, при низком – выключается.
ON Наличие питания на Arduino Nano.

Разъём Mini-USB

Разъём Mini-USB предназначен для прошивки платформы Arduino Nano с помощью компьютера.

Регулятор напряжения 5 В

Линейный понижающий регулятор напряжения LM1117MPX-5.0 с выходом 5 вольт обеспечивает питание микроконтроллера ATmega328P и другой логики платформы. Максимальный выходной ток составляет 800 мА.

ICSP-разъём для ATmega328

ICSP-разъём предназначен для загрузки прошивки в микроконтроллер ATmega328 через программатор.

Через контакты ICSP Arduino Nano общается с платами расширения по интерфейсу SPI.

Распиновка

%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:arduino-nano:arduino-nano_pinout.png

Пины питания

  • VIN: Входной пин для подключения внешнего источника питания с напряжением в диапазоне от 7 до 12 вольт.
  • 5V: Выходной пин от регулятора напряжения на плате с выходом 5 вольт и максимальных током 800 мА. Питать устройство через вывод 5V не рекомендуется — вы рискуете спалить плату.
  • 3.3V: Выходной пин от стабилизатора микросхемы FT232R с выходом 3,3 вольта и максимальных током 50 мА. Питать устройство через вывод 3V3 не рекомендуется — вы рискуете спалить плату.
  • GND: Выводы земли.
  • AREF: Пин для подключения внешнего опорного напряжения АЦП относительно которого происходят аналоговые измерения при использовании функции analogReference() с параметром «EXTERNAL».

Порты ввода/вывода

  • Цифровые входы/выходы: пины –13 Логический уровень единицы — 5 В, нуля — 0 В. Максимальный ток выхода — 40 мА. К контактам подключены подтягивающие резисторы, которые по умолчанию выключены, но могут быть включены программно.
  • ШИМ: пины 3,5,6,9,10 и 11 Позволяет выводить аналоговые значения в виде ШИМ-сигнала. Разрядность ШИМ не меняется и установлена в 8 бит.
  • АЦП: пины A0A7 Позволяет представить аналоговое напряжение в цифровом виде. Разрядность АЦП не меняется и установлена в 10 бит. Диапазон входного напряжения от 0 до 5 В. При подаче большего напряжения — вы убьёте микроконтроллер.
  • TWI/I²C: пины A4(SDA) и A5(SCL) Для общения с периферией по интерфейсу I²C. Для работы используйте библиотеку Wire.
  • SPI: пины 11(MOSI), 12(MISO), 13(SCK) и 10(SS) Для общения с периферией по интерфейсу SPI. Для работы — используйте библиотеку SPI.
  • UART: пины 0(RX) и 1(TX) Используется для коммуникации платы Arduino с компьютером или другими устройствами по последовательному интерфейсу. Выводы 0(RX) и 1(TX) соединены с соответствующими USB-UART преобразователя FT232R. Для работы с последовательным интерфейсом — используйте методы библиотеки Serial.

Принципиальная и монтажная схемы

Характеристики

  • Микроконтроллер: ATmega328P
  • Ядро: 8-битный AVR
  • Тактовая частота: 16 МГц
  • Flash-память: 32 КБ (2 КБ занимает загрузчик)
  • SRAM-память: 2 КБ
  • EEPROM-памяти: 1 КБ
  • Портов ввода-вывода всего: 20
  • Портов с АЦП: 8
  • Разрядность АЦП: 10 бит
  • Портов с ШИМ: 6
  • Разрядность ШИМ: 8 бит
  • Аппаратных интерфейсов SPI: 1
  • Аппаратных интерфейсов I²C / TWI: 1
  • Аппаратных интерфейсов UART / Serial: 1
  • Номинальное рабочее напряжение: 5 В
  • Максимальный выходной ток пина 5V: 800 мA
  • Максимальный выходной ток пина 3V3: 50 мA
  • Максимальный ток с пина или на пин: 40 мА
  • Допустимое входное напряжение от внешнего источника: 7–12 В
  • Габариты: 18×45 мм

Ресурсы

  • Arduino Nano в магазине.
  • Векторное изображение Arduino Nano (Top)
  • Векторное изображение Arduino Nano (Bottom)
  • Datasheet на микроконтроллер Atmega328P
  • Datasheet на USB-UART преобразователь FT232R
  • Datasheet на понижающий регулятор напряжения LM1117MPX-5.0

Используемые источники:

  • https://wreckage.ru/move-from-arduino-to-the-serial-model-minimum-periphery-atmega328/
  • https://tsibrov.blogspot.com/2019/02/atmega328p.html
  • http://wiki.amperka.ru/продукты:arduino-nano

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации