Arduino: как digitalRead считывает значение? И что это за ценность?

У меня есть Arduino Uno с 14 цифровыми контактами. Я полагаю, что они имеют выход 5V. Но они также могут вводить значения. Я не уверен, что именно он читает, когда это делает (сила тока, напряжение...). Кроме того, как они это читают? Как такая крошечная штука может знать, что она получает?

Просто чтобы дать немного больше контекста для чтения этого вопроса, вот пример схемы. У меня есть батарея 5 В, подключенная к светодиоду и резистору 220 Ом. Следующим элементом схемы является провод, который выходит из основной цепи и соединяется с цифровым выводом на Arduino Uno (здесь он считывает значение). Затем основная цепь замыкается путем соединения с землей.

Надеюсь, мой вопрос достаточно ясен :)

, 👍0

Обсуждение

@NickAlexeev - в этом вопросе нет ничего «Arduino», чтобы оправдать его перенос. Это действительно вопрос «как работает микроконтроллер»., @Chris Stratton


3 ответа


Лучший ответ:

2

Современная цифровая электроника состоит из множества крошечных электронных компонентов, называемых полевыми МОП-транзисторами (разновидность транзистора). Их можно включать и выключать с помощью напряжения и очень небольшого тока. Они потребляют большую часть энергии при включении и выключении; в остальное время они практически не потребляют энергии. Именно эта способность с очень низким энергопотреблением позволяет нам создавать сложную цифровую электронику.

С электронной точки зрения полевой МОП-транзистор выглядит как крошечный конденсатор, который включает и выключает очень маломощный переключатель. Как только на конденсаторе МОП-транзистора появится заряд, переключатель останется включенным или выключенным.

Современный крупномасштабный процессор, например тот, который производит 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


2

Он измеряет напряжение.

Входная схема концептуально похожа на эту:

Ввод CMOS

  • При напряжении, близком к 5 В, нижний транзистор включается, а верхний выключается.
  • При напряжении, близком к 0 В, включается верхний, а нижний выключается.
  • Напряжения в середине будут в некоторой степени включать оба напряжения, что не рекомендуется, и может быть прочитано как 0 или 1 с порогом посередине.

«Такая крошечная штука» содержит десятки или сотни тысяч транзисторов.

,

Отличное объяснение, изображение действительно полезно!, @PenguinCake


0

Если кто-то (например, я) ищет объяснение с точки зрения регистров, то напряжение на выводе, когда он является цифровым входом, может быть доступно с помощью регистра PINx, с использованием бита для каждого контакта. Основываясь на значении определенного бита регистра DDRx, если он равен 0 (вход), напряжение на контакте представлено битом в PINx. Когда это 1 (выход), бит в регистре PINx будет значением в регистре PORTx для определенного бита (значение написано). Если бит в регистре DDRx для вывода равен 0 (вход), бит в регистре PORTx представляет, является ли внутренний резистор вверх должен быть подключен к контакту. x используется для обозначения порта (например, A,B).

,