Урок 4 — цифровые входы

Урок 1. Цифровые выводы

Опубликовано 06.07.2014 13:29:00

На наш взгляд, первое, с чего можно начать знакомство с платформой Arduino это её цифровые выводы. Они нам пригодятся для подключения различной периферии: светодиоды, реле модули и т.п

На плате Arduino UNO их 14 (D0-D13). Они могут работать как входы, как выходы и как выходы с поддержкой ШИМ.

Конфигурация выводов как вход либо выход задается в void setup

1) Цифровые выходы

После конфигурации цифрового вывода как выхода, мы можем придать ему два значения:

При высоком уровне выход работает как «источник питания» с напряжением 5 Вольт, при низком же уровне выход соединяется с землей МК. В двух этих режимах порт может выдать либо принять ток до 40мА. Это позволит подключать к плате Arduino маломощные нагрузки. При превышении тока в 40мА может выгореть либо отдельно порт, либо весь камень.

В качестве первого примера выполним некий «Hello, World!» в тематике Arduino — помигаем светодиодом.

Плата Arduino уже имеет на своем борту встроенный светодиод подключенный к выводу D13. Можно использовать и его, но в качестве примера соберем первую схемку на макетной плате.

Для эксперимента нам понадобятся:

Описание примера:

При установке высокого уровня ( HIGH ), на выводе D3 появляется напряжение, которое протекая через светодиод (LED1) заставляет его светиться. При установке низкого уровня ( LOW ), напряжение больше не подается и светодиод не горит. Резистор (R1) необходим для ограничения потребляемого светодиодом тока.

На реальной макетной плате всё будет выглядеть следующим образом:

Примечания по сборке:

Вывод D3 соединяется с анодом светодиода, а катод уходит на резистор. У резистора нет полярности и его можно устанавливать любой стороной.

Пример программного кода:

Чтобы, в случае необходимости перенесения светодиода на другой пин, не пришлось просматривать весь код и менять цифру 3 (номер нашего вывода) на какую либо другую, хорошим тоном будет изначально присвоить ему имя.

2) Цифровые выходы с поддержкой ШИМ

ШИМ (Широтно-Импульсная Модуляция) или PWM (Pulse Width Modulation) представляет собой программное, завязанное на внутренний таймер контроллера, чередование высокого и низкого уровней на порту контроллера с задаваемой скважностью. ШИМ это очень полезная штука, которая пригодится для регулирования яркости светодиодов либо управления скоростью вращения моторов (Более подробно что такое ШИМ).

Не все цифровые выводы имеют поддержку ШИМ. У Arduino UNO их 6 (D3, D5, D6, D9, D10, D11). У других плат количество может отличаться. Смотрите в спецификации.

В программном коде скважность задается числом от 0(min) до 255(max)

В качестве наглядного примера поупрявляем яркостью светодиода с помощью ШИМ модуляции.

Как уже говорилось, Arduino имеет на своем борту встроенный светодиод подключенный к выводу D13. Однако, этот вывод не имеет поддержки ШИМ. ШИМ поддержку имеет вывод D3. К нему, как и в предыдущем примере, мы подключим светодиод

Для эксперимента нам понадобятся:

Описание примера:

При установке высокого уровня ( HIGH ), на выводе D3 появляется напряжение, которое протекая через светодиод (LED1) заставляет его светиться. При установке низкого уровня ( LOW ), напряжение больше не подается и светодиод не горит. Резистор (R1) необходим для ограничения потребляемого светодиодом тока.

Скважность ШИМ сигнала, по сути своей, задает интервалы чередования высокого и низкого уровня, т.е. зажигает и гасит светодиод. Благодаря инертности нашего зрения, при частоте мерцания светодиода свыше определенного значения, наш мозг перестает воспринимать реально происходящие мерцания и воспринимает картинку как изменение яркости свечения.

Принципиальная схема остается такой же как и в первом примере.

На реальной макетной плате всё будет выглядеть следующим образом:

Примечания по сборке:

Вывод D3 соединяется с анодом светодиода, а катод уходит на резистор. У резистора нет полярности и его можно устанавливать любой стороной.

Пример программного кода:

3) Цифровые входы

