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

Про Ардуино и не только

0e671c.jpg

  • Цена: $20.08/10шт с панельками и кварцами

Раз уж Arduino стал практически мейнстримом, напишу обзор про микроконтроллеры ATMEGA328 Данный микроконтроллер является сердцем Arduino Uno, Nano, Pro Mini и ряда других плат. Но Arduino — это слишком просто. Купил, подключил, загрузил программу и вот уже гордо мигает светодиод на плате. Мы же легких путей не ищем и программируем голые микроконтроллеры на ассемблере поэтому и куплены данные микросхемы. Тем кому интересно, прошу под кат. Итак зачем все это нужно? Ну во первых, это экономия в деньгах (Правда с ценами на Pro Mini очень сомнительная) Во вторых, экономия места В третьих, микросхемы без всяких преобразователей и светодиодов очень экономичны, что немаловажно в проектах с батарейным питанием. В четвертых, проекты на Arduino весьма неопрятны из за мотка проводов вокруг платы. Микроконтроллеры же вполне можно паять на макетках или нормальных печатных платах. Ну и в пятых, это ведь интересно и познавательно! Заказал я данные микросхемы на Алиэксперсс. Лот состоит из 10 микроконтроллеров, 10 панелек для них, и 10 кварцевых резонаторов на 16МГц. Сейчас лот подорожал до $35 и купить за адекватную цену Atmegу можно разве что на Таобао. Заказ шел целых 97 дней. Трек быстро отозвался в Китае и завис, не дойдя до России. Я успел пообщаться с продавцом, открыть спор и выиграть его, когда нежданно посылка нарисовалась в Москве. Деньги я вернул продавцу на PayPal, видимо у него где-то есть еще и магазин. Итак все довольны — продавец получил заслуженную прибыль, а я долгожданный товар. Подробное описание ATMEGA328 можно посмотреть на сайте atmel.com. Буковка «P» в названии означает низкое энергопотребление, а PU-корпус DIP28, который удобно паять обычным паяльником. Сам товар:

Контроллер с панелькой и кварцем7d8395.jpg Как это все готовить? Для программирования взят очень дешевый программатор USBasp за 3.14 (Пи?) баксов. Для простоты, используем ICSP разъем стандартной Arduino UNOe2221d.jpg В панельку Arduino вставляем наш микроконтроллер. Далее качаем и устанавливаем драйвер для программатора. Запускам стандартную ArduinoIDE, выбираем в меню «Сервис->Программатор->USBasp», плату ArduinoUNO и нажимаем «Записать загрузчик». После окончания процесса загрузки мы получаем контроллер, такой же как и в UNO, в который можно уже в дальнейшем заливать программы через стандартный USB Ардуины. Далее мне захотелось использовать встроенный кварцевый резонатор на 8МГц, чтобы иметь минимум деталей на плате. Открываем файл с описанием микроконтроллера c:Program Files (x86)Arduinohardwarearduinoboards.txt Копируем блок с Uno и правим в нм Фьюзы. Это специальные биты для настроки контроллера. Прочитать про них можно здесь. Сконфигурировать при помощи онлайн-калькулятора. Загрузив в калькулятор значения от UNO я устанавливаю стандартное значение с встроенным кварцем на 8МГц. Затем заменяю значение в файле с описанием плат и получаю такое описание: Затем в среде Arduino выбираю свой микроконтроллер и снова прошиваю загрузчик. Все, я получил микроконтроллер, в который можно заливать скетчи на Arduino UNO плате, а затем использовать его без внешнего кварца. Можно не прошивать контроллеру загрузчик, но тогда заливать в него программы всегда придется через программатор. Чтобы не соединять самому 10пинвый разъем на USBasp к 6-ти пиновому ICSP на Arduino заказал такой переходник Потом подумал, и заказал такой переходник для программатора, позволяющий обходится без Arduino Uno. Так что надеюсь, следующие микросхемы буду шить с большим комфортом. Рекомендую ли я данные микроконтроллеры — скорее нет. При цене на Arduino Pro Micro — $2.88 это не особенно целесообразно. Сейчас я бы купил Atmega8 стоимостью около 1$ или Atiny, для проектов, где не нужно возможности Atmega328. Где я все это планирую применять? Хочу сделать сенсорные беспроводные выключатели света, вентиляторов и др. устройств, причем разместить их прямо в корпусах выключателей. В люстрах, для получения радиокоманд от этих выключателей, а также для диммирования. В миниатюрном погодном датчике на аккумуляторе за окном. В контроллере управления вентилятором на кухне и в ванной. Да мало ли сколько еще «нужных и полезных» устройств можно сделать? А как же мозг не вскипел все это реализовывать? Ну конечно же был помощник Все статьи мои статьи можно найти в моем блоге samopal.proDo It Yourself

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

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

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

Знаете, на 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 см, чтобы упаковать в маленький корпус, и проделаем эти шаги на практике.

