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

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

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

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

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

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

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

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

Сообщение от nokazus
561ИЕ8 - счетчик со встроенным дешифратором - 10 выходов.
досикус, вчера ты съел мой моск.
Как бы я сделал... Обявил бы массив структур - по 6 битов на каждую кнопку 1 - бит - кнопка нажата (железно) , 2 бит - кнопка отжата (та же) и 4 бита выделил на счетчик дребезга.
Код:
static volatile       bit	KANAL1	@ ((unsigned)&PORTA*8)+4;
typedef struct 
{
unsigned naj:1;//кнопка нажата битовая переменная
unsigned otj:1;// кнопка отжата битовая переменная
unsigned st:4;// 4 бита на счетчик дребезга
}knopka_ ;
knopka_ knopka[20]; // массив структур на 20 кнопок
В программе вызываем функцию, которой передаем номер импульса на счетчик-дешифратор
Код:
// после очередного импульса на счетчик 
// анализируем (антидребезг) 
analiz(1);// передаем номер импульса
//----------------------------------------
void analiz (unsigned char nomer)
{
if (KANAL1 == 0) // кнопка отжата
	{
	knopka[nomer].naj=0;// снимаем флаг нажатой кнопки
	knopka[nomer].st --;// уменьшаем счетчик антидребезга
    if(knopka[nomer].st ‹0)// счетчик закончился влево
			{
			knopka[nomer].otj=1;// ставим флаг отжатой  кнопки
			knopka[nomer].st =0;
			}
	}
else // кнопка нажата 
	{
	knopka[nomer].otj=0;// снимаем флаг отжатой кнопки	
	knopka[nomer].st ++;// увеличиваем счетчик антидребезга
 	if(knopka[nomer].st ›=15)// счетчик закончился вправо
				{
				knopka[nomer].naj=1;// ставим флаг нажатой  кнопки
				knopka[nomer].st =15;
				}
	}
}

//-------------------------------------------
Перепишем для 2 каналов
Код:
static volatile       bit	KANAL1	@ ((unsigned)&PORTA*8)+4;
static volatile       bit	KANAL2	@ ((unsigned)&PORTA*8)+3;
void analiz (unsigned char nomer)
{
if (KANAL1 == 0) // кнопка отжата
	{
	knopka[nomer].naj=0;// снимаем флаг нажатой кнопки
	knopka[nomer].st --;// уменьшаем счетчик антидребезга
    if(knopka[nomer].st ‹0)// счетчик закончился влево
			{
			knopka[nomer].otj=1;// ставим флаг отжатой  кнопки
			knopka[nomer].st =0;
			}
	}
else // кнопка нажата 
	{
	knopka[nomer].otj=0;// снимаем флаг отжатой кнопки	
	knopka[nomer].st ++;// увеличиваем счетчик антидребезга
 	if(knopka[nomer].st ›=15)// счетчик закончился вправо
				{
				knopka[nomer].naj=1;// ставим флаг нажатой  кнопки
				knopka[nomer].st =15;
				}
	}
if (KANAL2 == 0) // кнопка отжата
	{
	knopka[nomer+10].naj=0;// снимаем флаг нажатой кнопки
	knopka[nomer+10].st --;// уменьшаем счетчик антидребезга
    if(knopka[nomer+10].st ‹0)// счетчик закончился влево
			{
			knopka[nomer+10].otj=1;// ставим флаг отжатой  кнопки
			knopka[nomer+10].st =0;
			}
	}
else // кнопка нажата 
	{
	knopka[nomer+10].otj=0;// снимаем флаг отжатой кнопки	
	knopka[nomer+10].st ++;// увеличиваем счетчик антидребезга
 	if(knopka[nomer+10].st ›=15)// счетчик закончился вправо
				{
				knopka[nomer+10].naj=1;// ставим флаг нажатой  кнопки
				knopka[nomer+10].st =15;
				}
	}
}
//вычисляем номер нажатой кнопки
unsigned char nm_kn();
Код:
unsigned char nm_kn(void)
{
unsigned char temp;
temp=255;
for (i=0;i‹20;i++)
	{
if(knopka[i].naj==1)
		{
		temp=i;
		break;
		}
	}
return temp;
}
// вернет 255, если ничего не нажато
// или номер нажатой кнопки
Реклама:
urry вне форума  
Непрочитано 03.08.2007, 17:30  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Ну, собственно, к сказанному... Проект в протеусе.

