Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
17.10.2008, 11:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,831
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Алгоритм подсчета импульсов.
Доброго времени.Подскажите лучший алгоритм подсчета импульсов.
Задача такая-на два входа МК приходят имульсы частотой от 0,1гц до 1кгц,один вход считает в плюс,другой в минус,результат выводитс на АЛС динамически.
Задумка такая - постоянно проверяя состояние портов
делать прерывание по таймеру и ,например 100 раз в секунду выводить значение на индикацию.Но встает вопрос не будет ли пропуск импульсов во время обработки прерывания.
Другой вариант наоборот делать прерывания по появлению на входах импульсов и считать их,а в основном цикле вывод,но тогда возможна ситуация при длинной посылке индикаторы будут мигать.
Как оптимально и обрабатывать входные импульсы и выводить результат?
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
17.10.2008, 12:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
ну и какие проблемы ? один вход - по прерыванию, второй - счетный вход таймера... Решительно не вижу повода огорчаться.
|
|
|
|
17.10.2008, 13:06
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,831
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
urry ,а можно подробнее,я в МК ещё только начинаю разбираться.
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
17.10.2008, 14:28
|
|
Вид на жительство
Регистрация: 13.05.2005
Сообщений: 386
Сказал спасибо: 9
Сказали Спасибо 44 раз(а) в 37 сообщении(ях)
|
делаешь два прерывания по нужным тебе перепадам на ножках INT0,1,2. а обработчик прерывания делаешь по возможности коротким, тупо увеличивать или уменьшать один глобальный счетчик. Тактовую частоту заведи большую, чтобы все успевать. В самой плохой ситуации длительность обработки прерывания должна быть не больше 0.5милисекунды, при мах входной частоте 1кГц.
при тактовой 1МГц, 0.5мс - это пятьсот тактов, ды там еще музыку успеешь проиграть...
вопрос перехода через нуль/максимум?
А вывод на экран делаешь в основной программе.
|
|
|
|
17.10.2008, 14:56
|
|
Прописка
Регистрация: 16.03.2005
Сообщений: 244
Сказал спасибо: 78
Сказали Спасибо 85 раз(а) в 55 сообщении(ях)
|
Ширина импульсов какая будет? Дребезг есть?
|
|
|
|
17.10.2008, 16:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,831
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Изначально идет Sin Cos,затем на триггерах обрезается по ширине 1/3 примерно,дребезга нет,счет от -999999 до 999999 при переполнении сброс на нуль.
Это индикация такая источник импульсов инкрементальный датчик.
А может триггера не использовать сразу Sin Cos завести в МК ? кто первым пришел тот и считать
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
18.10.2008, 12:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: Алгоритм подсчета импульсов.
Сообщение от E_C_C
|
Задача такая-на два входа МК приходят имульсы частотой от 0,1гц до 1кгц,один вход считает в плюс,другой в минус,результат выводитс на АЛС динамически.
|
ИМХО одного прерывания таймера хватит, с периодом 0,1-0,2 милисек.
За один проход прерывания:
1) Опрашиваеш входы и сравнивая с предыдущим содержимым
входов, и считаеш счётчик повторений(подавлени едребезга, окончен счётчик - сработал вход.)
Считаеш счётчик импульсов.
2) выводиш один разряд АЛС.
|
|
|
|
20.10.2008, 12:20
|
|
Прописка
Регистрация: 16.03.2005
Сообщений: 244
Сказал спасибо: 78
Сказали Спасибо 85 раз(а) в 55 сообщении(ях)
|
Рicavr, ес, истину глаголите. Собственно я к этому и спрашивал.
ТО Oll, использовать прерывания по входу конечно можно но в данном случае излишне т.к. есть динамическая индикация- событие, происходящее через заданый промежуток времени.
|
|
|
|
20.10.2008, 15:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,831
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Спасибо ответившим , буду пробовать.
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
22.10.2008, 19:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Сообщение от mike7815
|
Рicavr, ес, истину глаголите. Собственно я к этому и спрашивал.
ТО Oll, использовать прерывания по входу конечно можно но в данном случае излишне т.к. есть динамическая индикация- событие, происходящее через заданый промежуток времени.
|
Стараюсь не пользоваться прерываниями по ногам, если нет нужды ловить МОМЕНТ прихода импульса.
ИМХО меньше мороки с отлавливанием и обработкой помех.
Обычно всё работает по прерываниям таймера, даже УАРТЫ, I2C и остальная хрень, где не нужно СИНХРОНИЗИРОВАТЬ с внешним воздействием.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:39.
|
|