Что происходит, когда digitalWrite(pinname, LOW) вызывается после pinMode(pinname, INPUT_PULLUP)?

Я читал официальные документы Arduino по digitalWrite и смущен тем, что происходит с электрической точки зрения, когда digitalWrite вызывается на выводах INPUT_PULLUP.

Скажем, мой код говорит следующее:

pinMode(4, INPUT_PULLUP);
digitalWrite(4, LOW);

Врачи говорят:

Если PIN настроен в качестве входного сигнала, то функция digitalWrite() включится. (ВЫСОКИЙ) или отключить (НИЗКИЙ) внутренний подтягиватель на входном выводе. Рекомендуется установить pinMode() в INPUT_PULLUP, чтобы включить внутренний подтягивающий резистор. Дополнительные сведения см. в руководстве по цифровым контактам .

Означает ли это, что контакт 4 плавает или находится на земле? Эквивалентны ли эти две строки кода pinMode(4, OUTPUT); digitalWrite(LOW); ?

, 👍0

Обсуждение

посмотрите на раздел 14.2 из https://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf, @jsotola

Спасибо, я новичок в EE и arduino, поэтому я думаю, что мне нужна помощь в понимании того, что означает этот документ. Я пытаюсь понять, какого поведения следует ожидать. Вы также говорите, что это зависит от чипа?, @rfii

определенно зависит от чипа, но, вероятно, очень похоже, @jsotola


1 ответ


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

2

Это довольно явно указано там, в вашей цитате: если вы пишете НИЗКИЙ уровень, когда в режиме ВВОДА он отключает подтягивающий резистор. Вот и все, что он делает.

pinMode(4, INPUT);
digitalWrite(4, HIGH);

это точно так же, как:

pinMode(4, INPUT_PULLUP);

И

pinMode(4, INPUT_PULLUP);
digitalWrite(4, LOW);

это точно то же самое, что

pinMode(4, INPUT);

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

,

Спасибо, не могли бы вы ответить на часть вопроса о том, если pinMode(4, INPUT); оставляет pin плавающим или он находится в GND?, @rfii

Вывод, установленный для ввода без подтягивания и ни к чему не подключенный, *всегда* плавает. Он никогда не может выводить что-либо или быть установлен на какой-либо уровень, если он явно не настроен на ВЫВОД., @Majenko