Не выполняется INPUT_PULLUP

Мега 2560. На пины с 16 по 21 подал команду “pinMode(номер пина, INPUT_PULLUP)”. На пинах 16-20 напряжение 4,97-4,98 вольт. На пине 21 - 0 вольт.
Сдох пин?

Плохой контакт?

Да нет, посмотрел плату, вроде, контакт нормальный (заводской). Попробовал пропаять ногу (вдруг болтается?) - толку ноль.

ХЗ! Мы не видели ни кода, ни схемы.
На этом пине, например, SCL сидит. Мало ли что Вы там с ним делаете.

Да ничего, собственно… Голая ардуина, ничего не подключено. Просто подал на него инпут_пуллап и все. Соседние пины (16-20) поднялись до почти питания, а 21 - в нуле.

Так может быть всё таки код предоставите?

Загрузил скетч и просто померял напряжение на пинах.

//Mega2560
/*Пины прерываний
  пин2 (прерывание 0)
  пин3 (прерывание 1)
  пин18 (прерывание 5)
  пин19 (прерывание 4)
  пин20 (прерывание 3)
  пин21 (прерывание 2)*/


void setup ()
{
  //Инициация портa монитора
  Serial.begin (115200);
  //Инициация портов энкодеров на вход
  pinMode(16, INPUT_PULLUP);
  pinMode(17, INPUT_PULLUP);
  pinMode(18, INPUT_PULLUP);
  pinMode(19,INPUT_PULLUP);
  pinMode(20, INPUT_PULLUP);
  pinMode(21, INPUT_PULLUP);
  
}

void loop ()
{

}

21 пин выведен не единожды:

Попробуй блинк на это вывод вывести. Что будет? И через 10к +5В на вход.

То есть, внешняя подтяжка и просто pinMode(21, INPUT); ?
Сделаю чуть позже сегодня, отпишусь.

Ты как моргать светодиодом собрался назначив пин на вход? :smiley:

pinMode(21, OUTPUT):

Это в общем то один из вариантов программно входить в прерывание назначив ногу на выход и повесив на него обработчик.

С питания на пин 21 кинул резистор 10к.
Простейшая проверка:

/*Пины прерываний
  пин2 (прерывание 0)
  пин3 (прерывание 1)
  пин18 (прерывание 5)
  пин19 (прерывание 4)
  пин20 (прерывание 3)
  пин21 (прерывание 2)*/
  
 

void setup()

{
  pinMode(16, INPUT_PULLUP);
  pinMode(17, INPUT_PULLUP);
  pinMode(18, INPUT_PULLUP);
  pinMode(19, INPUT_PULLUP);
  pinMode(20, INPUT_PULLUP);
  pinMode(21, INPUT);
  
}
 
void loop()
{
  
  
}

То есть, не делать ничего. На пинах 16-20 напруга питания, как и должно быть. На подтянутом (!) пине 21 - 0 вольт. Выходит, 21-й коротнул на gnd. Тестер говорит о том же (прозвон пищит).

Посмотрите плату на предмет сопли припоя

1 лайк

Защитный диод пробит. Ничего страшного, только не используй на вывод высокого уровня. Вообще отключи от него всё.

На голой (никуда не подключенной и без навесных элементов) Меге прозвон “21 пин-GND” показывает коротыш. Кстати, нашел еще один так же убитый пин (43). Хвала Пресвятой Деве, в ящике завалялась Мега (лет 10 уж, наверное, пылилась). Перекинул навеску на нее - все заработало. Конечно, можно было бы на увечной Меге задействовать int0 или int1, но переразводить плату шильда лень. Отложил “инвалида” для других проектов, где убитые пины не понадобятся.
Всем спасибо за помощь!