Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Кнопки

Непрочитано 10.09.2007, 20:40  
retcom
Вид на жительство
 
Регистрация: 27.07.2006
Сообщений: 308
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
retcom на пути к лучшему
По умолчанию Кнопки

Привет!
МК ATmega16.
К PIND.6 присоединена кнопка, выводом на ‘-’.
В программе хочу, в зависимости от численного значения счетчика ‘n’, выводить то или иное сообщение на ЖК:

Код:
int n = 0x30;

//---------------------------------------------------------
Пропускаю конфигурацию портов и таймеров
//---------------------------------------------------------

DDRD=0x00;
PORTD=0x00;

//---------------------------------------------------------
Пропускаю конфигурацию портов и таймеров
//---------------------------------------------------------

while(1)
{
if(PIND.6==0)
n=n+1;
switch(n)  8) 
{
Case 1: 
            lcd_clear();
            lcd_gotoxy(1,0);
     lcd_putsf("Hello");
Break;

Case 2: 
      lcd_clear();
      lcd_gotoxy(1,1);
      lcd_putsf("avr123.nm.r");
Break;  :P 

Case 3: 
             lcd_clear();
             lcd_gotoxy(2,1);
     lcd_putsf("u");
Break;
}
}
Почему-то не работает. Не подскажите, что я не правильно делаю?



Ну сколько раз повторять ..
Выкладываете код используйте соответствующую кнопку...
dosikus
Реклама:
retcom вне форума  
Непрочитано 10.09.2007, 21:02  
urry
Почётный гражданин KAZUS.RUN
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 107 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

если ограничить n, то появится прекрасный генератор случайных чисел
Код:
n++;
if (n›3)n=1;
urry вне форума  
Непрочитано 11.09.2007, 00:36  
retcom
Вид на жительство
 
Регистрация: 27.07.2006
Сообщений: 308
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
retcom на пути к лучшему
По умолчанию

Ну как делать-то?, вернее, где я неправ?
Покажите. а я буду делать по образу и подобию...

Код:
Ну сколько раз повторять .. 
Выкладываете код используйте соответствующую кнопку... dosikus
Ладно, ладно. Я не думал что это так важно. Впредь буду делать.
retcom вне форума  
Непрочитано 11.09.2007, 00:43  
retcom
Вид на жительство
 
Регистрация: 27.07.2006
Сообщений: 308
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
retcom на пути к лучшему
По умолчанию

Цитата:
если ограничить n, то появится прекрасный генератор случайных чисел
Ваша правда дяденька!
Когда я нажимал на кнопку. то появлялись знаки, а то и цифры - все разные! (во кошмар!). Я так понимаю, что надо это как то застопорить. Только как? С дребезгом контактов это имеет отношение?
retcom вне форума  
Непрочитано 11.09.2007, 03:29  
CERGEI1982
Почётный гражданин KAZUS.RUN
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,578
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Веди задержку между отображениями например одну секунду и будет легче смотреть что к чему.И поставь чтоб зацикливалась ожидая второе нажатие кнопки,но задержку надо,ведь есть дребезг контактов и програма то выполняется моментально.
CERGEI1982 вне форума  
Непрочитано 11.09.2007, 05:09  
Drex
Прописка
 
Регистрация: 16.04.2004
Сообщений: 198
Сказал спасибо: 339
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Drex на пути к лучшему
По умолчанию

Дребезг здесь ни причем, тут в принципе неправильная обработка кнопки. Во первых, обрабатывать надо не единицу на порте, а именно перепад с 1 на 0. Во вторых, нужно устранять дребезг. Я уже не первый проект это делаю в прерываниях по таймеру. Благо он всегда у меня использовался. Особенно удобно, если есть динамическая индикация. К ней привязать опрос порта кнопки на каждом цикле - не проблема. Затем счетчик. Если кнопка нажата увеличиваем на 1, если нет, обнуляем. Как только счетчик достиг определенного значения, то значит дребезг завершился, и можно выставлять флаг "Кнопка нажата". Все это делается в циклическом прерывании. А затем уже в основной программе идет спокойная обработка события по нажатию, и сброс флага "Кнопка нажата". Немного доработав этот алгоритм, запросто можно различать короткие и длинные нажатия. У меня есть такой пример на асме для пика. И есть еще пример на С для пика, но там отрабатывается не короткие-длинные, а одинарные, двойные и тройные нажатия. Одна кнопка - три функции. Если интересно могу выслать.
Drex вне форума  
Непрочитано 11.09.2007, 06:04  
CERGEI1982
Почётный гражданин KAZUS.RUN
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,578
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Выложи тут же,для пика хочу посмотреть,можно и на си.
CERGEI1982 вне форума  
Непрочитано 11.09.2007, 09:59  
Drex
Прописка
 
Регистрация: 16.04.2004
Сообщений: 198
Сказал спасибо: 339
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
Drex на пути к лучшему
По умолчанию

Что именно выложить ?
Drex вне форума  
Непрочитано 11.09.2007, 21:51  
rremix
Временная регистрация
 
Регистрация: 01.11.2006
Сообщений: 66
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
rremix на пути к лучшему
По умолчанию

2 CERGEI1982
ну, например, так :
Код:
ScanKbd
	clrf 	PORTB
        .
        .
        . Дабы не занимать место на странице - убито
        . см. на следующей стр. откомменти-
        . рованную версию
        .
	goto 	SK.NC.Loop
	return
описать переменные и константы, думаю, не составит труда. А функции BtnPress...BtnHold выглядят как таблицы:
Код:
BtnPress
    andlw   0x0F
    movwf   Tbl_Tmp
    movlw   high(Font)
    movwf   PCLATH
    movfw   Tbl_Tmp
    addwf   PCL,F

	return 	
	return
	return
	return
	return
	return
	goto 	Key1P
	goto 	Key2P
	goto 	Key3P
Только, боюсь, утонет вопрошающий, потому
2 retcom
упрощенный вариант в этом случае (без подавления дребезга):
Код:
char pressed;
if(PIND.6==0) 
{
 if (0==pressed)
   n=n+1;
 pressed = 1;
} else {
  pressed = 0;
};
rremix вне форума  
Непрочитано 12.09.2007, 01:51  
retcom
Вид на жительство
 
Регистрация: 27.07.2006
Сообщений: 308
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
retcom на пути к лучшему
По умолчанию

Цитата:
Веди задержку между отображениями например одну секунду и будет легче смотреть что к чему.И поставь чтоб зацикливалась ожидая второе нажатие кнопки,но задержку надо,ведь есть дребезг контактов и програма то выполняется моментально.
Ты прав в абсолюте. Я это и сам понимаю. Как это в кодировке отобразить?

Цитата:
Дребезг здесь ни причем, тут в принципе неправильная обработка кнопки. Во первых, обрабатывать надо не единицу на порте, а именно перепад с 1 на 0. Во вторых, нужно устранять дребезг. Я уже не первый проект это делаю в прерываниях по таймеру. Благо он всегда у меня использовался. Особенно удобно, если есть динамическая индикация. К ней привязать опрос порта кнопки на каждом цикле - не проблема. Затем счетчик. Если кнопка нажата увеличиваем на 1, если нет, обнуляем. Как только счетчик достиг определенного значения, то значит дребезг завершился, и можно выставлять флаг "Кнопка нажата". Все это делается в циклическом прерывании. А затем уже в основной программе идет спокойная обработка события по нажатию, и сброс флага "Кнопка нажата". Немного доработав этот алгоритм, запросто можно различать короткие и длинные нажатия. У меня есть такой пример на асме для пика. И есть еще пример на С для пика, но там отрабатывается не короткие-длинные, а одинарные, двойные и тройные нажатия. Одна кнопка - три функции. Если интересно могу выслать.
Да я знаю
Ты можешь помочь мне это в коде отабразить? Уточню:
Имеем три строки. Первое нажатие на кнопку - строка один, ... , ... - строка три.

DDRD=0x00;
PORTD=0x00; Это правильно у меня?

PIND.6 -----КНОПКА------ "-"
Так?

rremix: Не сработало (сишный код, Азмовский не пробовал).
retcom вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задержка нажатой кнопки yostaf Электроника - это просто 31 15.04.2008 13:37
Опрос кнопки Electric111 Микроконтроллеры, АЦП, память и т.д 15 18.12.2007 22:48
Снова кнопки.... dosikus Микроконтроллеры, АЦП, память и т.д 34 10.08.2007 20:46


Часовой пояс GMT +4, время: 00:50.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.