Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
04.12.2007, 14:37
|
|
Прохожий
Регистрация: 03.10.2007
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Нажатие кнопки не отрабатывает...
Помогите начинающему..
И так имеем: ATMEGA8 к PB0 и PB1 подключены лампочки которые поочередно моргают.
Вешаю на PB2 кнопку.
Хочу: после нажатия кнопки на секунду лампочки потухли.
Явно ответ где-то на поверхности - плз, гляньте..
Код:
|
#include ‹avr/io.h›
#include ‹util/delay.h›
int main (void){
while (1) {
// 2 бит в ноль те вход; 0 и 1 - выход
DDRB=0b00000011;
PORTB=0x01;
_delay_ms(500);
// ни один из трех вариантов не работает..
// if ( bit_is_set(PINB,0x04) ) {
// if ( bit_is_set(PORTB,0x04) ) {
if ( PINB2 == 0 ) {
PORTB=0x00;
_delay_ms(1000);
}
PORTB=0x02;
_delay_ms(500);
}
return 0;
} |
ЗЫ. Пробывал разные значения вместо 0x04 - безрезультатно...
|
|
|
|
04.12.2007, 15:17
|
|
Гражданин KAZUS.RU
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
|
Цитата:
|
И так имеем: ATMEGA8 к PB0 и PB1 подключены лампочки которые поочередно моргают.
|
чего-то не видно чтобы они моргали и если это действительно лапочки то можно и мк спалить
Код:
|
int main (void){
DDRB=0b00000001;// 0 бит - выход
while (1) {
PORTB^=0x01; //изменяем значение на противоположное
_delay_ms(500);
if ( PINB2 == 0 ) {//если нажата кнопка ждем 1с
PORTB=0x00;
_delay_ms(1000);
}
}
return 0;
} |
это только для одного светодиода второй сими добавьте
|
|
|
|
04.12.2007, 15:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Сообщение от AndreiVV
|
Код:
|
int main (void){
...
PORTB^=0x01; //изменяем значение на противоположное
...
return 0;
} |
|
Менять значение на противоположное в атмелах экономичнее (во всех отношениях - регистров, времени) таким способом:
Код:
|
int main (void){
...
PINB.‹номер пина›=1; //изменяем значение на противоположное
...
return 0;
} |
|
|
|
|
04.12.2007, 15:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Нажатие кнопки не отрабатывает...
Сообщение от rattlesnake
|
Помогите начинающему..
Код:
|
int main (void){
while (1) {
...
// ни один из трех вариантов не работает..
// if ( bit_is_set(PINB,0x04) ) {
// if ( bit_is_set(PORTB,0x04) ) { |
|
Когда кнопка нажата, соответствующий ей бит в прочитанном байте, ну, никак не is_set... Действительно, на поверхности...
|
|
|
|
04.12.2007, 16:08
|
|
Прохожий
Регистрация: 03.10.2007
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Оно, конечно, спасибо, но но у меня аналогичный код, и аналогичная проверка, но на кнопку не реагирует..
Может просто я схемку не правильно сделал (ну не бейте сильно - начинаю)
-- Прилагается рисунок: --
|
|
|
|
04.12.2007, 16:14
|
|
Гражданин KAZUS.RU
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
|
Код:
|
PINB.‹номер пина›=1; //изменяем значение на противоположное |
это не изменяем значение на противоположное а просто установка 1 то есть значение не зависит от предыдущего значения
в моем варианте: было 0 -› станет 1, было 1 -› станет 0
в вашем варианте: было 0 -› станет 1,было 1 -› станет 1
|
|
|
|
04.12.2007, 16:24
|
|
Гражданин KAZUS.RU
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
|
Цитата:
|
Может просто я схемку не правильно сделал
|
1. светодиод обыно к + подключают(но не принципиально)
2. =если ноль то, у вас никогда не будет нуля тк при нажатии на кнопку у вас будет + пит. тоесть 1. Надо подключить к GND а не к VCC и поставить pullup с вывода мк на VCC или вкл внутренний pullup
|
|
|
|
04.12.2007, 16:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Сообщение от AndreiVV
|
Код:
|
PINB.‹номер пина›=1; //изменяем значение на противоположное |
это не изменяем значение на противоположное а просто установка 1 то есть значение не зависит от предыдущего значения:
было 0 -› станет 1,было 1 -› станет 1
|
Очень советую попробовать, прежде, чем спорить.
Сообщение от AndreiVV
|
... у вас никогда не будет нуля тк при нажатии на кнопку у вас будет + пит.
|
Да, я тоже был уверен, что кнопка давит на массу.
|
|
|
|
04.12.2007, 17:18
|
|
Гражданин KAZUS.RU
Регистрация: 29.06.2006
Сообщений: 638
Сказал спасибо: 37
Сказали Спасибо 56 раз(а) в 41 сообщении(ях)
|
Цитата:
|
Очень советую попробовать, прежде, чем спорить
|
я не спорю просто поспешил с ответом, перепутал PINB с PORTB. Вот проверил, и значение не меняится
Прикрепленный файл: 9493012.rar
|
|
|
|
04.12.2007, 17:40
|
|
Прохожий
Регистрация: 03.10.2007
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Всем спасибо - все заработало:
1. повесил кнопку на GRD и через 10кОМ на МК.
2.
Код:
|
int main (void){
DDRB=0b00000011;
PORTB|=_BV(2);
while (1) {
PORTB=0x01;
_delay_ms(250);
PORTB=0x02;
_delay_ms(250);
if ( bit_is_clear(PINB, 2) ) {
PORTB=0x00;
// что бы видно было..
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
_delay_ms(250);
}
}
return 0;
} |
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Опрос кнопки
|
Electric111 |
Микроконтроллеры, АЦП, память и т.д |
15 |
18.12.2007 22:48 |
Кнопки
|
retcom |
Микроконтроллеры, АЦП, память и т.д |
42 |
21.09.2007 07:03 |
Снова кнопки....
|
dosikus |
Микроконтроллеры, АЦП, память и т.д |
34 |
10.08.2007 20:46 |
Антидребезг, нажатие , отжатие....
|
dosikus |
Микроконтроллеры, АЦП, память и т.д |
16 |
20.06.2007 14:31 |
Часовой пояс GMT +4, время: 19:03.
|
|