И снова привет всем любителям и новичкам программирования Arduino!)

Это третье видео (статья) из серии В«основы Arduino для начинающихВ» и сегодня мы поговорим о внутренностях платы Arduino Uno и их предназначении, а так же уделим немного внимания её микроконтроллеру Atmega328.

Предыдущие выпуски вы найдете здесь: ,1,2

Традиционно для вас доступны два варианта представления материала — видео и текст, надеюсь, оба варианта будут интересными 🙂

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

С чего начинается любая схема? Конечно же, это различные компоненты, отвечающие за ее питание. Поэтому первым в нашей функциональной схеме мы выделим именно это. Вообще, у Arduino есть три пути получить энергию для работы: это питание по шине USB, от специального разъема питания на плате или входа Vin. Давайте разберем их все по отдельности.

Подключая плату к компьютеру посредством USB-интерфейса, вы подаете питание на Arduino благодаря четырехпроводной структуре шины USB, где 2 провода отвечают за передачу команд, а два других провода за непосредственное питание устройств. Именно по этим проводам Arduino и получает рабочее напряжение величиной 5В как это видно на принципиальной схеме. Так же, это напряжение поступает на вход стабилизатора напряжения, который понижает его до +3.3В, что необходимо для питания некоторых отдельных компонентов, подключаемых к Arduino, рассчитанных на это напряжение. Кстати, в качестве защиты от большого потребления тока вашей платой, на самом входе питающей линии разработчики установили небольшой предохранитель на 500мА, который, в случае различных обстоятельств, защитит USB-порт компьютера и плату Arduino от возможного выхода из строя.

все картинки кликабельны 🙂

Итак, следующим на очереди идет разъем питания для подключения, например, сетевого AC/DC-адаптера, аккумулятора или батареи. В отличие от USB-порта, где предполагается стабильное наличие напряжения 5В (или около того), в случае разъема питания ситуация складывается несколько иная, поскольку он рассчитан на подключение к нему источников питания различных напряжений. Диапазон этих значений колеблется в пределах от 6 до 20В и, при прямом подключении, это совсем не годится для компонентов нашей схемы. Поэтому разработчики поставили на входе питания стабилизаторы напряжения — один на 5В, другой на 3.3В. А так же парочку конденсаторов и диод, в качестве элементов борьбы с помехами и защиты от перепутывания полярности питания. Стоит отметить, что для стабилизатора напряжения всегда нужно напряжение, несколько выше того уровня, до которого он будет его понижать, и специфика стабилизатора такова, что уменьшение напряжения питания ниже 7В приводит к уменьшению напряжения на выводе 5V, что может стать причиной нестабильной работы устройства. Использование напряжения больше 12В может приводить к перегреву стабилизатора напряжения и выходу платы из строя. Именно поэтому, рекомендуется использовать источник питания с напряжением в диапазоне от 7 до 12В.

И, наконец, вывод Vin на плате Arduino. Если посмотреть на схему питания, то можно увидеть, что, при подключенном источнике питания к разъему, с этого вывода можно будет получить это же самое напряжение, правда, чуть меньшее из-за небольшого падения на диоде.

Ну а если теперь подключить источник питания к этому выводу, то напряжение так же попадет на стабилизатор 5В и плата будет запитана. Это удобно в случае использования различных батарей или аккумуляторов без специальных разъемов питания.

Стоит отметить, что Arduino сама выбирает источник питания с самым большим напряжением, и в этом ей помогает специальный элемент, называющийся компаратором. Если в двух словах, то компаратор, это такое устройство, которое сравнивает подаваемый на него сигнал с каким-либо опорным значением, и, если этот сигнал превышает опорное значение, то компаратор выдает на своем выходе логическую единицу (в нашем случае +5В).

Итак, с блоком питания разобрались, идем дальше.

На очереди у нас связующее звено между компьютером и программируемым нами микроконтроллером. Это еще один микроконтроллер ATmega8U2, либо, в более новых версиях ATmega16U2, который практически не заметен на плате.

Этот микроконтроллер представляет собой USART, что в переводе означает В«Универсальный синхронно-асинхронный приемо-передатчикВ». Именно он осуществляет передачу данных по самому распространенному на сегодняшний день протоколу RS-232, c помощью которого связывает COM-порт вашего компьютера и программируемый микроконтроллер.

Помните, мы говорили, что USB-кабель имеет 4 провода, два из которых питающие, а два других – сигнальные? Так вот, именно по сигнальным проводам и происходит передача данных от ПК к микроконтроллеру и обратно, а свидетельствуют о приеме, либо передаче, специальные светодиоды на плате, имеющие названия Rx и Tx, где R это сокращение слова Receive, то есть прием, а T – transmit – то есть отправление. Причем выводы Rx и Tx всегда подключаются разноименно, то есть Rx принимающего устройства соединяется с Tx передающего, и наоборот. Это видно из схемы подключения двух микроконтроллеров на плате Arduino. Для тех, кто желает знать о том, как передаются данные по USB при помощи UART, я рекомендую ознакомиться с этой ссылкой.

