Почему светодиод всегда горит в proteus?

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

Это мой код:

void setup() {
  pinMode(7, OUTPUT);
  pinMode(8, INPUT);
  digitalWrite(7, LOW);
}

void loop() {
  int on = digitalRead(8);
  digitalWrite(7, on);
}

Почему это происходит и как мне это решить?

Любая помощь будет оценена по достоинству.

, 👍0

Обсуждение

Что происходит, когда вы добавляете выпадающий резистор к своему входному контакту (резистор, например, 10 Ком от входного контакта до земли), @chrisl

И вы пытаетесь подключить 10 В к входу Arduino? Это плохо. На самом деле это привело бы к разрушению аппаратного обеспечения входного вывода, @chrisl

@chrisl я понимаю. Но на самом деле, работает ли это случайным образом, как в симуляции, или входной вывод просто сразу умирает?, @Becker

Я бы предположил, что при 10 В: Да, он умрет немедленно. Насколько я помню, в аппаратные средства контактов встроены зажимные диоды, которые позволяют рассеивать избыточное напряжение. Они будут уничтожены, хотя мы не можем знать, потерпят ли они неудачу или нет, @chrisl


1 ответ


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

2

Входы микроконтроллера не обнаруживают наличия тока. Они сравнивают напряжение с пороговым значением.

На самом деле входной вывод находится ближе всего к конденсатору. Вы нажимаете кнопку, и он заряжает этот конденсатор до напряжения, превышающего пороговое значение для "ВЫСОКОГО". Затем вы отпускаете кнопку, но этот конденсатор остается заряженным и по-прежнему показывает "ВЫСОКИЙ". Вам нужно что-то, чтобы уменьшить заряд на этом конденсаторе до уровня ниже "НИЗКОГО" порогового напряжения.

Обычно это делается с помощью резистора между выводом GPIO и GND, который "сбрасывает" этот заряд и выдает НИЗКОЕ значение при отпускании кнопки.

Это "понижающий" резистор (вы также можете поменять его местами и подключить "повышающий" резистор и кнопку, подключенную к GND), и он является неотъемлемой частью любого входа, который сам по себе не генерирует как ВЫСОКОЕ, так и НИЗКОЕ требуемое напряжение (любой переключатель или кнопка).

Кроме того, 10 В на выводе GPIO уничтожит ваш Arduino.

,

Я добавил резистор 10 Ком, который соединяет заземление и входной контакт, как предлагаете вы и Крисл, и он работает хорошо. Но что касается источника 10 В, почему моя схема все еще работает, почему proteus не предупреждает меня об этом?, @Becker

@Becker Это всего лишь симуляция - приближение. Вероятно, они просто не думали, что люди будут делать такие вещи, и не запрограммировали это, чтобы предупредить вас., @Majenko

Я понимаю это. Большое спасибо за ваш ответ., @Becker