Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » Help не могу подружить кнопку и Mega16((

Страниц (1): [1]
 

1. Sham - 25 Февраля, 2007 - 12:36:38 - перейти к сообщению
Ребята может вопрос и ламерский но тем не менее не как не могу заставить работать кнопку.

Есть микроконтроллер Mega16-16PU собственно к ножке (с которой должно происходить считывание) подседина кнопка, соединенная с землёй.
Для проверки нажатия решил припаять светодиод.


Вот код программы:
CODE:

ldi r16,(1<<PC2)
ldi r17,(1<<DDC0)
out PORTC,r16
out DDRC,r17

ldi R20,0
ldi R16,0
ldi R17,0

TestPos:

in R17,PINC ; если кнопка нажата
CPSE R17,R20

jmp shine
jmp TestPos

shine:
sbi PORTC,0
nop
jmp shine


При включении получается что безразлично нажата ли кнопка или нет... сразу же зажигается светодиод... Грустный

И правильно ли я понял, что когда кнопка отпущена на ножке логическая 1, а когда нажата лог. 0?
2. Admin - 25 Февраля, 2007 - 22:02:19 - перейти к сообщению
Может быть, вот это поможет:

http://myrobot.ru/downloads/pdf/...or_beginners.pdf
3. Белый Волк - 26 Февраля, 2007 - 07:10:12 - перейти к сообщению
Нет, ты неправильно понял =)...
Это очень простой вопрос:
Земля - это точка наинизшего потенциала, ноль. Положительный клемм источника питания и ножка микросхемы, которая к нему присоединена - точка высшего потенциала. Ток всегда течёт из точки высшего потенциала в точку низшего. - это надо запомнить.

Ну а теперь по делу.
Ноль и Единица - это не то же, что "+" и "-". Следует это понять раз и навсегда.
Единица - это напряжение, превышающее 1.5 Вольта. Ноль - напряжение, меньшее 0.7 Вольта.
Т. о. У тебя на ножке микросхемы и до того, как ты нажал кнопку, и после этого - напряжение НИЖЕ 0.7 Вольта. Следовательно уровень логического нуля. Микроконтроллер правильно выполняет свою функцию и при подаче нуля на ножку - зажигает светодиод.
Для того, чтобы кнопка заработала именно для данного кода - нужно, чтобы она была размыкающей при нажатии, а второй вывод её присоединить к положительному проводу питания (через ограничивающий резистор).
Попробуйте подать (на уже собраном сейчас Вами устройстве) на выбранную ножку ток от питающего провода через резистор. Уверен - светодиод загорится! Подмигивающий
4. Sham - 27 Февраля, 2007 - 12:34:23 - перейти к сообщению
Очень странная ситуация. (по крайней мере для меня)

Пробую подсоединить кнопки к 7-й и 8-й ножке порта C и это работает, жмешь на кнопку светодиод горит, отпускаешь, гаснет.

А вот с другими ножками того же порта проблема... Причем самое интересное что 1-цу порт все таки ловит потому как без разницы нажата кнопка или нет, он переходит в часть программы зажигающую светодиод попробовал с помощью команды andi R17,0b01000000 поймать на какой же ножке 1-ца, оказалась что аж на 7-й!! Попробовал подсоединить на неё кнопку.. заработало.

Но почему на 7-й ножке? я же включал подтягивающий резистор для 3-ей?

Белый волк попробовал как вы сказали. Подключил через резистор 8 Ком. Но результат такой же. И ещё я так понимаю подтягивающие резисторы при таком методе надо отключать?

Цитата:
Микроконтроллер правильно выполняет свою функцию и при подаче нуля на ножку - зажигает светодиод.

Но если бы там был бы 0 светодиод как раз бы не загорался Шпион

Может быть надо уменьшить сопротивление? И можно ли для кнопки подавать питание с другой ножки контроллера без резистора?Смущение
5. avr32 - 14 Октября, 2007 - 07:17:30 - перейти к сообщению
После строчки
CODE:
in R17,PINC ; если кнопка нажата

поставь
CODE:
andi R17, (1<<DDC0)