Как уже говорилось, цифровые выводы могут использоваться как входы. Самым ярким примером использования данной возможности является подключение кнопки. Чтение производится функцией.

В ответ получаем значения HIGH или LOW .

Если к считываемому порту ничего не подключено, то функция digitalRead () может беспорядочно возвращать значения HIGH или LOW. Во избежание ложных срабатываний, входы необходимо подтягивать резистором 10-20кОм. При замыкании кнопки на землю — подтягивать к питанию, при замыкании на питание — к земле.

В данном примере считаем состояние кнопки (нажата/не нажата) и выведем в монитор порта.

Для эксперимента нам понадобятся:

Описание примера:

При нажатии на кнопку (S1) она будет замыкаться на линию +5V. Во избежание ложных срабатываний, порт контроллера притянут к земле резистором R1.

На реальной макетной плате всё будет выглядеть следующим образом:

Цифровые входы/выходы

В уроке про распиновку платы мы обсуждали такое понятие, как GPIO: с англ. General Purpose Input-Output, входы-выходы общего назначения. Теперь надо разобраться с такими понятиями, как пин и порт. Пин – это конкретная нога микроконтроллера, имеющая свой номер, по которому к ней можно обратиться. Порт – это совокупность пинов. Микроконтроллер спроектирован так, чтобы обеспечить хорошее быстродействие, поэтому например пины объединены в порты, в одном порте обычно до 8 пинов (потому что в байте 8 бит). Работая с микроконтроллером напрямую, мы можем за одно действие установить состояние для всех пинов одного порта. Это очень быстро. Уроки у нас базовые, поэтому сегодня поговорим о функциях для работы с пинами, которые нам предлагает Ардуино. Но сначала давайте разберёмся, какие из пинов являются цифровыми. Взглянем на распиновку платы Нано: Все пины, имеющие название PD*, PC*, PB*, являются GPIO. D, С и B указывает на номер порта, которому принадлежит пин. На плате пины подписаны по-другому, просто по порядку. Таким образом мы видим, что все пины с D0-D13 и A0-A5 являются GPIO, то есть цифровыми входами-выходами. Многие называют пины A0A7 аналоговыми, на некоторых неофициальных распиновках они прям подписаны как analog pin, и это вводит новичков в заблуждение, потому что A0-A5 являются такими же цифровыми пинами, как D0-D13 . Но у этих пинов есть дополнительная функция в виде чтения аналогового сигнала. Об этом поговорим в следующем уроке. А вот пины A6 и A7 являются именно аналоговыми, потому что у них есть только выход на АЦП, эти пины не являются GPIO, и с ними нельзя работать функциями для цифровых пинов. Если вы посмотрите на распиновку Arduino UNO, то вообще не найдёте там пинов A6 и A7, то есть УНО хоть и больше НАНО, но возможностей у неё меньше =)

Нумерация пинов

Пины пронумерованы на плате как “цифровые” D* пины и аналоговые A* пины. К цифровым пинам мы будем обращаться просто по их номеру, т.е. D3 это просто 3. С аналоговыми пинами чуть сложнее:

  • Обратиться можно с буквой A (A3, A5)
  • Можно цифрой по порядку после цифровых, так например у Нано последний цифровой – D13, следующий за ним “аналоговый” А0 имеет номер 14, а например A5 имеет номер 19, по которому к нему тоже можно обратиться, что позволяет управлять всеми пинами при помощи циклов
Читайте также  Фвч для встроенного усилителя

Режимы работы пинов

Цифровой пин может находиться в двух состояниях, вход и выход. В режиме входа пин может считывать напряжение от 0 до напряжения питания МК, а в режиме выхода – выдавать такое же напряжение. Режим работы выбирается при помощи функции pinMode(pin, mode) , где pin это номер пина, а mode это режим:

  • mode – режим работы
    • INPUT – вход
    • OUTPUT – выход
    • INPUT_PULLUP – подтянутый к питанию вход

Если со входом/выходом всё понятно, то с подтяжкой давайте разберёмся. В режиме входа пин микроконтроллера не подключен никуда и ловит из воздуха всякие наводки, получая практически случайное значение. Для задания пину “состояния по умолчанию” используют подтяжку резистором к земле или питанию. Вот режим INPUT_PULLUP включает встроенную в микроконтроллер подтяжку пина к питанию. Подробнее об этом, со схемами и примерами я рассказывал в начале вот этого видео урока.

Вывод цифрового сигнала

Цифровой пин в режиме выхода ( OUTPUT ) может генерировать цифровой сигнал, т.е. выдавать напряжение. Так как понятие “цифровой” обычно связано с двумя состояниями, 0 и 1, цифровой пин может выдать 0 или 1, точнее: сигнал низкого или высокого уровня. Сигнал низкого уровня это 0 Вольт, грубо говоря в этом состоянии пин подключается к GND микроконтроллера. Сигнал высокого уровня подключает пин к VCC микроконтроллера, то есть к питанию. Если вы вспомните урок по питанию платы, то поймёте, что сигнал высокого уровня на цифровом пине будет варьироваться в зависимости от того, как питается плата Arduino. При питании от источника 5V на пине будет 5V, при питании от USB с потерей на защитном диоде мы получим около 4.7 Вольт на цифровом пине в режиме выхода с высоким сигналом. Самый главный момент касательно цифровых пинов: микроконтроллер – это логическое устройство, которое создано для управления другими устройствами при помощи логических (цифровых) сигналов. Под словом логическое я подразумеваю не силовое, то есть питать что-то от микроконтроллера нельзя, за редким исключением. На картинке с распиновкой выше вы можете найти надпись “Absolute MAX per pin 40mA, recommended 20mA“. Это означает, что максимум можно снять с пина 40 миллиампер, а рекомендуется не больше 20 миллиампер. Поверьте, для микроконтроллера это очень много. В других микроконтроллерах ограничение по току на пин может составлять 5-10 мА. Также есть общее ограничение на ток с цифровых пинов – 200 мА: “Absolute MAX 200mA for entire package“. Эту информацию можно найти в любом официальном источнике информации об Arduino и микроконтроллере в целом, в том числе в даташите на микроконтроллер. Что произойдёт, если снять с пина больше, чем он может отдать? Всё очень просто – он сломается. Что будет, если снять с нескольких пинов больше, чем может отдать микроконтроллер в целом? Правильно – сгорит микроконтроллер. Поэтому ничего мощнее светодиода и маленькой пищалки к микроконтроллеру подключать нельзя. Никаких моторчиков, лампочек, нагревателей, мощных радио-модулей и прочего питать от цифровых пинов нельзя. Цифровые пины служат для подачи команд другим устройствам, например реле/транзисторам для коммутации нагрузок. Но об этом мы поговорим отдельно. Сейчас вернёмся к вопросу подачи цифрового сигнала: для этого у нас есть функция digitalWrite(pin, value) :

  • pin – цифровой пин МК, подписанный на плате как D. Также например у НАНО это пины A0-A5.
  • value – уровень сигнала: HIGH высокий, LOW низкий. Также можно использовать цифры 0 и 1

Пример, в котором пины инициализируются как выходы, и на них подаётся сигнал:

Ещё интересный момент: в старых версиях IDE не было варианта режима работы INPUT_PULLUP , и подтяжка делалась вручную. Запомните, что вот эти два варианта являются равноценными, вы можете встретить второй в старых скетчах из Интернета, не пугайтесь. Оба варианта делают пин подтянутым к питанию в режиме входа

Перейдём к чтению цифрового сигнала в режиме INPUT

Чтение цифрового сигнала

Цифровой пин может “измерять” напряжение, но сообщить он может только о его отсутствии (сигнал низкого уровня, LOW ) или наличии (сигнал высокого уровня, HIGH ), причём отсутствием напряжения считается промежуток от 0 до

2.1V. Соответственно от

2.1V до VCC (до 5V) микроконтроллер считает за наличие сигнала высокого уровня. Таким образом микроконтроллер спокойно может работать с логическими устройствами, которые шлют ему высокий сигнал с напряжением 3.3V, он такой сигнал примет как HIGH.

Для чтения уровня сигнала на пине используется функция digitalRead(pin) , где пин – номер пина согласно подписи на плате. Это пины, подписанные как D, а также пины A0-A5 у Arduino Nano/Uno/Pro Mini. Данная функция возвращает 0, если сигнал низкого уровня, и 1 – если высокого. Простой пример:

Данный код будет выводить в порт сигнал на пине D5. Если подключить его проводом к VCC – получим 1, если к GND – получим 0.

Использование цифровых входов/выходов Arduino

Цифровые входы и выходы (цифровые I/O) на платах Arduino позволяют подключать к Arduino датчики, приводы и другие микросхемы. Изучение того, как использовать их, позволит вам использовать Arduino для выполнения реально полезных вещей, таких как чтение состояния входных переключателей, подсветка индикаторов и управление релейными выходами.

Цифровые сигналы

В отличие от аналоговых сигналов, которые могут принимать любое значение в пределах диапазона, цифровые сигналы имеют только два отдельных значения: высокий ( HIGH , 1) и низкий ( LOW , 0) уровни. Вы можете использовать цифровые сигналы в ситуациях, где вход или выход будет принимать одно из этих двух значений. Например, одним из случаев, когда вы можете использовать цифровой сигнал, это включение и выключение светодиода.

Функции

В данной статье мы будем использовать следующие связанные с цифровыми сигналами функции Arduino:

  • pinMode()
  • digitalRead()
  • digitalWrite()

pinMode (pin_number, mode) Поскольку цифровые I/O выводы Arduino могут использоваться в качестве и входа, и выхода, вы должны сначала настроить выводы, которые вы собираетесь использовать для цифрового ввода/вывода, с помощью данной функции. pin_number – это номер вывода, который вы хотите настроить. Режим, mode , может принимать одно из трех значений: INPUT , OUTPUT или INPUT_PULLUP . Когда mode устанавливается в значение INPUT_PULLUP , к выводу подключается внутренний подтягивающий резистор 20 кОм, чтобы привести уровень на выводе к значению HIGH, если к нему ничего не подключено. digitalWrite(pin_number,value) Данная функция записывает цифровое значение в вывод. pin задает, в какой вывод на плате Arduino будет записано цифровое значение, а value – это цифровое значение, в которое будет установлен вывод. value может принимать только значения HIGH и LOW . digitalRead(pin_number) Данная функция считывает цифровое значение из вывода. pin – это номер цифрового I/O вывода, который вы собираетесь прочитать. Данная функция возвращает одной из двух значений: HIGH или LOW

Эксперимент 1: мигание светодиодом, используя задержку

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

Необходимые комплектующие

  • 1 x светодиод;
  • 1 x резистор 220 Ом;
  • 1 x Arduino UNO;
  • 1 x макетная плата;
  • 2 x перемычка.

Схема соединений

На рисунке выше показано, как подключить светодиод и резистор 220 Ом к Arduino. Как показано, светодиод подключен к цифровому I/O выводу 8 платы Arduino через резистор. Резистор контролирует ток через светодиод. Программа ниже сначала настраивает вывод 8 на выход, затем устанавливает цифровой I/O вывод в состояние высокого уровня HIGH на 1000 мс, затем в состояние низкого уровня LOW на следующие 1000 мс.

Читайте также  Люминесцентные лампы и их характеристики (часть1)

Программа для эксперимента 1

Запуск эксперимента

  1. подключите анод светодиода к одному концу резистора, а другой конец резистора к цифровому I/O выводу 8 на плате Arduino;
  2. подключите вывод GND платы Arduino к катоду светодиода;
  3. подключите Arduino к компьютеру, используя USB кабель, и загрузите прошивку, используя программу Arduino IDE;
  4. подайте питание на плату Arduino, используя источник питания, батарею или USB кабель;
  5. светодиод должен начать мигать.

Эксперимент 2: мигание светодиодом, используя кнопку

Данный эксперимент не только демонстрирует, как использовать цифровой выход, но и как использовать цифровой вход. Нажатие кнопки, подключенной к цифровому входу, будет включать или выключать светодиод. Программа использует обе функции: и digitalWrite() , и digitalRead() .

Необходимые комплектующие

  • 1 x светодиод;
  • 2 x резистор 220 Ом;
  • 1 x кнопка;
  • 1 x Arduino UNO;
  • 1 x макетная плата;
  • 6 x перемычка.

Схема соединений

Как вы можете видеть на диаграмме выше, мы теперь используем 2 цифровых I/O вывода платы Arduino. Светодиод подключен к выводу 8, который настроен как выход. Кнопка подключена к выводу 9, который настроен как вход. Когда кто-то нажимает на кнопку, состояние на выводе 9 устанавливается в высокий уровень, HIGH , и программа устанавливает на выводе 8 тоже высокий уровень и включает светодиод. Отпускание кнопки сбрасывает вывод 9 на низкий уровень, LOW . Программа при этом устанавливает низкий уровень и на выводе 8, что выключает светодиод.

Запуск эксперимента

  1. соберите схему, как показано на рисунке выше;
  2. подключите Arduino к компьютеру, используя USB кабель, и загрузите прошивку, используя программу Arduino IDE;
  3. подайте питание на плату Arduino, используя источник питания, батарею или USB кабель;
  4. нажмете кнопку, чтобы зажечь светодиод. Отпустите кнопку, чтобы погасить светодиод.

Видео

Урок 11. Чтение цифровых входов

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

Значение Уровень Напряжение
Low 0V
1 High 5V

Для управления светодиодом вы будете использовать кнопку для отправки значений цифрового ввода в Arduino. Кнопка должна подать 0 В на плату, когда она отпущена, и 5 В на плату, когда она нажата. На рисунке ниже показано, как подключить кнопку к плате Arduino:

Вы можете заметить, что светодиод подключен к Arduino на цифровом выводе 13, как и раньше. Цифровой контакт 10 используется в качестве цифрового входа. Чтобы подключить кнопку, вы должны использовать резистор 10 кОм, который действует как понижающий в этой цепи. Понижающий резистор гарантирует, что цифровой вход получает 0 В, когда кнопка отпущена.

Когда вы отпускаете кнопку, вы открываете соединение между двумя проводами на кнопке. Поскольку через резистор ток не течет, контакт 10 просто подключается к земле (GND).

Цифровой вход получает 0 В, что представляет состояние (или низкий уровень). Когда вы нажимаете кнопку, вы подаете 5 В на резистор и на цифровой вход. Ток протекает через резистор, и цифровой вход получает 5 В, что представляет состояние 1 (или высокий уровень).

Вы также можете использовать макет для сборки вышеуказанной схемы:

Теперь, когда вы собрали схему, вам нужно запустить программу на ПК, чтобы управлять ею с помощью Firmata. Эта программа включит светодиод в зависимости от состояния кнопки:

Давайте пройдемся по этой программе:

  • Строка 1 и 2 импортируют pyfirmata и time (время).
  • В строке 4 используется pyfirmata.Arduino() для установки соединения с платой Arduino.
  • Строка 6 назначает итератор, который будет использоваться для считывания состояния входов схемы.
  • Строка 7 запускает итератор, который поддерживает цикл, работающий параллельно с вашим основным кодом. Цикл выполняет board.iterate() для обновления входных значений, полученных с платы Arduino.
  • Строка 9 устанавливает вывод 10 как цифровой вход с pyfirmata.INPUT. Это необходимо, поскольку в конфигурации по умолчанию используются цифровые контакты в качестве выходов.
  • Строка 11 запускает бесконечный цикл while. Этот цикл считывает состояние входного контакта, сохраняет его в sw и использует это значение для включения или выключения светодиода путем изменения значения контакта 13.
  • Строка 17 ожидает 0,1 секунды между итерациями цикла while. Это не является строго необходимым, но это хороший прием, чтобы избежать перегрузки процессора, который достигает 100% нагрузки, когда в цикле нет команды ожидания.

pyfirmata также предлагает более компактный синтаксис для работы с входными и выходными выводами. Это может быть хорошим вариантом, когда вы работаете с несколькими выводами. Вы можете переписать предыдущую программу, чтобы иметь более компактный синтаксис:

В этой версии вы используете board.get_pin() для создания двух объектов. digital_input представляет состояние цифрового входа, а led представляет состояние светодиода. Когда вы запускаете этот метод, вы должны передать строковый аргумент, состоящий из трех элементов, разделенных двоеточиями:

  1. Тип контакта (a для аналогового или d для цифрового);
  2. Номер контакта;
  3. Режим вывода (i для ввода или o для вывода).

