Вылетают порты при использовании кнопок с внутренним подтягиванием

maksims
Offline
Зарегистрирован: 04.09.2016

Коллеги, добрый день.

 

Подскажите пож-та, из-за чего могут вытелать порты, к которым подключены кнопки внутренним сподтягиванием?

Очень странно выглядит - все работает нормально первые неск часов. Потом кнопка начинает "самонажиматься". Осцилограф показывает рандомную пилу на ноге. Причем, внешним резисором уже не подтягивается - все та же пила =(

 

уже 3 платы ушли в помойку - природа явления не понятна. Происходит вне зависимости от того, нажимать ли на кнопку вовсе.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

в качестве защиты от статики, установить стабилитрон на 5.6 в на каждую кнопку, или 2 диода vcc - pin, pin - gnd

maksims
Offline
Зарегистрирован: 04.09.2016

Спасибо за быстрый ответ!

Так и планировал, просто думаю - костыль, как остальные справляются?

Вдруг я чтото накосяячил именно с использованием?=)
PS "Умершие" порты нормально работают как out

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

maksims пишет:

Спасибо за быстрый ответ!

Так и планировал, просто думаю - костыль, как остальные справляются?

Вдруг я чтото накосяячил именно с использованием?=)
PS "Умершие" порты нормально работают как out

ни схему включения, ни скетча никто не видит, как можно что-то говорить о косяках? :)))

maksims
Offline
Зарегистрирован: 04.09.2016

Да там и рисовать особо нечего. Подключены к меге 3 устройства (LCD, часы и блок реле с опторазвязкой) и 3 кнопки.

Никаких доп компонент (резисторов диодов итп).

Все работает кроме кнопок

ссылка на яндексдиск https://yadi.sk/i/H3REwZicukgyS

 

 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

а на пины в сетапе указываете что они входы, pinmode(pin, input) ?

maksims
Offline
Зарегистрирован: 04.09.2016

да, конечно:

1void InitSwitches()
2{
3    //DDRB &= ~((1<<BTN1PIN) | (1<<BTN2PIN) | (1<<BTN3PIN)); // за ненадобностью закомментировано
4    PORTB |= (1<<BTN1PIN) | (1<<BTN2PIN) | (1<<BTN3PIN);// | (1<<BTN4PIN);
5    PCICR |= (1<<PCIE0);
6    PCMSK0 |= (1<<PCINT0)| (1<<PCINT1) | (1<<PCINT2);
7}

Использую Atmel Studio

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

то что за ненадобностью закомментировано и есть то что нужно :)

maksims
Offline
Зарегистрирован: 04.09.2016

Properties of Pins Configured as INPUT

Arduino (Atmega) pins default to inputs, so they don't need to be explicitly declared as inputs with pinMode() when you're using them as inputs.

https://www.arduino.cc/en/Tutorial/DigitalPins

Да и не меняется ничего. Вот если наоборот, сделать out - то появляется стабильные 5v на "мертвом" пине.

Когда он in - рандомные срабатывания. внешним пуллапом не подтягивается.
Может не в кнопках дело? ЧТо еще может дать такой эффект?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

я не знаю что происходит с регистрами, но пока не пропишешь что это вход, начинает глючить, раз 5 спотыкался на этом

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

maksims пишет:

просто думаю - костыль, как остальные справляются?

никак не справляются - ничего подобного у других не наблюдается

nevkon
Offline
Зарегистрирован: 20.01.2015

Фото платы/макетки может помочь в решении проблемы, также как все это добро питается?