Подтягивание на совместимом Arduino Mega

У меня есть Arduino mega совместимая плата, называемая Ethermega, от Freetronics (ATmega2560).

Схема здесь.

В программе установки я написал следующий код:

Serial.begin(9600);

  pinMode(4, INPUT_PULLUP);
  digitalWrite(4, HIGH); // Необязательно, я пробовал с и без
  while (1)
  {
    if (digitalRead(4) == HIGH)
    {
      Serial.write("Up!\n");
    }
  }

(Не беспокойтесь о том, что я не использую loop)

Когда я подключаю вход 4 к 5 В, я вижу "Вверх!". В остальное время я ничего не вижу.

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

Еще одна вещь, которая меня озадачивает, - это то, что я могу найти кучу примеров, которые используют тактильный переключатель и вообще не тянут/не тянут...

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

, 👍1

Обсуждение

pin 4 это CS pin для SD карты и он имеет делитель напряжения в схеме, @Juraj

Как правило, вы не должны использовать digitalWrite на входном выводе, он может не делать того, что вы думаете. Если я правильно помню, регистр, который используется для установки high/low в режиме вывода, такой же, как и для установки pullups в режиме ввода. Однако я не знаю, как ядро arduino справляется с этим. Просто К ТВОЕМУ СВЕДЕНИЮ..., @Sim Son

@SimSon На AVR: pinMode(x, INPUT); digitalWrite(x, HIGH); совпадает с pinMode(x, INPUT_PULLUP);. В общем, большинство ядер будут эмулировать это для вас (я знаю, что chipKIT делает это), но вы правы, лучше не полагаться на это., @Majenko

@SimSon Да, я очень предпочитаю INPUT_PULLUP или запись регистра, это было в основном от отчаяния..., @user1532080


1 ответ


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

1

Как упоминает @Juraj, pin 4-это CS-pin для SD-карты. Этот штифт имеет делитель volage 1kΩ + 2.2 kΩ на нем (в общей сложности 3.2 kΩ) для заземления. 3,2 Ком-это примерно 1/10 от значения типичного подтягивающего резистора, встроенного в микросхему, поэтому он тянет выход достаточно низко, чтобы его можно было увидеть как НИЗКИЙ, если только вы не переопределите его вручную.

Вы не можете использовать этот штифт как активный низкий вход на этой плате - выберите другой или используйте его как активный высокий.

,