Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/23: Рейтинг темы: голосов - 23, средняя оценка - 4.52
sopoumov
1

Управление таймером (или что-то другое)

30.08.2010, 20:14. Показов 4520. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день !
Рассмотрите , пожалуйста, вопрос от абсолютного новичка.
Попытаюсь максимально кратко и понятно описать задачу. С МК только начинаю разбираться, пишу на СИ.
Итак.
Есть AtMiko16 , один светодиод и одна кнопка (если совсем упрощенно).
Светодиодом надо мигать с частотой, задаваемой кнопкой. Т.е. нажимаем кнопку несколько раз (стараемся нажимать с максимально ровным интервалом, к примеру, 1 сек.), МК ловит нажатия кнопки, считает среднее время задержки между нажатиями и мигает светодиодом с заданным интервалом.
Подскажите правильное направление движения мысли для решения этой задачи ?

P.S. C таймерами худо-бедно работать умею :)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2010, 20:14
Ответы с готовыми решениями:

Сохранение настроек приложения (В реестр или xml или что то другое?)
Вообщем нужно где то хранить настройки приложения. СРАЗУ ГОВОРЮ! В My.Settings на .net framework...

Защитник Windows или Avast AntiVirus Free или что то другое
Добрый день !) У меня стоит Windows 10 и стоит встроенный антивирус "Защитник Windows" так вот...

Не могу понять поломалась ли видеокарта или БП, или что-то другое. Дадите совет?
Запустил игру и во время нее комп завис. Перегрузил, загрузился, но уже выключился во меню игры....

Что использовать двумерный массив, Arraylist или что то другое?
Подскажите пожалуйста (я новичок), мне нужно считать данные с файла и занести их во что то, чтобы...

6
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 1,181
30.08.2010, 20:27 2
Цитата Сообщение от sopoumov
Добрый день !
Рассмотрите , пожалуйста, вопрос от абсолютного новичка.
Попытаюсь максимально кратко и понятно описать задачу. С МК только начинаю разбираться, пишу на СИ.
Итак.
Есть AtMiko16 , один светодиод и одна кнопка (если совсем упрощенно).
Светодиодом надо мигать с частотой, задаваемой кнопкой. Т.е. нажимаем кнопку несколько раз (стараемся нажимать с максимально ровным интервалом, к примеру, 1 сек.), МК ловит нажатия кнопки, считает среднее время задержки между нажатиями и мигает светодиодом с заданным интервалом.
Подскажите правильное направление движения мысли для решения этой задачи ?

P.S. C таймерами худо-бедно работать умею :)
Создаем глобальную переменную (счетчик) которая будет хранить продолжительность последнего нажатия кнопки (в попугаях).
В процедуре обработки прерывания обнуляем счетчик и гоним цикл пока кнопка не будет отпущена прибавляя по единичке к счетчику.
В самой программе ставим цикл FOR на размер счетчика, сам цикл набиваем nopами чтобы подогнать продолжительность одного исполнения под продолжительность попугая, на выходе из цикла меняем состояние ноги светодиода и идем в начало.
0
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
30.08.2010, 21:28 3
я бы предложил так:

засекать период нажатия кнопки (измеряемый в попугаях), и затем использовать экспоненциальный фильтр для усреднения. можно еще медианный, но тогда кол-во требующихся нажатий будет постоянное.

в первом случае будет одна переменная - темп, в фильтре используется она же и новое время. во втором - буфер с последними N временами и функция расчета среднего. сами фильтры описаны в википедии (наверняка).

главное - не забыть учесть, что при нажатиях может быть (и будет!) дребезг. кнопку опрашивать хотя бы раз в 20-40мс.
0
sopoumov
30.08.2010, 23:20 4
Цитата Сообщение от Bottyk
Создаем глобальную переменную (счетчик) которая будет хранить продолжительность последнего нажатия кнопки (в попугаях).
В процедуре обработки прерывания обнуляем счетчик и гоним цикл пока кнопка не будет отпущена прибавляя по единичке к счетчику.
В самой программе ставим цикл FOR на размер счетчика, сам цикл набиваем nopами чтобы подогнать продолжительность одного исполнения под продолжительность попугая, на выходе из цикла меняем состояние ноги светодиода и идем в начало.
Спасибо за отклик.
Хотел бы уточнить (прошу прощения, что сразу этого не сделал).
Нужно замерять не продолжительность нажатия кнопки , а именно интервал между нажатиями.
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
30.08.2010, 23:32 5
а я бы предложил такой алгоритм.

1. настроить таймер на 1мс. в программе таймера сделать мигание светодиодом (переменные: счетчик тика для светодиода и макс. значение тика для светодиода (период)) и просто счетчик тиков, общий.

2. в главном цикле опрашивать кнопку. как кнопка нажата, сбросить общий счетчик тиков, выждать минимальную паузу для антидребезга и вообще, ждать отпускания кнопки. как отпустили - берем общее кол-во тиков (которое насчиталось) и либо так используем, либо с прим. фильтра.

усё. не забыть про атомарность и volatile.
10 минут работы.

да поможет вам протеус!
0
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
30.08.2010, 23:38 6
как отпустили - берем общее кол-во тиков
Чел хотел паузы между нажатиями. Считать тики надо до следующего нажатия, а потом брать их
0
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
30.08.2010, 23:55 7
да, скосячил. ну тогда чуток переделать, совсем чуток. надеюсь, сам догадается как:)
0
30.08.2010, 23:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.08.2010, 23:55
Помогаю со студенческими работами здесь

Что это SMS HTTP API или что-то другое?
Доброго дня! Получил с сайта mlsit.ru готовую програмку для отправки смс с сайта. Который день...

Что значит r31 или r25? И почему нельзя написать r01 или r(любое другое число)?
Доброе время суток. Пытаюсь освоить Ассемблер. У меня есть часть кода. Он начинается так: ...

Или использовать интерфейс или что то другое
Есть новый класс "WebElementEx2" который унаследовать от интерфейса "IWebElement". public...

Visual C++ или Builder или что-то другое?
Всем привет! Хочу реализовать небольшой проект - бродилка/стрелялка с видом сверху (чуть под...

Ребят, посмотрите , что фигня, как думаете это видеочип накрылся или что-то другое?
Ребят, помогите определить, что фигня, как думаете это видеочип накрылся или что-то другое? Может...

Никак не могу определится какую видяху брать, palit GTX 770 jetstream или что-то другое, что вы посоветуете?
конфиг компа i5 4670 8gb 1600 asus h87-plus 1.5Tb 5400 + через месяц докуплю ssd на 60 гиг ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru