Uno, вопрос по пинам

Pumpkin
Offline
Зарегистрирован: 12.02.2018

Приветствую, совсем недавно заинтересовался ардуиной и в настоящее время балуюсь всякой элементарщиной. Вот как раз сегодня было потрачено несколько часов и много матерных слов в попытках подключить 4-разрядный 7-сегментный индикатор, который выдавал все что угодно, только не то что от него хотят, при казалось бы нехитром и правильном подключении. Как оказалось странно себя ведут пины 9-11, и при использовании других все прошло успешно. 

В силу моей неопытности, я лучше для наглядности опишу как они себя ведут при подключении к ним диода и попытке им поморгать (переключение high-low в цифровом режиме и плавное зажигание/затухание (0-255) в режиме шим. Скетч не выкладываю, там все совсем просто, но если нужно - прикреплю). Диод катодом в землю, анодом в исследуемый пин через резистор 220Ом . Плата: какой то клон UNO на mega328p.

Результат:

pin9 - диод всегда горит, на digitalWrite и analogWrite не реагирует.

pin10 - диод не горит, на digitalWrite и analogWrite не реагирует.

pin11 - тут интереснее. При переключении в HIGH вроде все как и должно быть, но вот при переключении в LOW диод не гаснет, лишь становится тусклее. При использовании analogWrite диод так же не гаснет полностью.

Собсно вопрос: у этих пинов какой то свой особый путь и это как то настраивается или это нетипичное поведение и, возмножно, неисправность? Спасибо за уделенное внимание.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Никакого нетипичного поведения у этих пинов нет.

Проверьте, что настраиваете на выход. (Вот для этого и трубуется публикация скетча, чтобы не гадать на кофйейной гуще, что именно Вы делаете не так)

Pumpkin
Offline
Зарегистрирован: 12.02.2018

Скетч:

int led = 4;

void setup()
{
  pinMode(led, OUTPUT); 
}

void loop()
{
  for (int i = 0; i < 256; i += 5)
  {
    analogWrite(led, i);
    delay(25);
  }
  
  digitalWrite(led, LOW);
  delay(250);
  digitalWrite(led, HIGH);
  delay(250);
  digitalWrite(led, LOW);
  delay(250);
  digitalWrite(led, HIGH);
  delay(250);
  
  for (int i = 255; i >= 0; i -= 5)
  {
    analogWrite(led, i);
    delay(25);
  }  
  delay(1000);
}

Схема:

Для каждого проверяемого пина меняю первую строку в скетче и переподключаю диод соответствующим образом.

На всех пинах кроме 9, 10 и 11 все работает как и ожидается: если пин с pwm, то диод плавно загорается, пару раз моргает и плавно тухнет. Если без pwm,  то просто мигает.

Как же себя ведет диод при подключении к 9-11 я уже написал в первом посте:

9 - диод горит постоянно, ни гаснет, ни мигает. Т.е. на нем постоянно HIGH, другое напряжение установить на нем не выходит. Кроме того даже если в скетче пин 9 не используется, то на нем все равно HIGH.

10 - диод не горит, вообще.

11 - диод изначально уже слабо светится, затем плавно разгорается, мигает (опять же не high/low, а как будто high/почти_high), затем плавно гаснет не в ноль, а в свое изначальное бледное свечение. Короче скетч выполняется, но будто нижний порог напряжения у пина не нулевой.

Вроде бы достаточно подробно объяснил происходящее, если нужны еще какие то детали, то сообщите. Еще раз уточню, что при подключении к другим разъемам диод моргает как и полагается согласно скетчу, а такое странное поведение только с пинами 9, 10 и 11. Собсно поэтому и интересуюсь: это какая то фича о которой я еще не успел узнать или же неисправность платы и нужно задуматсья о заказе новой?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

В скетче установлен пин 4, а на картинке 9. Должно работать?

А вообще, Вы сказали, что соединение у Вас правильное (верим на слово, т.к. фото нет) и что пины таки соответсвуют скетчу (тоже верим на слово, т.к. приведённые картинка и текст этому противоречат) и при этом не работают пины (не верим на слово, так не бывает).

Никаких особенностей у этих пинов нет. Если всё, как Вы говорите, правильно, и плата исправна, должны работать.

Bront
Offline
Зарегистрирован: 05.04.2016

Только что проверил.

Все работает согласно вашему алгоритму на 9, 10, 11 пине. Шляпа где-то в подключениях ваших.

https://youtu.be/414fariUQNE

На макетке нарисовано красиво, а по факту может у вас контакты залиты флюсом, все это лежит в куче проводков и обрезках жилок.

Как показывает практика, в большинстве случаев в информации для размышлений дано одно, подключение другое, а скетч вообще третье.

Хотя, у меня есть ардуинка, которая ведет себя странно каждый раз при включении. Может и такое быть :)

Pumpkin
Offline
Зарегистрирован: 12.02.2018

ЕвгенийП пишет:

В скетче установлен пин 4, а на картинке 9. Должно работать?

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

Макет: https://a.radikal.ru/a40/1802/84/0a150b5cd5a3.jpg

Как проводились тесты: 

1) в первой строке скетча меняю номер пина на N. Остальное содержимое скетча неизменно.

2) зеленый провод подключаю к пину N. Остальная схема неизменна.

3) заливаю скетч.

При N = 2...8 и N = 12...19 светодиод ведет себя ровно так как ожидается согласно скетчу.

А при N = 9...11 поведение отличается. (Поведение диода на этих пинах я в постах ранее описал. Могу добавить, что если, например в скетче указан какой либо пин отличный от 9, то на пине 9 все равно есть напряжение. Т.е. если во время выполнения скетча диод переподключить на пин 9, то он горит, чего быть не должно).

Так как пины 9-11 не должны ничем отличаться от остальных (впринципе это и хотел узнать, спасибо за подтверждение), а схема всегда практически идентична, то разницу в поведении могу объяснить только неисправностью самих пинов/платы. 

Pumpkin
Offline
Зарегистрирован: 12.02.2018

Bront пишет:

Только что проверил.

Все работает согласно вашему алгоритму на 9, 10, 11 пине. Шляпа где-то в подключениях ваших.

Еще одно подтверждение, что дело именно в моем экземпляре платы. С подключением все хорошо, потому что макет был собран для теста специально и нужно было обеспечить идентичность условий для каждого пина. А само странное поведение пинов было замечено при попытке подключить 7сегментный 4разрядный индикатор и результат был соответствующий, пока не переподключился к другим разъемам. 

 

Bront
Offline
Зарегистрирован: 05.04.2016

Все же попробуйте внимательно осмотреть плату. Может где сопля или трещина, непропай.

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

Ардуинки уно я уже давно беру с контроллером в дип корпусе. Проще если что заменить или переставить контроллер с отлаженным

скетчем в нужное устройство

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Pumpkin, У Arduino Uno 20 GPIO. Все они одинаково работают в стандартном режиме цифровых входов или цифровых выходов, но, кроме того, многие из ни имеют некоторые дополнительные функции. Эти дополнительные функции у разных пинов разные:

- 6 штук поддерживают АЦ-преобразование,

- 6 штук поддерживают ШИМ,

- 2 штуки поддерживают последовательныхй порт,

- 2 штуки поддерживают протокол I2C,

- 3 штуки поддерживают протокол SPI,

- к одному подключен светодиод.

Так вот, функция analogWrite(), реализующая ШИМ - это не стандартная, а дополнительная функция, которая доступна только на некоторых пинах (на плате они обозначены значком ~). На всех остальных - не работает.

Pumpkin
Offline
Зарегистрирован: 12.02.2018

andriano пишет:

Так вот, функция analogWrite(), реализующая ШИМ - это не стандартная, а дополнительная функция, которая доступна только на некоторых пинах (на плате они обозначены значком ~). На всех остальных - не работает.

Это известно. Поэтому в скетче есть как analogWrite, так и digitalWrite, чтобы хоть что то происходило. Однако, поведение 9-11 пинов (несмотря на поддержку ими pwm) все равно не такое как ожидалось. Кроме как дефект платы (врожденный или приобретеный) пока идей не было.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А как ведут себя другие аналогичные платы с Вашими скетчем и схемой?

(самый простой способ проверки при подозрении на аппараную неисправность - замена)

Pumpkin
Offline
Зарегистрирован: 12.02.2018

Лично я на другой плате не проверял, т.к. пока у меня толька эта имеется, но согласно ответам в этой теме:

Bront пишет:

Только что проверил.

Все работает согласно вашему алгоритму на 9, 10, 11 пине.

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

Так что практически гарантированно проблема в моей плате, что в общем то для начального обучения никаких проблем не создает (эти пины просто не использую). В дальнейшем заменю.