Поскольку digital_input — это цифровой вход, использующий вывод 10, вы передаете аргумент ‘d:10:i’. Состояние светодиода устанавливается на цифровой выход с помощью контакта 13, поэтому аргумент светодиода ‘d:13:o’.

Когда вы используете board.get_pin() нет необходимости явно устанавливать вывод 10 в качестве входа, как вы делали раньше с pyfirmata.INPUT. После того, как контакты установлены, вы можете получить доступ к статусу цифрового входного контакта, используя read(), и установить статус цифрового выходного контакта с помощью write().

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

Базовые понятия цифровой электроники

Входы и выходы цифровых микросхем

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

Наибольшее распространение получили две технологии цифровых микросхем:

  • ТТЛ ( TTL ) и ТТЛШ ( TTLS ) — биполярная транзисторно-транзисторная логика и ТТЛ с диодами Шоттки;
  • КМОП ( CMOS ) — комплементарные транзисторы со структурой «металл–окисел–полупроводник».

Различаются они типами используемых транзисторов и схемотехническими решениями внутренних каскадов микросхем. Отметим также, что микросхемы КМОП потребляют значительно меньший ток от источника питания, чем такие же микросхемы ТТЛ (или ТТЛШ) — правда, только в статическом режиме или на небольших рабочих частотах. На рис. 1.7 и 1.8 показаны примеры схем входных и выходных каскадов микросхем, выполненных по этим технологиям. Понятно, что точный учет всех эффектов в этих схемах, включающих в себя множество транзисторов, диодов и резисторов, крайне сложен, но обычно он просто не нужен разработчику цифровых схем.

Рассмотрим сначала входы микросхем.

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

Даже на третьем уровне представления ( электрическая модель ) в большинстве случаев не нужно знать о внутреннем строении микросхемы, о схемотехнике входов. Достаточно считать, что при подаче на вход сигнала логического нуля из этого входа вытекает ток, не превышающий IIL , а при подаче сигнала логической единицы в этот вход втекает ток, не превышающий IIH . А для правильной логики работы микросхемы достаточно, чтобы уровень напряжения входного сигнала логического нуля был меньше UIL , а уровень напряжения входного сигнала логической единицы был больше UIH .

Особым случаем является ситуация, когда какой-нибудь вход не подключен ни к одному из выходов — ни к общему проводу, ни к шине питания (так называемый висящий вход ). Иногда возможности микросхемы используются не полностью и на некоторые входы не подается сигналов. Однако при этом микросхема может не работать или работать нестабильно, так как ее правильное включение подразумевает наличие на всех входах логических уровней, пусть даже и неизменных. Поэтому рекомендуется подключать неиспользуемые входы к напряжению питания микросхемы UCC или к общему проводу (к земле) в зависимости от того, какой логический уровень необходим на этом входе. Но для некоторых серий микросхем, выполненных по технологии ТТЛ (например, К155 или КР531), неиспользуемые входы надо подключать к напряжению питания не напрямую, а только через резистор величиной около 1 кОм (достаточно одного резистора на 20 входов).

На неподключенных входах микросхем ТТЛ формируется напряжение около 1,5–1,6 В, которое иногда называют висячим потенциалом. Обычно этот уровень воспринимается микросхемой как сигнал логической единицы, но рассчитывать на это не стоит. Потенциал, образующийся на неподключенных входах микросхем КМОП, может восприниматься микросхемой и как логический нуль, и как логическая единица. В любом случае все входы надо куда-то подключать. Неподключенными допускается оставлять только те входы (ТТЛ, а не КМОП), состояние которых в данном включении микросхемы не имеет значения.

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

Существуют три разновидности выходных каскадов, существенно различающиеся как по своим характеристикам, так и по областям применения:

  • стандартный выход или выход с двумя состояниями (обозначается 2С, 2S или, реже, ТТЛ, TTL );
  • выход с открытым коллектором (обозначается ОК, OC );
  • выход с тремя состояниями или (что то же самое) с возможностью отключения (обозначается 3С, 3S).