Ну вот, наконец, мы и подошли с вами к главному компоненту платы Arduino – микроконтроллеру Atmega328P, который, собственно, и является основным вычислительным центром этой платформы. Давайте разберемся, из каких основных частей он состоит.

В обобщенном виде, любой микроконтроллер можно разбить на три составляющие части:

1. Вычислительный блок, иначе именуемый как арифметико-логическое устройство или процессор. Также, наверняка многие из вас слышали или видели такую аббревиатуру как CPU (Central Processing Unit) что в переводе на русский значит «центральное процессорное устройство». Именно этот блок является самой главной частью системы и предназначен он для выполнения различных операций с числами. А вот уже последовательность этих операций называется программой. Каждая операция кодируется в виде числа и записывается в память микроконтроллера, но об этом, в другой раз..

2. Собственно, второй основной частью микроконтроллера и является модуль памяти. Это специализированное электронное устройство, которое представляет собой набор ячеек, в каждой из которых может храниться одно число. Именно здесь хранится написанная вами программа и другие команды микроконтроллера. Память делится на оперативную — ОЗУ (оперативное запоминающее устройство) и постоянную – ПЗУ (постоянное запоминающее устройство. Принципиальная разница между этими видами памяти в том, что в случае с оперативной памятью, при выключении питания микроконтроллера, записанные значения не сохраняются и существуют только до тех пор, пока это питание присутствует. Например, такая память используется для хранения каких-либо промежуточных результатов вычислений. А вот данные, хранимые в постоянной памяти, наоборот, никак не зависят от наличия питания и могут быть использованы микроконтроллером сразу же после включения. В такую память, например, записывается вся разработанная вами программа, и она никуда не пропадет при повторной подаче напряжения на микроконтроллер.

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

Конечно же, не стоит забывать, что некоторые ножки отвечают за питание и прочие компоненты, подключаемые к микроконтроллеру, но большинство из них все-таки являются портами ввода-вывода, отвечающими за непосредственное управление микроконтроллером различными датчиками, модулями, светодиодами, транзисторами и так далее. Подавляющее большинство этих портов были выведены разработчиками Arduino по краям платы и, для удобства работы, подписаны.

Именно с этими портами нам и предстоит работать в дальнейшем, ведь суть любой микропроцессорной системы сводится к управлению чем-то извне, а иначе, зачем нам микроконтроллеры? 🙂

Как уже было сказано ранее, центральный процессор является основным мозгом микроконтроллера и именно он управляет модулем памяти и портами ввода-вывода. Более подробно о работе с портами ввода-вывода мы поговорим уже через один выпуск, когда будем работать со светодиодом и кнопкой, ну а сейчас я бы хотел заострить внимание на еще одном компоненте на плате, который мы не назвали – это генератор тактовых импульсов или кварцевый резонатор.

Не пугайтесь таких сложных названий, на самом деле, все просто – для работы любого микроконтроллера нужен некий генератор импульсов, благодаря которому он сможет осуществлять свою деятельность по последовательному выполнению команд. Например, мы написали с вами программу мигания светодиодом 10 раз в секунду. Но как микроконтроллер узнает, не имея никакого представления о длительности одной секунды, когда ему пора включить светодиод, а когда пора выключить? Именно благодаря кварцевому резонатору, который, в зависимости от его номинала, генерирует определенное число импульсов за одну секунду, это число имеет единицы измерения – герцы и называется частотой. Например, частота, равная 5Гц означает 5 импульсов в секунду, 10Гц — десять импульсов и так далее.

Так же на плате Arduino вы могли заметить небольшую кнопку – она называется кнопкой сброса или RESET, и при нажатии на нее переводит наш микроконтроллер в исходную позицию, с которой он начинал свою работу.

Итак, мы познакомились с вами с основными составляющими платы Arduino и совсем немного поговорили о микроконтроллере ATmega. Хочу заметить, что изучению структуры и принципам работы микроконтроллеров можно посвятить большой отдельный курс, поэтому я не стал углубляться в эту тему и рассчитываю на вашу дальнейшую любознательность и стремление изучить и понять как можно большее в этой интересной сфере. В качестве дальнейшего учебного пособия по изучению микроконтроллеров AVR, не сочтите за рекламу, я советую вам книгу Белова А.В., в которой, на мой взгляд, достаточно доступным языком описаны все нюансы работы с микроконтроллерами.

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

  • https://mysku.ru/blog/aliexpress/22070.html
  • https://wreckage.ru/move-from-arduino-to-the-serial-model-minimum-periphery-atmega328/
  • story/vyipusk_3_osnovyi_arduino_dlya_nachinayushchikh_arduino_iznutri__struktura_sostavlyayushchie_i_ikh_naznachenie_mikrokontroller_atmega328p_4497606

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