Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Dimys800
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 106
1

ATMega16 проблема с портами ввода PINx

19.02.2011, 22:13. Просмотров 3862. Ответов 5
Метки нет (Все метки)

Хочу подключить к МК несколько кнопок, к порту "D", и чтобы при нажатии на них светились разные светодиоды порта "A". Написал в WinAVR-20100110 вот такую программу:

#include <avr/io.h>
#include <util/delay.h>

int main (void)
{

DDRA = 255; //Порт А настроен на вывод
PORTA = 255; //включены все всетодиоды

DDRD = 0; //порт D настроен на ввод
PORTD = 255; //на все лапки подаю "+" (логическую единицу)

while (1)
{

if (PIND == 254) //1, здесь работает.
{
PORTA = 1; //если "0" на первой лапке D, включаю первый светодиод на A
}

if (PIND == 253) //2, здесь тоже работает
{
PORTA = 2; // если "0" на второй лапке D, включаю второй светодиод на A
}

if (PIND == 252) //3, ПРОБЛЕМА ЗДЕСЬ !!!!
{
PORTA = 3; //а здесь хочу чтобы при нажатии СРАЗУ двух кнопок, горело два светодиода
}
}
}

Минус на МК подаю через ресистор 1 кОм. Первое и второе условие работает. ПРОБЛЕМА в том что при нажатии СРАЗУ двух кнопок, что по моему мнению (PIND == 252), ничего не получается !!!! а получается то что нажато первее: если первая нажата кнопка один - горит первый светодиод, если вторая то - второй ! А почему у меня не выполняется условие (PIND == 252) ?

P.S.
Ведь на выходе я же могу написать, например, PORTA = 3 в первом условии, и у меня будет гореть два светодиода ! или PORTA = 255 - и включатся все светодиоды ! почему же не получается такое на входе ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2011, 22:13
Ответы с готовыми решениями:

Управление тремя портами (Atmega16)
Здравствуйте, форумчане! Собрал по кусочкам программку для Меги16 по...

Проблема с портами ВВ на AVR
Добрый день. Возникла проблема при работе с портами ввода-вывода на модуле AVR...

Проблема с портами ATmega128
Всем привет! Делаю устройство для прозвонки шлейфов до 40-ка контактов, на...

Работа с портами ввода-вывода AVR
Всем доброго времени суток. Я написал статью про работу с портами ввода-выдода...

Проблема с фюзами Atmega16
Здравствуйте! Тема, конечно, избитая вдоль и впоперек, но уже довела до белого...

5
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
19.02.2011, 22:15 2
Минус на МК подаю через ресистор 1 кОм.
Это юмор такой? или зачем?
0
Dimys800
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 106
19.02.2011, 22:18 3
а кажется так было написано на этом сайте. Думаете что мне не хватило этого резистора чтобы подать достаточный ноль на лапку ?
0
dsodir
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,284
19.02.2011, 22:22 4
Не, стоп. Всмысле питание на МК подано через резистор 1к? Т.е. Минус БП >> резистор >> МК ? Или не то?
0
Dimys800
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 106
19.02.2011, 22:26 5
ОЙ. виноват, неправильно написал ! Минус на лапку порта D подан через резистор ! сам МК питается напрямую.
0
Dimys800
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 106
19.02.2011, 22:31 6
Спасибо "dsodir". ты нашёл проблему. я убавил резистор до 100 Ом и всё заработало !
0
19.02.2011, 22:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2011, 22:31

Проблема с прошивкой ATMega16
Решил в образовательных целях сделать свои собственные часы реального времени....

Проблема с V-USB на ATmega16.
Использую ATmega16-А в корпусе TQFP44. Схема подключения V-USB со...

Настройка отладчика для работы с портами ввода на STK500
Описание:Имеем следующий код:.include &quot;tn2313def.yms&quot; ;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru