Arduino: как digitalRead считывает значение? И что это за ценность?
У меня есть Arduino Uno с 14 цифровыми контактами. Я полагаю, что они имеют выход 5V. Но они также могут вводить значения. Я не уверен, что именно он читает, когда это делает (сила тока, напряжение...). Кроме того, как они это читают? Как такая крошечная штука может знать, что она получает?
Просто чтобы дать немного больше контекста для чтения этого вопроса, вот пример схемы. У меня есть батарея 5 В, подключенная к светодиоду и резистору 220 Ом. Следующим элементом схемы является провод, который выходит из основной цепи и соединяется с цифровым выводом на Arduino Uno (здесь он считывает значение). Затем основная цепь замыкается путем соединения с землей.
Надеюсь, мой вопрос достаточно ясен :)
@PenguinCake, 👍0
Обсуждение3 ответа
Лучший ответ:
Современная цифровая электроника состоит из множества крошечных электронных компонентов, называемых полевыми МОП-транзисторами (разновидность транзистора). Их можно включать и выключать с помощью напряжения и очень небольшого тока. Они потребляют большую часть энергии при включении и выключении; в остальное время они практически не потребляют энергии. Именно эта способность с очень низким энергопотреблением позволяет нам создавать сложную цифровую электронику.
С электронной точки зрения полевой МОП-транзистор выглядит как крошечный конденсатор, который включает и выключает очень маломощный переключатель. Как только на конденсаторе МОП-транзистора появится заряд, переключатель останется включенным или выключенным.
Современный крупномасштабный процессор, например тот, который производит Intel, содержит миллиарды полевых МОП-транзисторов, но потребляет менее 100 Вт и переключается миллиарды раз в секунду. Таким образом, мы можем быть уверены, что MOSFET может быть переключен с использованием гораздо менее 1/10 000 000 Вт. При напряжении 5 В это означает 1/50 000 000 А или 0,000 000,02 А, то есть 0,02 мкА.
Итак, входная цепь, подключенная к контакту Arduino, имеет некоторую защиту для защиты полевых МОП-транзисторов от статического электричества (которое может повредить или разрушить конденсатор), а затем дополнительная пара полевых МОП-транзисторов (называемых N-Chanel и P-Chanel). ). Входное напряжение включает один, а другой выключает. Обычно для этого требуется менее микроампера тока, но при напряжении, близком к земле или 5 В. См. схему pjc50.
Таким образом, входной контакт Arduino, подключенный к 5-вольтовому концу резистора и светодиода, потребляет небольшое количество тока на короткое время, чтобы включиться.
Если этот вывод подключен между светодиодом и резистором при напряжении менее 5 В, но более 0 В, он может не переключиться полностью. Он может не давать надежного значения цифрового 0 или цифрового 1 и может быстро переключаться между высокими и низкими уровнями под влиянием электрических помех в окружающей среде.
Отличное объяснение, спасибо, что нашли время написать это!, @PenguinCake
Он измеряет напряжение.
Входная схема концептуально похожа на эту:
- При напряжении, близком к 5 В, нижний транзистор включается, а верхний выключается.
- При напряжении, близком к 0 В, включается верхний, а нижний выключается.
- Напряжения в середине будут в некоторой степени включать оба напряжения, что не рекомендуется, и может быть прочитано как 0 или 1 с порогом посередине.
«Такая крошечная штука» содержит десятки или сотни тысяч транзисторов.
Отличное объяснение, изображение действительно полезно!, @PenguinCake
Если кто-то (например, я) ищет объяснение с точки зрения регистров, то напряжение на выводе, когда он является цифровым входом, может быть доступно с помощью регистра PINx
, с использованием бита для каждого контакта. Основываясь на значении определенного бита регистра DDRx
, если он равен 0
(вход), напряжение на контакте представлено битом в PINx
. Когда это 1
(выход), бит в регистре PINx
будет значением в регистре PORTx
для определенного бита (значение написано). Если бит в регистре DDRx
для вывода равен 0
(вход), бит в регистре PORTx
представляет, является ли внутренний резистор вверх должен быть подключен к контакту. x
используется для обозначения порта (например, A
,B
).
- NodeMCU - Vin контакт как выход 5V?
- Использовать все контакты как цифровые входы/выходы
- Что такое ICSP pin (разъём)?
- Сколько датчиков может поддерживать один модуль Arduino?
- NodeMCU - использовать кнопку flash в качестве входного сигнала в loop()
- Какой тип разъема использует система GROVE?
- Неиспользуемые контакты в Arduino L293D motor shield?
- Как выбрать вывод передачи в библиотеке IRremote для Arduino Uno?
@NickAlexeev - в этом вопросе нет ничего «Arduino», чтобы оправдать его перенос. Это действительно вопрос «как работает микроконтроллер»., @Chris Stratton