Стандартный выход 2С имеет всего два состояния: логический нуль и логическая единица, причем оба они активны, то есть выходные токи в обоих этих состояниях ( IOL и IOH ) могут достигать заметных величин. На первом и втором уровнях представления такой выход можно считать состоящим из двух выключателей, которые замыкаются по очереди (рис. 1.9), причем замкнутому верхнему выключателю соответствует логическая единица на выходе, а замкнутому нижнему — логический нуль.

Выход с открытым коллектором ОК тоже имеет два возможных состояния, но только одно из них (состояние логического нуля) активно, то есть обеспечивает большой втекающий ток IOL . Второе состояние сводится, по сути, к тому, что выход полностью отключается от присоединенных к нему входов. Это состояние может использоваться в качестве логической единицы, но для этого между выходом ОК и напряжением питания необходимо подключить нагрузочный резистор R (так называемый pull -up) величиной порядка сотен Ом. На первом и втором уровнях представления такой выход можно считать состоящим из одного выключателя (рис. 1.9), замкнутому состоянию которого соответствует сигнал логического нуля, а разомкнутому — отключенное, пассивное состояние. Правда, от величины резистора R зависит время переключения выхода из нуля в единицу, что влияет на задержку tLH , но при обычно используемых номиналах резисторов это не слишком важно.

Аналоговый и цифровой выход Ардуино

Рассмотрим цифровые и аналоговые выходы Arduino ► разберем чем отличается цифра от аналога, а также сделаем бегущий огонек из светодиодов на Arduino Uno.

На этом занятии мы рассмотрим, цифровые и аналоговые выходы Arduino, разберем чем отличается цифровой сигнал от аналогового. Соберем с помощью макетной платы схему из двух светодиодов и будем плавно регулировать их яркость (включение и затухание). Рассмотрим тип данных int, условный оператор if и команду analogWrite для управления аналоговыми портами в языке программирования Ардуино.

Чем отличается аналоговый сигнал от цифрового

Аналоговый сигнал непрерывно изменяется во времени. Вся информация в природе аналоговая — волны на воде, колебание струны и т.д. Изначально человек записывал информацию (звуки, изображения, видео) с помощью аналоговых устройств. Но аналоговые сигналы чувствительны к воздействию шумов и помех.

Цифровой сигнал передается в виде единиц и нулей, для компьютеров и цифровой техники это проще реализовать (есть сигнал или нет сигнала). Для оперативной памяти в компьютерах используют конденсаторы, один заряженный конденсатор — 1 бит. На флеш-памяти используют транзисторы с плавающим затвором.

Квантование — разбиение непрерывной величины на интервалы

С появлением компьютеров аналоговые сигналы стали переводить в цифру, поскольку аналоговый сигнал подвержен искажениям и затуханию при передаче или записи. Наглядно продемонстрировать разницу между аналоговым и цифровым сигналом поможет картинка, где изображен процесс квантования — разбиение непрерывной величины на конечное число интервалов (перевод аналогового сигнала в цифру).

Аналоговые и цифровые выходы на Ардуино

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • светодиод;
  • резистор 220 Ом;
  • провода «папа-папа».

Если вы хотите регулировать выходное напряжение, то следует использовать пины, помеченные символом «

». Для Arduino Uno — это 3, 5, 6, 9, 10, 11. С помощью аналоговых портов можно выдавать любое напряжение 0 до 5 Вольт, а цифровые выходы можно только включать и выключать. Аналоговые порты используют ШИМ (широтно-импульсную модуляцию), по английски PWM (pulse-width modulation), с помощью которой имитируется аналоговый сигнал.

Аналоговые выходы на плате Ардуино имеют, отметку тильда «

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

9. Откройте скетч для мигания светодиодом из первого занятия и измените в нем порт выхода с Pin13 на Pin9. Загрузите скетч в плату Arduino NANO или UNO.

На Arduino аналоговый выход будет работать, как цифровой

9 порт может работать, как цифровой выход. Но если функцию digitalWrite изменить на analogWrite, то вместо значения HIGH (1) и LOW (0) можно поставить любое значение от 0 до 255. Именно в этом интервале можно менять напряжение на аналоговых выходах. Загрузите программу для плавного включения и затухания светодиода. Подробное описание работы данной программы даны ниже в пояснении к коду.