|
Дребезг на клаве, Need your help ! |
|
|
|
Jul 19 2006, 19:02
|

Участник

Группа: Новичок
Сообщений: 40
Регистрация: 4-06-06
Пользователь №: 17 766

|
Понимаю что вопрос тупой, но всё таки ... Упростил пример до невозможного, а он опять не работает Цитата int main( void ) { byte t1,t2; DDRB=0x0F; // b0-b3 : outputs b4-b7 : inputs DDRD=0xFF; // d0-d7 output
PORTB=0x01;; for(;;) { __delay_cycles(160000); // Пихните куда надо t1=PORTB; t2=0x10; t1=t1 & t2;
if (t1==t2) PORTD=0xFF; else PORTD=0x00; } } Хочу чтоб загорелся диод на PORTD после нажатия клав. "1" на 4x4 клавиатуре. Помогите плииииис !!!
Сообщение отредактировал dio - Jul 19 2006, 19:03
|
|
|
|
|
Jul 19 2006, 21:34
|

Участник

Группа: Новичок
Сообщений: 40
Регистрация: 4-06-06
Пользователь №: 17 766

|
Цитата(impuls-v @ Jul 20 2006, 00:01)  схемку нарисуй. Нет никакой схемки. Использую мегу8, т.к. в клавиатуре задействована только одна клавиша, считайте что это простой вутон, который одним концом идет к B0 (через R=4k7), а другим к B4. Так же ставлю светодиод на одну из ног PORTD. Вооот !!!
|
|
|
|
|
Jul 19 2006, 21:58
|
Знающий
   
Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768

|
Цитата(dio @ Jul 20 2006, 00:34)  Цитата(impuls-v @ Jul 20 2006, 00:01)  схемку нарисуй.
Нет никакой схемки. Использую мегу8, т.к. в клавиатуре задействована только одна клавиша, считайте что это простой вутон, который одним концом идет к B0 (через R=4k7), а другим к B4. Так же ставлю светодиод на одну из ног PORTD. Вооот !!! Читайте внимательно доку ! Раздел дейташита I/O Ports -> Introduction сразу под фигурой 21. У АВР порт имеет _ТРИ_ регистра : DDRx - регистр направлениея данных, PORTx - регистр данных, PINx - порт входных пинов. Первые два доступны на чтение / запись, последний только чтение. При попытке чтения PORTх возвращается _ЗАПИСАННОЕ_РАНЕЕ_ в него значение. Вам надо читать регистр PINB.
|
|
|
|
|
Jul 19 2006, 22:03
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(dio @ Jul 20 2006, 03:34)  Нет никакой схемки. Использую мегу8, т.к. в клавиатуре задействована только одна клавиша, считайте что это простой вутон, который одним концом идет к B0 (через R=4k7), а другим к B4. Так же ставлю светодиод на одну из ног PORTD. Вооот !!! Если используете Bit0 для ввода, то почему маску для Bit4 накладываете? Строка Код t2=0x10; должна выглядеть как Код t2=0x01; А вообще если у вас матрица кнопок, то где у вас процедура ее сканирования?
|
|
|
|
|
Jul 19 2006, 22:24
|

Участник

Группа: Новичок
Сообщений: 40
Регистрация: 4-06-06
Пользователь №: 17 766

|
Цитата Если используете Bit0 для ввода, то почему маску для Bit4 накладываете? Вообще то B0 это выход, а B4 для ввода, как я понимаю, исправте меня если это не так. Цитата А вообще если у вас матрица кнопок, то где у вас процедура ее сканирования? Полная версия кода лежит отдельно, сначала хочу проверить на одной клавише. Цитата PINx - порт входных пинов. ... последний только чтение. ... Вам надо читать регистр PINB. Если честно, с PINx не знаком пока, надо разобраться. Спасибо !!!
|
|
|
|
|
Jul 19 2006, 22:37
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(dio @ Jul 20 2006, 04:24)  Цитата Если используете Bit0 для ввода, то почему маску для Bit4 накладываете? Вообще то B0 это выход, а B4 для ввода, как я понимаю, исправте меня если это не так. ОК. Согласен. Был невнимателен. Цитата(dio @ Jul 20 2006, 04:24)  Цитата А вообще если у вас матрица кнопок, то где у вас процедура ее сканирования? Полная версия кода лежит отдельно, сначала хочу проверить на одной клавише. Дык потому вас и просили схему нарисовать, чтобы понять что к чему. А то непонятно куда притянут входной пин и почему сканирование лог. 1 делается? Цитата PORTB=0x01;
|
|
|
|
|
Jul 19 2006, 22:43
|

Участник

Группа: Новичок
Сообщений: 40
Регистрация: 4-06-06
Пользователь №: 17 766

|
Цитата Чтобы его программа пошла, ему достаточно строку : > t1=PORTB; заменить на t1 = PINB; Я всё понял, пробую сейчас же !!! Огромное спасибо Tiro p.s. надеюсь __dellay_cycles(160000); всунул правильно
|
|
|
|
|
Jul 19 2006, 23:55
|

Участник

