Перейти к содержанию

Подсчёт длительности импульсного сигнала


Рекомендуемые сообщения

Приветствую всех!

 

Просьба подсказать алгоритм (я не говорю написать код за меня, а просто ход мыслей) подсчета длительности импульсного сигнала. К примеру имеем сигнал как на картинке, он заходит на ножку INT0 МК AtTiny2313 (для информации длительность импульса 500 миллисекунд, период 1 секунда). При условии что первый импульс (t1) сигнала длиннее на несколько десятков миллисекунд чем остальные (t2). Для меня сложность заключается в том, что если увеличивать значение некой переменной в теле таймера, то когда остановиться?...Ведь сигнал начинается с 0 В и заканчивается 0 В...

5a17ea2f3232f_.thumb.jpg.bcde98018ccaac7371f2688a97ccaca2.jpg

Спасибо заранее!

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Настроить прерывание по возрастанию и по спаду фронта. По каждому из них обнулять соответствующий счетчик и перезапускать таймер. В итоге в случае нарастание-спад будет подсчитана длительность импульс, а в случае спад-нарастание длительность пропуска. Или надо подсчитать именно то время, когда сигнал вообще есть?

Изменено пользователем BARS_
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

10 минут назад, BARS_ сказал:

Или надо подсчитать именно то время, когда сигнал вообще есть?

Да, именно, мне нужно посчитать время пока "скачет" уровень. Дело в том, что мне после этого нужно будет установить другую ножку МК в состояние лог.1 и держать её в течении этого времени, которое я хочу измерить. Вот схематично:

5a17ef433a211_.thumb.jpg.001243b1ac3956cd8352fc1418c79854.jpg

Изменено пользователем -=FISHER=-

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Тогда поставить ограничение по максимальной длительности. Т.е. если сигнал в нуле и не меняется в течении определенного времени, значит он закончился и длительностью является то, что насчитали на последнем перепаде уровней. А на каждом перепаде прибавлять значение счетчика к общему времени и обнулять счетчик.

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, -=FISHER=- сказал:

Да, именно, мне нужно посчитать время пока "скачет" уровень.

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

но 

есть поблема определить что переключения закончились, для этого надо еще считать Тайм-Аут времени когда нет переключений, после превышения этого времени можно использовать сохраненное значение.

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, BARS_ сказал:

Т.е. если сигнал в нуле и не меняется в течении определенного времени, значит он закончился 

 

1 минуту назад, ruhi сказал:

для этого надо еще считать Тайм-Аут времени когда нет переключений, после превышения этого времени можно использовать сохраненное значение.

А этот самый тайм-аут можно посчитать как время между спадом фронта и следующим его нарастанием и чтобы долго не думать умножить на два. Верно?

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Только что, BARS_ сказал:

Можно и так, а можно задаться им исходя из характеристик измеряемого сигнала.

Благодарю!

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, -=FISHER=- сказал:

 

А этот самый тайм-аут можно посчитать как время между спадом фронта и следующим его нарастанием и чтобы долго не думать умножить на два. Верно?

А можно и на 1.5 и на 3 зависит от условий вашей конкретной задачи, в любом случае, это всегда проверять приходится на практике, поэтому должна быть возможность в программе как то менять его, пусть даже через перекомпиляцию и перепрошивку, чтобы посмотреть что получается и выбрать подходящий результат.

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, ruhi сказал:

А можно и на 1.5 и на 3 зависит от условий вашей конкретной задачи

Понятно. В моем случае думаю тайм-аут подойдет начиная от двукратного значения времени между импульсами. Спасибо! Пошел сочинять код :-)

23 минуты назад, ruhi сказал:

Настроить прерывание по возрастанию и по спаду фронта.

А здесь Вы наверное имеете ввиду перенастраивать прерывание в самом прерывании, ведь нельзя одновременно настроить его и на спад и на рост? Или имеется ввиду режим вызова прерывания при любом изменении уровня? А тогда интересно не будет ли дикого дребезга или конденсаторы по входу поставить?

Изменено пользователем -=FISHER=-

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, -=FISHER=- сказал:

Понятно. В моем случае думаю тайм-аут подойдет начиная от двукратного значения времени между импульсами. Спасибо! Буду пошел сочинять код :-)

если не хватит разрядности счетчика (младшие разряды:TC - значение) и надо будет считать его переполнения в дополнительной переменной (старшие разряды:VAR - значение), так что результат = (VAR << Shift) | TC

то

появится еще проблема когда эти два значения не синхронизированы:

если ТС считает от 0 до FFFF, когда ТС перейдет через FFFF пройдет некоторое время (T = IncLatency) прежде чем изменится VAR и в течении этого времени значение (VAR << Shift) | TC будет содержать ошибку:

например: 

VAR = 0, ТС от 0 до FFFF - OK,

VAR = 0, ТС от 0 до IncLatency - ОШИБКА, VAR УЖЕ ДОЛЖНО БЫТЬ = 1

VAR = 1, ТС от IncLatency до FFFF - OK,

...

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

47 минут назад, -=FISHER=- сказал:

А здесь Вы наверное имеете ввиду перенастраивать прерывание в самом прерывании, ведь нельзя одновременно настроить его и на спад и на рост? 

не знаю, это зависит от процессора который вы используете, где то можно, где то нельзя!

По поводу дребезга, то что вы собрались мерить и есть время дребезга, - нельзя померить время дребезга если убрать дребезг :) !

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, ruhi сказал:

не знаю, это зависит от процессора который вы используете, где то можно, где то нельзя!

Использую AtTiny 2313, уже попробовал, в режиме прерывания по любому изменению уровня всё отлично работает. Пишу дальше :-) 

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Если длительность входного импульса не слишком большая, то можно было использовать захват таймера/счетчика. Каждый фронт импульса - обнулять счетный регистр. Признаком окончания следования импульсов будет прерывание по переполнению таймера/счетчика. Никаких подсчетов, никаких переменных и сравнений.

Ссылка на комментарий
Поделиться на другие сайты

11 час назад, Геннадий сказал:

Если длительность входного импульса не слишком большая, то можно было использовать захват таймера/счетчика.

Длительность одного импульса ~0.5 сек. Использую AtTiny 2313, там ни у одного таймера нет режима захвата((

Мы все учились по-немногу, чему-нибудь и как-нибудь...

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...