Способы чтения и управления портами ввода-вывода Arduino
Для взаимодействия с окружающим миром нужно настроить выводы микроконтроллера на приём или передачу сигнала. В результате каждый пин будет работать в режиме входа и выхода. На всеми любимой плате Arduino сделать это можно двумя способами, как именно вы узнаете из этой статьи.
Способ первый – стандартный язык для Arduino IDE
Всем известно, что Ардуино программируется на C++ с некоторой адаптацией и упрощениями для новичков. Он называется Wiring. Изначально все порты ардуино определяются как входы, и нет нужды задавать это в коде.
Порты обычно прописываются в функции инициализации переменных:
Для этого используется команда pinMode, у неё достаточно простой синтаксис, сначала указывается номер порта, затем его роль через запятую.
pinMode (nomer_porta, naznachenie)
С помощью этой команды внутренняя схема микроконтроллера конфигурируется определенным образом.
Есть три режима в которых может работать порт: INPUT – вход, в этом режиме происходит считывание данных с датчиков, состояния кнопок, аналогового и цифрового сигнала. Порт находится в т.н. высокоимпедансном состоянии, простыми словами – у входа высокое сопротивление. Устанавливается это значение, на примере 13 пина платы, при необходимости так:
pinMode (13, INPUT);
OUTPUT – выход, в зависимости от команды прописанной в коде порт принимает значение единицы или нуля. Выход становится своего рода управляемым источником питания и выдаёт максимальный ток (в нашем случае 20 мА и 40 мА в пике) в нагрузку к нему подключенную. Чтобы назначить порт как выход на Arduino нужно ввести:
pinMode (13, OUTPUT);
INPUT_PULLUP – порт работает как вход, но к нему подключается т.н. подтягивающий резистор в 20 кОм.
Условную внутреннюю схему порта в таком состоянии вы видите ниже. Особенностью этого входа является то, что входной сигнал воспринимается как проинвертированный («единица» на входе воспринимается микроконтроллером как «ноль»). В таком режиме вы можете не использовать внешние подтягивающие резисторы при работе с кнопками.
pinMode (13, INPUT_PULLUP);
Данные принимаются с портов и передают на них командами:
digitalWrite(пин, значение) – переводит выходной пин в логическую 1 или 0, соответственно на выходе появляется или исчезает напряжение 5В, например digitalWrite (13, HIGH) – подаёт 5 вольт (логическую единицу) на 13 пин, а digitalWrite (13, low) – переводит 13 пин в состояние логического ноля (0 вольт);
digitalRead(пин) – считывает значение со входа, пример digitalRead (10), считывает сигнал с 10 пина;
analogRead(пин) – считывает аналоговый сигнал с аналогового порта, вы получаете значение в диапазоне от 0 до 1023 (в пределах 10-битного АЦП), пример analogRead (3).
Способ два – управление портами через регистры Atmega и ускорение работы кода
Такое управление конечно простое, но в этом случае есть два недостатка – большее потребление памяти и низкое быстродействие при работе с портами. Но вспомните что такое Arduino независимо от варианта платы (uno, micro, nano)? В первую очередь, это микроконтроллер AVR семейства ATMEGA, в последнее время используется МК atmega328.
В Arduino IDE вы можете программировать на родном для этого семейства языке C AVR, так, как если бы вы работали с отдельным микроконтроллером. Но обо всем по порядку. Чтобы управлять портами Ардуино таким образом вам нужно сначала внимательно рассмотреть следующую иллюстрацию.
Возможно кому-то будет нагляднее изучать порты в таком виде (на рисунке тоже самое, но в другом оформлении):
Здесь вы видите соответствие выводов Ардуино и названий портов атмеги. Итак, у нас есть 3 порта:
Исходя из изображенного на рисунках, я составил таблицу соответствия портов Ардуино и Атмеги, она пригодится вам в дальнейшем.
У Atmega есть три регистра длиной в 8 бит, которые управляют состоянием портов, например, порта B разберемся в их назначении проведя аналогии со стандартными средствами wiring описанными в начале статьи:
PORTB – Управление состоянием вывода. Если пин находится в режиме «Выхода», то 1 и 0 определяют наличие этих же сигналов на выходе. Если же пин находится в режиме «Входа», то 1 подключает подтягивающий резистор (тоже что и INPUT_PULLUP рассмотренный выше), если 0 – высокоимпедансное состояние (аналог INPUT);
PINB – регистр чтения. Соответственно в нём находится информация о текущем состоянии выводов порта (логическая единица или ноль).
DDRB – регистр направления порта. С его помощью вы указываете микроконтроллеру чем является порт – входом или выходом, при этом «1» — выход, а «0» — вход.
Вместо буквы «В» может быть любая другая согласно названиям портов, например, PORTD или PORTC аналогично работают и другие команды.
Научитесь разрабатывать устройства на базе микроконтроллеров и станьте инженером умных устройств с нуля: Инженер умных устройств
Помигаем светодиодом, заменим стандартную функцию digitalWrite(). Для начала вспомним как выглядит исходный пример из библиотеки Arduino IDE.
Это код всем известного «blink», который демонстрирует мигание светодиодом, встроенным в плату.
В комментариях даны пояснения к коду. Логика такой работы заключается в следующем.
Команда PORTB B00100000 переводит PB5 в состояние логической единицы, смотрим, а те картинки и таблицу что расположены ниже и видим, что PB5 соответствует 13 пину Ардуины.
Буква «В» перед цифрами говорит о том, что мы в записываем значения в двоичном виде. Нумерация в двоичном коде идёт справа налево, т.е. здесь единица стоит в шестом с правого края бите, что говорит микроконтроллеру о взаимодействии с состоянием шестого бита регистра порта B (PB5). В таблице ниже изображена структура порта D, она аналогична и приведена для примера.
Вы можете задавать значение не в двоичном, а в шестнадцатеричном виде, например, для этого открываем калькулятор windows и в режиме «ВИД», выбираем вариант «Программист».
Вводим желаемое число:
И нажимаем на HEX:
В таком случае переносим это всё в Arduino IDE, но уже вместо приставки «В» будет «0х».
Но при таком вводе возникает проблема. Если у вас к другим пинам подключено что-либо, то внося команду типа B00010000 – вы все выводы кроме 13 (PB5) обнулите. Вы можете вносить данные на каждый пин по отдельности. Это будет выглядеть следующим образом:
Такая запись может показаться непонятной, давайте разберемся.
Это операция логического сложения, |= значит прибавить к содержимому порту что-либо.
А это значит, что нужно сложить слово из 8 бит в регистре с единицей, смещенной на 5 бит – в результате, если было 11000010 получается 11010010. На этом примере видно, что изменился только PB5, остальные биты этого регистра остались без изменений, как и остались неизменными состояния выводов микроконтроллера.
Но при логическом сложении возникает проблема – вы не можете превратить единицу в ноль, потому что:
Нам на помощь придёт логическое умножение и инвертирование:
&= значит умножить содержимое порта на определенное число.
А это число, на которое мы умножает. Знак «
» обозначает инвертирование. В нашем случае проинвертированная единица является нулем. То есть мы умножаем содержимое порта на ноль, сдвинутый на 5 бит. Например, было 10110001, стало 10100001. Остальные биты остались без изменений.
Тоже самое можно сделать с помощью операции инвертирования (^):
Чтение с портов, аналог digitalRead() выполняют с помощью регистра PIN, на практике это выглядит так:
Здесь мы проверяем равно ли выражение в скобках реальному состоянию портов, т.е. аналогично тому, если бы мы написали if (digitalRead(12) == 1).
Пошаговое обучение программированию и созданию устройств на микроконтроллерах AVR: Программирование микроконтроллеров для начинающих
Заключение
Для чего такие сложности с управлением портами, если можно использовать стандартные удобные функции? Всё дело в быстродействии и размерах кода. При использовании второго способа, рассмотренного в статье размер кода, значительно снижается, а быстродействие увеличивается на несколько порядков. Стандартный digitalWrite() выполнялся за 1800 мкс, а запись прямо в порт за 0,2 мкс, а digitalRead() за 1900 мкс, а стал также за 0,2 мкс. Этот способ управления был найден на просторах сети и часто встречается в коде готовых проектов.
Любите умные гаджеты и DIY? Станьте специалистом в сфере Internet of Things и создайте сеть умных гаджетов!
Записывайтесь в онлайн-университет от GeekBrains:
Изучить C, механизмы отладки и программирования микроконтроллеров;
Получить опыт работы с реальными проектами, в команде и самостоятельно;
Получить удостоверение и сертификат, подтверждающие полученные знания.
Starter box для первых экспериментов в подарок!
После прохождения курса в вашем портфолио будет: метостанция с функцией часов и встроенной игрой, распределенная сеть устройств, устройства регулирования температуры (ПИД-регулятор), устройство контроля влажности воздуха, система умного полива растений, устройство контроля протечки воды.
Вы получите диплом о профессиональной переподготовке и электронный сертификат, которые можно добавить в портфолио и показать работодателю.
Источник
Настройка плат Arduino при первом подключении к ПК
В этой инструкции, для примера, рассмотрим начало работы в операционной системе Windows. Для операционных систем Microsoft (Windows 2000/Vista) различия незначительны, они в основном относятся к названиям вкладок в Диспетчере устройств. В прочих операционных средах, таких как Linux, FreeBSD, Mac OS X и т.д, порядок настройки значительно отличается. При необходимости организовать работу с этим программным обеспечением, рекомендуем искать ответы на вопросы на основном сайте разработчика //www.arduino.cc .
В качестве подключаемой платформы возьмём Arduino Uno. Разница с другими платами у неё минимальна.
Кабель для связи с ПК
Для передачи данных с персонального компьютера на Arduino, необходимо подыскать соответствующий кабель. С отдельными платами кабель не поставляется, только есть в стартовом наборе Arduino для практикующего конструктора-программиста.
Arduino Uno, Arduino Mega 2560 соединяются кабелем со штекерами USB тип А. Такой кабель часто применяется для подключения принтера или сканера.
Arduino Leonardo, Arduino Due для подключения имеют гнездо micro USB тип В.
Arduino Nano, Freeduino Nano подключаются через гнездо mini USB тип B.
Для подключения Freeduino MaxSerial потребуется кабель последовательного порта 9M-9F.
Arduino IDE — интегрированная среда разработки софта для Arduino устройств, устанавливаемая на компьютер.
В зависимости от модели платы важно правильно выбрать подходящую версию Arduino IDE:
- Arduino IDE 1.6.4 — для многих плат, кроме Arduino Leonardo ETH и Arduino M0 (программное обеспечение от Arduino LLC).
- Arduino IDE 1.7.7 — для всех типов плат (программное обеспечение от Arduino SRL).
Частичная несовместимость ПО стала следствием разногласий между отцами-основателями Arduino итальянцами Массимо Банзи и Джанлука Мартино, которые не смогли договориться о дальнейшем курсе развития компании. Завод, на котором разрабатывают и производят оригинальные платформы Arduino, под управлением Джанлука Мартино откололся от головной компании Arduino LLC и стал самостоятельной компанией Arduino SRL (ранее Smart Projects Srl).
Запуск Arduino IDE
После запуска успешно установленной Arduino IDE, должна открыться графическая консоль, как на картинке внизу.
Возникла неполадка: Arduino IDE не запускается.
Способ устранения.
Скорее всего, на компьютере установлена неподходящая виртуальная среда JRE (Java Runtime Environment), необходимая для запуска графических приложений.
Возвратитесь к переустанавке Arduino IDE: на этот раз инсталлятор развернет работу по настройке JRE.
Подключение плат Arduino к компьютеру
После успешного запуска среды разработки Arduino IDE пришло время связать какую-то платформу Arduino с компьютером. Как вы уже знаете, подключение плат Arduino к ПК выполняется через USB-кабель.
Соединив консоль Arduino с ПК, на ней загорится один светодиод «ON», и начнёт мигать другой «L». Это означает, что через кабель подано питание и микроконтроллер начал выполнять предустановленную на заводе программу Blink (мигание).
Остается только узнать, какой номер COM-порта присвоил компьютер нашей плате Arduino, что важно для корректной работы программного обеспечения Arduino IDE с новым устройством.
Номер COM-порта можно узнать в «Диспетчере устройств», вкладка «Порты (COM и LPT)».
На системах Windows скорее всего нашей Arduino Uno с последовательным интерфейсом присвоится один из портов COM1 или COM2. Для Ардуино с USB-контроллером портом ввода будет COM4, COM5, COM6 или выше.
На системах Linux последовательным портом будет USB0 либо USB1.
Высветилось новое устройство Arduino в «Диспетчере устройств» — значит, операционная система распознала нашу плату, нашла для неё подходящий USB-драйвер и присвоила номер её интерфейсу. При совместном подключении ещё одной платы Arduino, ей присвоиться уже другой номер порта.
Возникла неполадка: при подключении платы Arduino к компьютеру, в Диспетчере устройств она не появляется.
Способы устранения:
- Не всунут до конца или поврежден USB-кабель или порт.
- Нет драйвера для этой платы Arduino. Если у вас китайская Arduino или от другого неизвестного производителя, попробуйте переустановить USB-драйвер вручную.
- Блокировка со стороны антивирусника.
- Неисправна плата Arduino.
Настройка Arduino IDE
В открытой Arduino IDE, заходим: Инструменты > Порт > выбираем номер порта COM — сообщаем программе номер порта, к которому подключена микропроцессорная платформа Arduino.
Чтобы у прошивающей программы Arduino IDE не осталось никаких сомнений, с чем ей предстоит работать, указываем тип нашей подключенной платы. Для этого переходим по меню: Инструменты > Плата > выбираем тип своей платы Arduino.
Возникла неполадка: во вкладке Порт нет ни одного COM-порта.
Способ устранения.
Очевидно, нарушено соединение устройства Arduino с компьютером. Верните устойчивое соединение с ПК.
Или нет драйвера. Скачать можно в конце статьи.
Как проверить подключение устройства Arduino
Все числовые данные, поступающее через COM-порт, выводятся в Монитор порта во всё той же удобной графической среде Arduino IDE. Следовательно, нажав соответствующую иконку «Монитор порта» в верхнем правом углу консоли или найдя соответствующий пункт в меню Сервис, по изменяющимся числам в открывшимся окошке можно убедиться, что через USB-кабель передаются данные, а значит, и плата Arduino надежно подключена.
Обратите внимание, что в нижней части окошка Монитора порта выводится информация о скорости работы с COM-портом «19200 baud» (19200 бит/сек). Такая скорость задана по умолчанию в предустановленном скетче на плате Arduino. В этом скетче есть строка Serial.begin(19200), в которой можно задать любую требуемую скорость передачи, но это возможно только при работе через USB-кабель. Ежели передача данных идет через радиоканал Bluetooth, то скорость обмена с COM-портом должна быть задана заранее, точно такой же, какую мы выбираем при отладке Bluetooth-модуля.
Возникла неполадка: невероятно тормозит Arduino IDE при навигации по меню.
Способ устранения.
В Диспетчере устройств, во вкладке Bluetooth Serial отключите Bluetooth-соединение с мобильным телефоном. Все внешние подключения через Bluetooth значительно пожирают объем виртуальной памяти.
Загрузка первого скетча
Соединение установлено, среда разработки настроена — теперь в ваших руках отлаженный инструмент для прошивки любых микроконтроллеров AVR серии: ATtiny, ATmega, AT90S, AT90CAN, AT90PWM.
В среде разработки Arduino IDE есть много готовых образцов для различных задач, но для проверки отзывчивости платы на перепрошивку достаточно внести небольшие изменения в предустановленную программу Blink (мигание светодиода «L» на плате).
Достаточно в открытом эскизе Blink внести свои изменения в строчке delay(1000), нажать «Вгрузить» и засечь изменения в работе платы Arduino.
Установив delay(500) — светодиод «L» будет мигать в два раза чаще, с задержкой в пол секунды.
Задав delay(100) — светодиод «L» будет загораться и гаснуть в 10 раз быстрее, чем по заводской настройке, то есть каждые 100 миллисекунд.
Возникла неполадка: при загрузке скетча всплыла ошибка вида «not in sync».
Способ устранения.
Значит, подключенная платформа Arduino не была распознана операционной системой. Вернитесь к пунктам установки правильного номера COM-порта и модели платы в меню Инструменты Arduino IDE.
Да и напоследок, если вы купили плату Arduino на каком-нибудь онлайн китайском рынке, то очень часто возникают проблемы при подключении платы – просто она не определяется. Чтобы решить эту проблему умельцами был создан драйвер . СКАЧАТЬ
Автор: Виталий Петрович.
BlogComment – В современном мире
подтянутая стройная фигура приравнивается к состоятельностью и здоровьем.
Западные селебрити демонстрируют отличный внешность
и ни капли избыточного веса.
Иногда обычный человек, значительно отличающийся
от таких эталонов, впадает в депрессию
и изводится недовольством собой.
Однако, желая найти решение проблемы самостоятельно, не всегда реально предпочесть правильную дорогу, так как способов избавления от лишним массой имеется масса.
И лишь единицы из списка действительно эффективны
и безопасны. Но универсальное препарат найдено – это капли
для похудения fire fit!
Доказанная результативность капель подтверждают огромные продажи его по
всему странам. Слим Фаер
Фит полностью безвредно и сертифицировано.
В чудесной упаковке таится естественный механизм, оперативно и безопасно истребляющий
избыточных килограммов.
У худеющих с fire fit за считанные дни наблюдается эффект уменьшения веса без усиления физической активности.
Жиросжигающее воздействие начинается сразу.
Не требуется суровое лимитирование по
калорийности принимаемой еды.
В формуле препарата экстракт гуараны, которые содержат богатый набор витаминов и минералов,
и они ускоряют превращение жировых клеток
в энергию, тормозят аппетит,
улучшают иммунитет. Кактус –
естественный антиоксидант, который
дает мощное жиросжигающее
действие, подавляет аппетит и концентрацию
холестерина в крови, устраняет из организма шлаки и излишки воды, безупречно снимая жировую нагрузку на организме.
А экстракт лимона в формуле fire fit стимулирует метаболический процесс, нормализует работу
ЖКТ, защищает сердечно-сосудистую систему, поддерживает
иммунную систему, повышает активность
всего организма.
Этот препарат получил сертификат качества.
Его компоненты давно и результативно используются
в диетологии и спорте. Натуральный состав комплекса обеспечивает быстрое
и безвредное всасывание слизистой желудка.
Действующие компоненты средства
обеспечивают плавное сжигание липидов нормальным для организма образом.
Форма выпуска – капли на водной базе – позволяют употреблять Фаер Фит,
не меняя сложившийся уклад жизни.
Достаточно просто влить немного жидкости в воду, и процесс сброса веса пошел.
Важным эффектом является падение аппетита и стабилизация работы пищеварительной системы.
Ни один состав растительного происхождения
не сравнится с Fire Fit! Готовы подвергнуться чудесное действие средства?
Кликните на форму для заявки
на официальном веб-сайте, и в
самое скорое время наш менеджер перезвонит вам.
Источник