Группа: Новичок
Сообщений: 40
Регистрация: 4-06-06
Пользователь №: 17 766

|
Цитата(rezident @ Jul 20 2006, 02:18)  а светодиод зажигается подачей лог. 0 Прежде чем все начать я видел что и другие так делали (через лог. 0) и подумал : " А почему 0 а не 1", и решил сделать свою версию. Я не использую pull-up, скорей всего в этом и проблема. Наверное всетаки перейду на общепринятую версию. Премного благодарен за уделённое Вами мне время !!! Kalinixta !!!
|
|
|
|
|
Jul 20 2006, 19:33
|

Участник

Группа: Новичок
Сообщений: 40
Регистрация: 4-06-06
Пользователь №: 17 766

|
Цитата(Woodoo @ Jul 20 2006, 20:33)  вы же его через токоограничивающее сопротивление вешаете?? или прям на лапку порта?! Конечно же через соответствующее сопротивление ~ 360 ohm . Я прекрасно понимаю о чем вы говорите, проблема в чем то другом. Замерил напряжение на пинах PORTD и оно нормальное ~5V, как только устанавливаю светодиод, то тут же напряжение соответствующего пина (остальные в порядке) падает на примерно 1.8V, следовательно и диод горит тускло. Думаю что это дело загрузки, как уже упоминалось WHALEом Цитата(WHALE @ Jul 20 2006, 18:35)  вообще-то светодиоды "0" зажигают по привычке от старых серий контроллеров,имевших разную нагрузочную способность портов для 0 и для 1.для avr без разницы. Значит эта проблемма в АВРах всётаки не решена ???
|
|
|
|
|
Jul 21 2006, 08:31
|
Участник

Группа: Участник
Сообщений: 68
Регистрация: 19-07-06
Пользователь №: 18 918

|
Возможно проблема в следующем. (5-1.8)=3.2В 3.2/360 = 9мА Может ток недостаточный. А если напряжение падает на НОЖКЕ до такого значения, значит резистор отсутствует и свтодиод просаживает ножку. Мистики то небывает, как показала практика.
|
|
|
|
|
Jul 21 2006, 09:57
|

Частый гость
 
Группа: Свой
Сообщений: 192
Регистрация: 23-03-05
Из: Украина. Днепропетровск
Пользователь №: 3 626

|
Цитата(dio @ Jul 20 2006, 22:33)  Цитата(Woodoo @ Jul 20 2006, 20:33)  вы же его через токоограничивающее сопротивление вешаете?? или прям на лапку порта?!
Конечно же через соответствующее сопротивление ~ 360 ohm . Я прекрасно понимаю о чем вы говорите, проблема в чем то другом. Замерил напряжение на пинах PORTD и оно нормальное ~5V, как только устанавливаю светодиод, то тут же напряжение соответствующего пина (остальные в порядке) падает на примерно 1.8V, следовательно и диод горит тускло. Думаю что это дело загрузки, как уже упоминалось WHALEом Значит эта проблемма в АВРах всётаки не решена ???  Попробуйте включить лед плюсом на питание через резистор, минусом на ножку и включайте нулём. Потом расскажите.
|
|
|
|
|
Jul 26 2006, 21:04
|

Участник

Группа: Новичок
Сообщений: 40
Регистрация: 4-06-06
Пользователь №: 17 766

|
Извините за долговременное отсутствие, не было возможности. Цитата(Alex_Pol @ Jul 21 2006, 12:57)  Цитата(dio @ Jul 20 2006, 22:33)  Цитата(Woodoo @ Jul 20 2006, 20:33)  вы же его через токоограничивающее сопротивление вешаете?? или прям на лапку порта?!
Конечно же через соответствующее сопротивление ~ 360 ohm . Я прекрасно понимаю о чем вы говорите, проблема в чем то другом. Замерил напряжение на пинах PORTD и оно нормальное ~5V, как только устанавливаю светодиод, то тут же напряжение соответствующего пина (остальные в порядке) падает на примерно 1.8V, следовательно и диод горит тускло. Думаю что это дело загрузки, как уже упоминалось WHALEом Значит эта проблемма в АВРах всётаки не решена ???  Попробуйте включить лед плюсом на питание через резистор, минусом на ножку и включайте нулём. Потом расскажите. И так пробовал и иначе и вообще по всякому! Буду поддерживать традицию, через опрос на лог. 0. Хотя вполне возможно что сам намухлевал чего с кодом, не знаю, надоело копаться! Цитата(Rst7 @ Jul 21 2006, 13:20)  Цитата(WHALE @ Jul 20 2006, 18:35)  вообще-то светодиоды "0" зажигают по привычке от старых серий контроллеров,имевших разную нагрузочную способность портов для 0 и для 1.для avr без разницы.
Не без разницы. Чтобы не было вопросов, возьмите миллиамперметр и померяйте ток ... Мерить не мерил, но всё таки думаю что разница есть, ведь с опросом на лог. 0 заработало сразу без проблем! На этом хочу поблагодарить всех участвовавших за ваши советы, еще свидимся !
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|