-
13.04.2007, 11:27 #1
- Регистрация
- 21.01.2006
- Сообщений
- 28
- Поблагодарили
- 0
- Поблагодарил
- 0
mega16 - дуб или ?
здравствуйте всем, возник такой вопрос по atmege16, собрал аппаратную клавиатуру чтобы после нажатия клавиши получить готовое число и это число должен был принять через порт "С" микроконтроллер, все было неплохо когда проверял отладку в PROTEUSe, но когда зашил в микросхему пошли не понятки, нажимаешь кнопку видно что клавиатура сформировала число, но порт С упорно не принимает байт. потом проэксперементировал с одним битом порта PINC.0, с одним битом работает. в helpe на микросхему вроде нчего такого не нашел. число выставляет клавиатура положительным сигналом (т.е. единички), вот небольшой пример:
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
while (mem==1)
{
if (PINC==15) {lcd_clear(); delay_ms(50);
printe();};//очистка экрана (15)
if (PINC==22) {lcd_clear(); kdn=1;test=0;
kdе();};//ввод (22)
}
-
13.04.2007, 15:04 #2
- Регистрация
- 05.12.2005
- Адрес
- Волжский, Волгоградская обл.
- Возраст
- 69
- Сообщений
- 59
- Поблагодарили
- 1
- Поблагодарил
- 0
Ну вопервых уверен что (mem) всегда = 1 чтобы быть в цикле?
Во вторых, что за схема?
Если просто каждая кнопка подает единицу на свой вывод PINC
тогда есстественно работать не будет.
В этом случае надо проверять шестнадцатиричные числа типа
1 2 4 8 16 ...
Лучше проверять не число а разряд, типа:
if(PINC & 0x1) {
//------------ нажата кнопка на ножке PINC0
...
}
А еще правильнее присвоить каждому разряду порта С имя. Тогда так.
В хидере:
#define BUTTON_1 0
#define BUTTON_2 1
...
#define BUTTON_8 7
В программе:
if(PINC & (1<<BUTTON_2)) {
//----------- нажата кнопка 2
...
}
А если кнопки называть не BUTTON а по функциональному назначению
тогда и коментариев не надо, и так понятно будет.Павел :: ex: UA9COD
-
13.04.2007, 15:20 #3
- Регистрация
- 21.01.2006
- Сообщений
- 28
- Поблагодарили
- 0
- Поблагодарил
- 0
не совсем правильно, клавиатура аппаратная как я уже сказал ранее и формирует байт (т.е. от 1 - 255), процессор только считывает готовое значение на своем порту и далее идет по программе.
но выяснилось еще вот что, порт С не реагирует на то если подать на его выход все единички например PORTC=255 на выходе полное молчание
-
13.04.2007, 15:54 #4
- Регистрация
- 05.12.2005
- Адрес
- Волжский, Волгоградская обл.
- Возраст
- 69
- Сообщений
- 59
- Поблагодарили
- 1
- Поблагодарил
- 0
А перенастроить порт на выход незабыл?
DDRC = 0xFF
Кстати вот, как раз в тему:
http://www.telesys.ru/wwwboards/mcon...es/63444.shtmlПавел :: ex: UA9COD
-
14.04.2007, 23:26 #5
- Регистрация
- 21.01.2006
- Сообщений
- 28
- Поблагодарили
- 0
- Поблагодарил
- 0
зачем его настраивать на выход когда он должен работать на вход?
-
16.04.2007, 14:06 #6
- Регистрация
- 05.12.2005
- Адрес
- Волжский, Волгоградская обл.
- Возраст
- 69
- Сообщений
- 59
- Поблагодарили
- 1
- Поблагодарил
- 0
Как зачем?
А это кто писАл:
>но выяснилось еще вот что, порт С не реагирует на то если подать на его выход все единички например PORTC=255 на выходе полное молчание
Я на это и отвечал.
А вообще на телесисе возможно правильно посоветовали проинить все порты, даже если они не используются. Я с такой байдой не сталкивался, но возможно в каких то кристалах это присутствует.Павел :: ex: UA9COD
|
Социальные закладки