Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Замедленная реакция PINA.0 на появление напряжения на пине.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Ailer
Здравствуйте!
Делаю ШИМ-контроллер, на котором можно будет задавать заполнение с помощью двух кнопок ("+" и "-"). Сами кнопки хочу примотать к пинам 0 и 1 порта А. Для проверки наличия напряжения на пинах пользуюсь конструкцией типа: if(PINA.0==1). Получается странная вещь - после подачи короткого импульса где-то полсекунды ничего не происходит, потом контроллер ведёт себя так, как будто бы я держу напряжение на ножке на высоком уровне, но импульс-то был короткий, я тут же убрал напряжение! Откуда берётся такое запаздывание? Что можно сделать? Спасибо заранее.
Вот собственно управляющий код:
Код
if((PINA.0==1)&&(pwm<100))
       {
        pwm++;
       }          
       if((PINA.1==1)&&(pwm>0))
       {
        pwm--;
       }
       f=pwm;
       pwm_val=floor(255*(f/100));
       lcd_putsf("PWM: ");
       itoa(pwm,c);
       lcd_puts©;
       OCR2=pwm_val;
       delay_ms(100);
       lcd_clear();
rezident
Ailer, при составлении своего сообщения вы забыли указать тип микроконтроллера.
Ailer
Прошу прощения. Контроллер - AtMega32.
Dog Pawlowa
Цитата(Ailer @ Jul 28 2010, 05:29) *
Для проверки наличия напряжения на пинах пользуюсь конструкцией типа: if(PINA.0==1).

Я вообще не могу понять, зачем проверять состояние вывода.

А, понял, это кнопка... Отвык от несобытийных подходов в программировании sad.gif
Палыч
Цитата(Ailer @ Jul 28 2010, 06:29) *
Для проверки наличия напряжения на пинах пользуюсь конструкцией типа: if(PINA.0==1).

Обычно, кнопки подключаются одним выводом к ноге МК, другим - на землю. При этом включают внутренний Pull-up на ногу, к которой подключена кнопка. При таком подключении, естественно, проверка нажатия кнопки выглятит типа if(PINA.0 == 0). А у Вас?

P.S. 1) Обычно, ещё и с дребезгом контактов борются... Возможно, в Вашей задаче это - излишне. 2) "Прореживать" увеличение/уменьшение значения переменной pwm с помощью задержки - как-то некрасиво: я бы "привязал" сюда таймер.
Lmx2315
А как по схеме реализована подача сигналов на пины ? Есть ли привязка к питанию через подтягивающий резистор или она у вас внутренняя ?
Вы подаёте на пины единичку , а потом ноль или просто перестаёте подавать единичку ?
Ailer
Кажется, разобрался, спасибо всем за участие.
Подавал единичку на пины, а потом просто передавал её подавать. Видимо, у пинов есть существенная для данной задачи ёмкость и крайне малый ток утечки - ещё 1,5-2 секунды пин был как бы в высоком состоянии из-за своей ёмкости. Припаял резисторы на 100 кОм между пинами и землёй - вроде помогло. Сейчас ожесточённо тестирую smile.gif
(да, обрабоку событий сделал по прерыванию таймера, спасибо за подсказку.)
ILYAUL
Цитата(Ailer @ Jul 28 2010, 11:16) *
ёмкость и крайне малый ток утечки - ещё 1,5-2 секунды пин был как бы в высоком состоянии из-за своей ёмкости.


Да там от силы 30 pf - ищите ещё. Как вы кнопки включили?
ar__systems
Подозреваю висящий пин.
Клим
Цитата(Ailer @ Jul 28 2010, 10:16) *
Припаял резисторы на 100 кОм между пинами и землёй - вроде помогло.

Вот эти глупости прекращайте сразу.
Для кого придумали встроенные поттягивающие к + резисторы ?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.