Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

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

 
Опции темы
Непрочитано 04.10.2007, 22:25  
maxNTF
Вид на жительство
 
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
maxNTF на пути к лучшему
По умолчанию обработка клавиатуры?

Подскажите плиз, как правильно организовать обработку клавиатуры. Я делаю так:
поочередно таймером меняю уровни на 3-х портах, на схеме (SX 34,35,36)
И по четырем портам ловлю прерывания.
В симуляторе PROTEUS се работает нормально (правда иногда зависает), а вот в девайсе с реальной клавиатурой, работает не стабильно, виснит, кнопки поклацаю снова работает.
Что я делаю не так програмно или аппаратно?
Код обработки клавиатуры
Код:
	if (TMR2IF==1)
	{
	if (f_keypres==0 & RBIF!=1)
		{
		key_seconds++;
		if (key_seconds›=500)
			{
			if (RB1==0) RB1=1, RB2=0;
			else if (RB2==0) RB2=1, RB3=0;
			else if (RB3==0) RB3=1, RB1=0;
			key_seconds=0;
			}
		}
...
if (RBIF==1)
		{
	if (f_keypres==0) f_keypres=1;
	else f_keypres=0;
		if (RB1==0)
		{
			if (RB4==0) key=0x31;
			else if (RB5==0) key=0x34;
			else if (RB6==0) key=0x37;
			else if (RB7==0) key=0x2a;
		}
		else if (RB2==0)
		{
			if (RB4==0) key=0x32;
			else if (RB5==0) key=0x35;
			else if (RB6==0) key=0x38;
			else if (RB7==0) key=0x30;			
		}
		else if (RB3==0)
		{
			if (RB4==0) key=0x33;
			else if (RB5==0) key=0x36;
			else if (RB6==0) key=0x39;
			else if (RB7==0) key=0x23;			
		}
		if (f_keypres==1) f_buzzer=1, Keypres();
			else f_buzzer=0;
		RBIF=0;
		}

-- Прилагается рисунок: --
Реклама:
maxNTF вне форума  
Непрочитано 05.10.2007, 00:10  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

А дребезг подавляете? В протеусе кнопки без дребезга, в отличие от реальных кнопок. И выложите польностью проект если хотите чтоб помогли...
dimonbest вне форума  
Непрочитано 05.10.2007, 00:37  
maxNTF
Вид на жительство
 
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
maxNTF на пути к лучшему
По умолчанию

Подскажи чем можно подавлять дребезг в моем случае?
Не пойму почему когда что то спрашиваю все говорят выложи проект, интересно кому охото разбераться в более чем 1000 строк кода?
Я вроде привожу примеры с законченым смыслом.
Вообще я переделал обработку клавы, так как когда порты на прирывание стоят, уж больно они чувчтвительные, срабатывают даже если счупом от осцилографа касаюсь.
Сделал все через таймер.
Хотя про дребезг очень нужно, подскажи как защитить в моем случае?
maxNTF вне форума  
Непрочитано 05.10.2007, 00:53  
dimonbest
Гражданин KAZUS.RU
 
Аватар для dimonbest
 
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
dimonbest на пути к лучшему
По умолчанию

может что то из этого подойдет:
https://kazus.ru/forum/topic_8574-0-asc-0.html
https://kazus.ru/forum/topic_8189-0-asc-0.html
https://kazus.ru/forum/topics/7800.html
https://kazus.ru/forum/topics/7708.html
https://kazus.ru/forum/topics/7051.html
https://kazus.ru/forum/topics/6923.html
https://kazus.ru/forum/topics/f_3299...C5%C7%C3#32998
dimonbest вне форума  
Непрочитано 05.10.2007, 08:15  
Asdex
Временная регистрация
 
Регистрация: 31.07.2004
Сообщений: 78
Сказал спасибо: 0
Сказали Спасибо 27 раз(а) в 6 сообщении(ях)
Asdex на пути к лучшему
По умолчанию

Доброго времени... Если необходимо могу выслать файл и схему реально действующей клавиатуры... Разрабатывал сам. Успешно эксплуатируется уже более года на производстве. Не использует прерываний. С количеством кнопок - 16.
Asdex вне форума  
Непрочитано 05.10.2007, 08:19  
Asdex
Временная регистрация
 
Регистрация: 31.07.2004
Сообщений: 78
Сказал спасибо: 0
Сказали Спасибо 27 раз(а) в 6 сообщении(ях)
Asdex на пути к лучшему
По умолчанию

Да. Забыл сказать. Схема и программа под ATMega 8535. Написана в Algorithm Builder. Но думаю это проблемой не будет.
Asdex вне форума  
Непрочитано 05.10.2007, 10:01  
maxNTF
Вид на жительство
 
Регистрация: 18.06.2006
Сообщений: 434
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 12 сообщении(ях)
maxNTF на пути к лучшему
По умолчанию

Если клавиатура обрабатывается без прерываний, как же ее постоянно контролировать в процессе выполнения основной программы?
maxNTF вне форума  
Непрочитано 05.10.2007, 10:57  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

А что, основной цикл микроконтроллера - 10 секунд занимает ? Выделяете время в основном цикле на опрос, затем - когда удобно - анализируете состояние и обрабатываете. Время в основном цикле, выведенное под другие задачи, можно использовать как константу задержки для подавления дребезга.
Еще вариант
http://www.remexpert.com/forum/viewt...er=asc&start=0
urry вне форума  
Непрочитано 05.10.2007, 15:33  
Asdex
Временная регистрация
 
Регистрация: 31.07.2004
Сообщений: 78
Сказал спасибо: 0
Сказали Спасибо 27 раз(а) в 6 сообщении(ях)
Asdex на пути к лучшему
По умолчанию

Сообщение от urry
А что, основной цикл микроконтроллера - 10 секунд занимает ? Выделяете время в основном цикле на опрос, затем - когда удобно - анализируете состояние и обрабатываете. Время в основном цикле, выведенное под другие задачи, можно использовать как константу задержки для подавления дребезга.
Еще вариант
http://www.remexpert.com/forum/viewt...er=asc&start=0
Совершенно согласен с данным утверждением. Таймер же дергает задачу сколько-то раз в секунду (смена скан-кода). Вот в это время и производить опрос. По крайней мере у меня так. Дребезг давится проверкой на отпускание нажатой клавиши. Так же без труда можно добавить таймер времени нажатия если нужно. Мне было без надобности - по-этому я в своей разработке его не учитывал.
Asdex вне форума  
Непрочитано 05.10.2007, 15:43  
Asdex
Временная регистрация
 
Регистрация: 31.07.2004
Сообщений: 78
Сказал спасибо: 0
Сказали Спасибо 27 раз(а) в 6 сообщении(ях)
Asdex на пути к лучшему
По умолчанию

Сообщение от maxNTF
Если клавиатура обрабатывается без прерываний, как же ее постоянно контролировать в процессе выполнения основной программы?
Нет ну если нужно - могу и прерывание вставить Вопрос только - Зачем? Если делать с прерыванием, то лучше вообще без таймера. В этом случае на 16 клавиш получиться 8 линий + один вывод прерывания. Если жаль такое количество портов отдавать - есть еще вариант. Вытащить контроллер клавы от компа. Распаять хоть все 101(1ХХ - кто больше?) клавишу. Два входа - из них один прерывание. Такое тоже делал, давно но до сих пор работает. Кстати у Atmel'a по этому поводу даже даташит имеется. Так что тут только от фантазии и рук зависит.
Asdex вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опрос клавиатуры ra0wbj Микроконтроллеры, АЦП, память и т.д 3 13.10.2011 21:40
Протокол клавиатуры СА-6 MisterDi Микроконтроллеры, АЦП, память и т.д 0 12.02.2009 00:03
Обработка нескольких прерываний AVR (вопрос) festoon Микроконтроллеры, АЦП, память и т.д 27 17.11.2008 18:02
нид хелп. Обработка сигнала с датчика freele Автоматика и аппаратура связи 5 14.07.2007 16:56
Обработка прерываний. Tibo Микроконтроллеры, АЦП, память и т.д 12 13.07.2007 17:22


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot