как считать импульсы
- Войдите на сайт для отправки комментариев
Пт, 01/04/2016 - 08:52
как считать импульсы ,хочу определить на какое время открывается и закрывается инжекторная форсунка на автомобиле
как считать импульсы ,хочу определить на какое время открывается и закрывается инжекторная форсунка на автомобиле
http://arduino.ru/Reference/PulseIn оно ?
счетчик импульсов как можно написать
как считать импульсы ,хочу определить на какое время открывается и закрывается инжекторная форсунка на автомобиле
класс титановый велосипед StopWatch.
Этот длительность импульса считает, и почему-то везде пишут типа не использовать (т.к. пока оно выполняется все остальное замирает)...
attachInterrupt?
как рабоать с attachInterrupt что то не понял справочнике
Считать импульсы и не завешивать МК для иных задач можно несколькими способами:
1. Счетным входом любого счетчика, который выведен у Ардуин (не у всех и не все присутствуют). Заводите счетный сигнал на вход счетчика и по сигналам от 0 таймера (каждые 1024мксек) можете смотреть сколько насчитал счетчик. Это если импульсы относительно короткие: к примеру 10мксек даст погрешность в 10/1024 или около 1%; 100мксек уже около 10% или увеличивать время подсчета. Этим методом у меня (библиотека arhat.h есть github и тут тема) считается частота от датчика цвета TCS3200 ещё и с автоподстройкой времени счета для сохранения приемлемой точности (файлик tcs3200.h для Мега2560, 5-й таймер). Если на прерывание по переполнению 0 таймера, к типовому обработчику добавить callback функцию, то она будет вызываться каждые 1024мксек и читать данные со счетчика без ошибок во времени. Такой хук есть в этой же библиотеке.
2. Подсчет количества прерываний на каком-нибудь входе за время заданное тем же 0 таймером (к примеру). Например, можно завести сигнал на PCINT и считать его, как это сделано у меня для подсчета импульсов от энкодеров (pcint.h, tsc.h). Ограничения теже самые.
3. Можно считать не количество импульсов а их период (длительность) и пересчитывать в количество за заданное время. Это для относительно длинных и регулярных импульсов. В этом случае, удобно использовать прерывания PCINT, поскольку они срабатывают и по фронту и по спаду сигнала. Остается только измерить время между этими событиями. Так у меня считается дальность от ультразвукового датчика HCSR04 (hcsr04.h). В той же библиотеке есть пример "как" (TSC_PulseIn.ino).
4. Можно считать длительность импульса через сигнал захвата таймера ICP, но этот способ также требует "слегка поизвращаться" с анализом фронта и спада - требуется перепрограммирование таймера "на лету" и вычисление разности показаний, что уже не так удобно.
Да никак с ним не надо работать. Есть ISR(). Курите interrupt.h из файлов компилятора avr-gcc. Там всё просто.
attachInterrup() это больше эмуляция, чем обработка прерываний, насколько помню.
спасибо за отклик можешь по подробнее рассказать про ISP
А что там подробнее? Это макрос, который создает обработчик прерывания и сажает его на заднный вектор. Вот собственно и всё.
Например, обработчик переполнения нулевого таймера - тот который собственно и "считает время", которое вы получаете через millis() или delay():
Как конкретно называется то или иное прерывание - смотреть interrupt.h. Название вектора однозначно определяет его точку входа и какие прерывания он обрабатывает. Соответствующее прерывание должно быть разрешено в setup(). Как - смотрите описание той части МК, прерывания которых вы хотите обрабатывать. У Ардуино Мега2560 их аж 56 штук.
По таймерам есть вектора: по переполнению таймера, по срабатыванию каналов ШИМ (A,B или C), по сигналу на ноге захвата ICP. Итого 5 штук для 16-битного таймера, если его нога ICP разведена на плате - это 4 и 5 таймер. 1 и 3 - такой ноги не имеют на плате Arduino Mega, зато они есть на плате Arduino Core2560. Ну и по остальным прерываниям и контроллерам: надо смотреть конкретную модель, что она имеет, а что на ней "забыли" развести.
В целом, без конкретики скзать что-то детальнее .. ну не знаю.
Этот длительность импульса считает, и почему-то везде пишут типа не использовать (т.к. пока оно выполняется все остальное замирает)...
кто что везде пишет и что замирает, пока что выполняется?
я еще изучаю ардуино по этому тяжело мне понять,где можно найти примеры чтобы легче понять
занимаюсь программированием плк овен на языке ST ,как легче разобратся с программированием ардуино
занимаюсь программированием плк овен на языке ST ,как легче разобратся с программированием ардуино
пей пиво Оболонь.