Страница 1 из 1

Кнопочки и AVR'очки

Добавлено: Вс дек 28, 2008 19:35:10
Radio_Master
здраствуйте товарищи!С наступающим Вас!
Мне тут срочно нужно сделать устройство которое должно считывать количество и частоту нажатия кнопки.Но проблема в том что я не вижу способа как это осуществить :cry: Прошу направить меня в правильное русло, а то мне придется на новый год быть репрессированным:(Помогите кто чем может.
Я это собираюсь делать на Atmega8 и CVAVR.Зараннее огромное спасибо.

Добавлено: Вс дек 28, 2008 19:37:38
nds
опиши поподробнее что надо

Добавлено: Вс дек 28, 2008 21:01:54
Aheir
С количеством нажатий проблем не вижу, а вот частоту нажатий предлагаю считать "среднюю" за какой-то перид, т.е. 10 нажатий/мин, например, потому как вообще с частотой у непериодических процессов как-то сложно... :)

Добавлено: Пн дек 29, 2008 12:00:24
Radio_Master
Ну с количеством я тоже проблем невижу,а вот с частотой пока не сооброжу чего то :(

Добавлено: Пн дек 29, 2008 12:08:09
Radio_Master
Грубо говоря мне нужно:
-Нажать несколько раз кнопку с разной частотой
-мигнуть светодиодом так же как нажималась кнопка.

помогите плз

Добавлено: Пн дек 29, 2008 12:25:15
константин_KoSS_89
а если не секрет,что должно получиться в конце? :shock:

Добавлено: Пн дек 29, 2008 12:43:16
IfoR
Ну, чего тут.

Например, вариант (для теории):
Для начала :) :
Заводим переменныю X, тип unsigned int = 0 - количество нажатий в минуту.
Заводим переменныю M, тип unsigned int = 0 - минут прошло.
Заводим переменныю Y, тип unsigned int = 0 - Частота.
Заводим переменныю Z, тип unsigned char = 0 - Флаг нажатия кнопки.
Настраиваем INT0 на срабатывание по изменению напряжения.
Настраеваем пин порта на вывод для светодиода.

Процесс:
Если срабатывает прерывание:
Если Z==0, значит кнопка нажата. X увеличиваем на 1. Зажигаем светодиод. Z=1.
Иначе, кнопка отпущена. Тушим светодиод. Z=0;

Главная функция:
Делаем задержку на 1 минуту циклами.
Увеличиваем M на 1
Выщитываем частоту Y=X/M


Если у нас будет вывод на дисплей или ещё куда (а он будет :) ), то в цикл задержку вставляем функцию вывода. Всё. :)

Но только нужно сбрасывать все данные если X или M =65535

Добавлено: Пн дек 29, 2008 21:25:12
Белк
Может я и ошибаюсь, но это похоже на телеграфный ключ с памятью, в таком случае внутренней памяти МК может быть маловато, придётся использовать или большую мегу или цеплять внешнюю последовательную память, что имхо предпочтительнее.

Добавлено: Пн дек 29, 2008 21:54:42
Aheir
Как вариант: заводим таймер на срабатывание раз в 5-10мс, считаем кол-во срабатываний таймера, пока кнопка не нажата, в одну переменную, потом кол-во срабатываний при нажатой кнопке в другую, потом опять паузу в третью - и т.д. Потом воспроизводим все это светодиодом. Можно довольно длительные последовательности воспроизводить, ограничено кол-вом переменных и их разрядностью, т.е. ОЗУ МК по факту. Например, беззнаковый инт = 65535, т.е. при кванте 10мс это почти 11 минут одной паузы (или нажатия), а переменных таких можно завести довольно много.

Добавлено: Вт дек 30, 2008 13:39:36
Radio_Master
Aheir писал(а):Как вариант: заводим таймер на срабатывание раз в 5-10мс, считаем кол-во срабатываний таймера, пока кнопка не нажата, в одну переменную, потом кол-во срабатываний при нажатой кнопке в другую, потом ...
Спасибо огромное, буду опираться на вашу мысль. Еще вопрос: может ли AVR обрабатывать массивы?

Добавлено: Ср дек 31, 2008 17:01:40
Radio_Master
Подскажите еще плиз, как можно сравнить два напряжения? А точнее мне нужно что бы при появлении разности напряжений выход становился 0,а когда же напряжения одинаковые то на выходе должна быть 1.

Добавлено: Ср дек 31, 2008 21:23:29
kalobyte
в меге 8 есть компаратор
http://easyelectronics.ru/ там есть статьи по нему и по твоему вопросу

Добавлено: Чт янв 01, 2009 19:16:59
Radio_Master
Мне кажется что компаратор мне особо не поможет!так как мне нужно засечь ЛЮБУЮ разницу между двумя напряжениями! Может у кого есть еще какие идеи?

Добавлено: Чт янв 01, 2009 21:12:16
Aheir
Используйте ОУ, его выход - на Мегу. Да, AVR может работать с массивами.

Добавлено: Пт янв 02, 2009 14:58:49
Radio_Master
Я был бы очень благодарен если бы вы рассказали принцип работы этой штуки с ОУ :) Как что и зачем включать...

Добавлено: Пт янв 02, 2009 16:02:21
Pooher
Если на входах ОУ напряжения одинаковые, то на выходе 0, а если они не равны, то на выходе появляется сигнал.
Делал я когда-т терморегулятор по такому принципу, ну ет пока МК не заинтересовался основательно.
В принципе при таком включении ОУ можно считать компаратором.

Добавлено: Пт янв 02, 2009 18:26:31
Radio_Master
Pooher писал(а):Если на входах ОУ напряжения одинаковые, то на выходе 0, а если они не равны, то на выходе появляется сигнал.
Так это то что мне нужно!:)А где я могу найти схему такого включения?Мож кто ткнёт?А то я еще никогда с ОУ не работал :( Пришло время начинать.

Добавлено: Пт янв 02, 2009 18:45:27
Pooher
Я делал приблизительно так(давно это было...)
Таким образом можно отследить отклонение сопротивления.
Чтобы сравнить напряжения, надо подать их на входы.
А вообще лучше погугли, или зайди с этим вопросом в раздел аналоговой техники, я чот уже и подзабывать начал что там почём :))