Прикрепленный файл: 3675028.rar
urry вне форума  
Непрочитано 03.08.2007, 18:22  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Ну ты ДАЕШЬ , извини что заставил мучиться...
сПАСИБО!!
dosikus вне форума  
Непрочитано 03.08.2007, 18:51  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Опс , ты не совсем прав .
Надо использовать ресет на счетчике,
тогда мы будем знать начало сканирования и добавив переменную
счетчик будем знать номер строки и не надо будет массива.
В принципе это у меня уже сделано.
Но результат тот же , отловить отжатие кнопки не могу .
Вот прилагаю.

Прикрепленный файл: 302344.rar
dosikus вне форума  
Непрочитано 03.08.2007, 19:00  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

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

А я могу... Не суть... Я выступаю по "взрослым" компиляторам - микроконтроллеры -мое хобби - дань преступному радиолюбительскому прошлому.
Кругом одно и то же - а в Анктартиде вдобавок холодно..
Сделаем...
Посмотрел твой код... *восхищенно* не, не зря меня в Арисент не взяли.. я бы такое и под пивом не написал... Ущербный, наверное...
Кстати, обработку клавиш в файле не увидел....
urry вне форума  
Непрочитано 04.08.2007, 01:47  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

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

Добавил сброс на счетчик. Измененный проект прилагаю. А чем тебе так не нравятся массивы структур ?
Проверить нажата ли кнопка с номером ном -
if (knopka[nom].naj == 1) если нажата, то 1
есл отжата
if (knopka[nom].otj == 1)
Ecли там и там 0, значит, кнопка еще не определилась, работает счетчик антидребезга.
Номера кнопок идут с 0 до 9 - (как считает дешифратор) для младшего канала - и с 10 по 19 -для старшего.

Прикрепленный файл: 939152.rar
urry вне форума  
Непрочитано 04.08.2007, 11:15  
Dozer
Временная регистрация
 
Регистрация: 04.04.2005
Сообщений: 77
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Dozer на пути к лучшему
По умолчанию

Зачем усложнять жизнь? Ведь можно ввести 1-й счётчик на таймер, чтоб обработка шла, скажем, раз 16 в секунду, а второй прибавлялся при нажатой кнопке (любой) до определённого состояния и сбрасывался при изменении состояния любой кнопки. 1-й счётчик исключает дребезг (т.к. он не может так долго продолжаться), а второй будет служить для повтора нажатий. В итоге 2 байта на счётчики и 5-6 байт (2*20бит) на кнопки (текущее и предыдущее состояния).
__________________
No pain - no gain. Ha-ha
Dozer вне форума  
Непрочитано 04.08.2007, 11:55  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Сообщение от dosikus
Вот прилагаю.
Впечатляет

Прикрепленный файл: 302344.rar
CERGEI1982 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И снова терморегулятор kolbasnik3 Микроконтроллеры, АЦП, память и т.д 45 17.08.2009 16:54
И снова блютуз! Haulpak Ремонт оргтехники 0 10.03.2009 05:06
[Решено] и снова магниты:-) spilberg Отвлекитесь, эмбеддеры! 5 27.03.2008 15:59
Снова DNA1001 R666 Информация по радиокомпонентам 0 25.01.2008 16:39
И снова температура ua_gruzin Поиск схем. Делимся схемами 0 14.02.2007 01:18


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


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