Например TDA7294

Форум РадиоКот • Просмотр темы - Длительность периода в реальном времени
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 17, 2024 00:37:04

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 32 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Длительность периода в реальном времени
СообщениеДобавлено: Пт мар 24, 2017 18:54:22 
Собутыльник Кота
Аватар пользователя

Карма: 28
Рейтинг сообщений: 756
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Сообщений: 2893
Откуда: приходит весна?
Рейтинг сообщения: 0
В одной из задач возникла необходимость измерять длительность временного промежутка между повторяющимися событиями в реальном времени. Для этого планирую использоваться таймер с функцией захвата. Однако возникла следующая проблема: длительность измеряемого временного промежутка может быть больше, чем полный счёт таймера от 0 до 65535. Разумное решение — сделать программное расширение таймеру, но тогда возникает другая проблема: момент фиксации времени события (осуществляемый таймером автоматически) и момент чтения этого времени (аппаратной части и программной) отличаются. Между этими двумя моментами времени может произойти переполнение таймера, в результате программная и аппаратная части временного штампа события окажутся рассинхронизированы.

Наверняка, я не первый кто с этой проблемой сталкивался, подскажите, пожалуйста, какие есть варианты решения. Заранее очень благодарен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Пт мар 24, 2017 19:27:33 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 390
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7010
Откуда: Ижевск
Рейтинг сообщения: 0
Использовать прерывание при переполнении. Количество_прерываний * 65536 + TCNTx.

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Пт мар 24, 2017 19:50:30 
Грызет канифоль

Карма: 9
Рейтинг сообщений: 80
Зарегистрирован: Чт ноя 06, 2014 13:09:06
Сообщений: 251
Рейтинг сообщения: 0
B@R5uk,
Мои рассуждения: Приоритет CAPTURE выше чем OVERFLOW (все AVRы не просматривал, на mege8 так), т.е
1) если влетели в ОVEFLOW, инкрементируем программный счетчик и выходим из обработчика.
2) если влетели в CAPTURE, читаем ICR, читаем Overflow Flag (флаг переполнения). Если флаг переполнения не стоит, то проблем нет. Если флаг переполнения стоит, то возникает неопределенность о которой Вы говорите (если я правильно понял), но она легко решается: если считанный ICR "болшой", то CAPTURE возникло до переполнения, если "маленький", то после переполнения, которое еще не обработано.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Пт мар 24, 2017 22:31:17 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
viiv, что означает "большой" или "маленький" ? Это "сколько в граммах" ? :)
Единственное решение при неатомарных ситуациях - запрет другим потокам модифицировать данные. В данном случае - это останов таймера на время его чтения. Потеряются некоторые такты, но зато вероятность нарваться на неприятности сводится к нулю.
Есть ещё вариант. Поле чтения таймера, прочитать флаг его переполнения. Если он взведён (переполнение было) - сбрасываем его (чтобы не влететь в overflow) и прибавляем к считанному значению 65536.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Пт мар 24, 2017 23:35:14 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 41
Рейтинг сообщений: 1209
Зарегистрирован: Ср фев 23, 2011 12:12:31
Сообщений: 2352
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Насколько нужна точность измерения? А если просто уменьшить частоту таймера? Т.е. те же 65535 будут набираться гораздо дольше, ровно во столько, во сколько будет ниже частота.

_________________
Глупый не задает вопросы. Глупый и так все знает.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Пт мар 24, 2017 23:48:46 
Грызет канифоль

Карма: 9
Рейтинг сообщений: 80
Зарегистрирован: Чт ноя 06, 2014 13:09:06
Сообщений: 251
Рейтинг сообщения: 0
Аlex писал(а):
viiv, что означает "большой" или "маленький" ? Это "сколько в граммах" ? :)

В предельном случае сравнить c 0x8000.

Аlex писал(а):
В данном случае - это останов таймера на время его чтения.

останавливать таймер незачем.

Аlex писал(а):
Есть ещё вариант. Поле чтения таймера, прочитать флаг его переполнения. Если он взведён (переполнение было) - сбрасываем его (чтобы не влететь в overflow) и прибавляем к считанному значению 65536.

Я про это и писал, только просто добавть 65536 нельзя, так как при установленном флаге переполнения, это самое переполнение могло возникнуть как до CAPTURE так и после.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Пт мар 24, 2017 23:51:46 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Немного не допонял проблему в вопросе и поторопился с ответом. Оказывается, используют аппаратный захват.
B@R5uk, у Вас проблема надуманная, которой, на самом деле, не существует. Вы говорите о двух взаимоисключающих вещах.
Если вызвалось прерывание от события по захвату, а до этого не было прерывания по переполнению - значит переполнения вовсе не было, и можно смело читать захваченные данные и счётчик переполнений (он всё равно не обновится, пока мы не дойдём до обработчика переполнения). Если бы до захвата было переполнение таймера, Вы бы сначала влетели в обработку по переполнению, а потом уже по захвату.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Сб мар 25, 2017 00:01:01 
Грызет канифоль

Карма: 9
Рейтинг сообщений: 80
Зарегистрирован: Чт ноя 06, 2014 13:09:06
Сообщений: 251
Рейтинг сообщения: 0
Аlex писал(а):
Если бы до захвата было переполнение таймера, Вы бы сначала влетели в обработку по переполнению, а потом уже по захвату.

ИМХО это не верно. 1) прерывания могут быть запрещены, например, работает дгугой обработчик. Если при запрещенных прерываниях произошло два события (И CAPTURE и ОVRFLOW), то при разрешении прерываний вызовется обработчик с бОльшим приоритетом(CAPTURE), не зависимо от того, какое событие было раньше.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Сб мар 25, 2017 00:06:49 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Если бы у бабки был ... А если упадёт метеорит на МК, то он вообще не сможет ничего обрабатывать :)
Если знаем о такой проблеме, то нужно как то не допускать её возникновения, т.б. - стараться не запрещать в программе прерывания.

ЗЫ: Сравнение с 0x8000 - неудачное решение. Вы предлагаете все значения до 0x8000 считать переполнением таймера ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Сб мар 25, 2017 01:04:07 
Грызет канифоль

Карма: 9
Рейтинг сообщений: 80
Зарегистрирован: Чт ноя 06, 2014 13:09:06
Сообщений: 251
Рейтинг сообщения: 0
Аlex писал(а):
Если знаем о такой проблеме, то нужно как то не допускать её возникновения, т.б. - стараться не запрещать в программе прерывания.


Мы же не знаем, что у ТС за задача. Может у него еще что-то работает. Что без прерываний с UART-ом и с другой переферией работать?
Да и в AVR не все команды выполняются за 1 такт, есть и 2-х тактовые и трехтактовый, и четырехтактовые. выполнение команды - атомарное, т.е. не может "разорваться" вызовом прерывания.
Так что в пределе эти два события (CAPTURE и OVF) могут возникнуть и во премя выполнения одной ассемблерной команды.

Аlex писал(а):
ЗЫ: Сравнение с 0x8000 - неудачное решение. Вы предлагаете все значения до 0x8000 считать переполнением таймера ?

Да, при установленном бите переполнения таймера и считанном ICR<0x8000 считать, что событие CAPTURE произошло после переполнения таймера, которое еще не обработано.
О порогах можно подумать, может я чего не учел. Но разделить диапазон пополам пока сажется не таким уж плохим решением.

==============
ЗЫ. Уважаемый, Аlex, похоже топик-стартеру данный вопрос не очень-то интересен, так как никакой реакции от него нету. Идея озвучена, информации для размышления ТС есть. Бабушку с метеоритами обсуждать нет никакого желания.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Сб мар 25, 2017 09:35:24 
Собутыльник Кота
Аватар пользователя

Карма: 28
Рейтинг сообщений: 756
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Сообщений: 2893
Откуда: приходит весна?
Рейтинг сообщения: 0
pyzhman писал(а):
Использовать прерывание при переполнении. Количество_прерываний * 65536 + TCNTx.
Ну, это и называется программное расширение таймера. Со всеми вытекающими проблемами.
AndTer писал(а):
Насколько нужна точность измерения? А если просто уменьшить частоту таймера?
Думал про это. К сожалению, точность фиксирована, а период при любой частоте гарантированно может оказаться длиннее цикла таймера.
Аlex писал(а):
Единственное решение при неатомарных ситуациях - запрет другим потокам модифицировать данные. В данном случае - это останов таймера на время его чтения.
Весьма громкое утверждение. Хотя я тоже думал про остановку. Во-первых, по событию захвата таймер не останавливается, а именно в этот момент происходит чтение аппаратной части временного штампа (младших двух байт). К моменту обработки прерывания (или просто в цикле после проверки соответствующего флага), когда будет осуществляться чтение программной части временного штампа и появится возможность остановки таймера, уже может появиться рассинхрон. Во-вторых, ARV так устроена, что выключение таймера не выключает предделитель, который продолжает считать. В-третьих, отключение таймера приведёт к нарушению самого главного требования задачи — регистрации временных штампов событий в реальном времени.

Остальное почитал, требует осмысления. Я так понял единственная возможность решения проблемы — это положиться на приоритет прерываний?

viiv писал(а):
Может у него еще что-то работает. Что без прерываний с UART-ом и с другой периферией работать?
Работа с USART есть. Вывод в цикле, а ввод придётся делать через прерывания. Цикл слишком длинный, чтобы закончить его обсчёт за время приёма двух байт подряд.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Сб мар 25, 2017 11:04:23 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Два прерывания - захват и переполнение.

В обработчике переполнении счетчик переполнений инкрементируется .

В захвате:
1. Сброс счетчика.
2. Если захваченный счет небольшой (например если не установлен старший бит захваченных данных), то проверяется флаг переполнения. Если флаг переполнения установлен, инкрементируется счетчик переполнений.
3. Вычиляете фактическое значение периода (если почему то затрытный расчет, то считается в основной программе).
4. Сброс флаг переполнения и счетчика переполнений.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Сб мар 25, 2017 23:33:11 
Собутыльник Кота
Аватар пользователя

Карма: 28
Рейтинг сообщений: 756
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Сообщений: 2893
Откуда: приходит весна?
Рейтинг сообщения: 0
Z_h_e, сбрасывать счётчик не годится, задержки между появлением события и его обработкой, в которой вы предлагаете проводить сброс, приведут к неконтролируемым добавкам (или вычитаниям) для временных штампов событий. То есть весь смысл слов "в реальном времени" потеряется.

Суммируя то, что обсуждали Аlex и viiv. Возможны следующие варианты развития событий.
Вариант А
1) Событие захвата;
2) Обработка события захвата;
3) Событие переполнения;
4) Обработка события переполнения.
В этом случае результат получается правильный.

Вариант Б
1) Событие переполнения;
2) Обработка события переполнения;
3) Событие захвата;
4) Обработка события захвата.
В этом случае результат получается тоже правильный.

Вариант В
1) Событие захвата;
2) Событие переполнения;
3) Обработка события захвата;
4) Обработка события переполнения.
Произошло некоторое наложение, но результат получается правильный.

Вариант Г
1) Событие захвата;
2) Событие переполнения;
3) Обработка события переполнения;
4) Обработка события захвата.
Из-за накладки результат получается неправильный. Программная часть временного штампа на единицу больше, чем надо.

Вариант Д
1) Событие переполнения;
2) Событие захвата;
3) Обработка события захвата;
4) Обработка события переполнения.
Как и в прошлом варианте результат получается неправильный. Но программная часть временного штампа на единицу меньше, чем надо.

Вариант Е
1) Событие переполнения;
2) Событие захвата;
3) Обработка события переполнения;
4) Обработка события захвата
Несмотря на накладку результат получается правильный.

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

Жаль, конечно, что проблема не имеет готового решения. Но надеюсь, что правильное решение планомерным подходом получится таки найти. Заранее спасибо всем участвующим за помощь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вс мар 26, 2017 06:58:33 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
B@R5uk писал(а):
сбрасывать счётчик не годится,
Значит не сбрасывайте, но флаг переполнения в обработчике захвата все равно надо также проверять. Предложенный мной алгоритм должен работать.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вс мар 26, 2017 07:10:06 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
B@R5uk писал(а):
Вариант Г
1) Событие захвата;
2) Событие переполнения;
3) Обработка события переполнения;
4) Обработка события захвата.
Из-за накладки результат получается неправильный. Программная часть временного штампа на единицу больше, чем надо.
Этот вариант исключён.
Если событие захвата произойдёт раньше события переполнения, то программа по-любому сначала обработает захват, а потом уже переполнение.

А вот вариант Д:
B@R5uk писал(а):
1) Событие переполнения;
2) Событие захвата;3) Обработка события захвата;
4) Обработка события переполнения.
Как и в прошлом варианте результат получается неправильный. Но программная часть временного штампа на единицу меньше, чем надо.
вполне возможен. И ничего с этим не поделаешь.

Берите другой проц, у которого есть, как минимум, 2 приоритета. Тогда, повесив переполнение на старший приоритет, Вы исключите ошибку.

Добавлено after 6 minutes 3 seconds:
Z_h_e писал(а):
но флаг переполнения в обработчике захвата все равно надо также проверять
Нельзя этого делать.
Если событие захвата произойдёт до переполнения, то, проверкой на переполнение в событии захвата, вы прибавите лишние 65536 попугаев.
Это тоже самое, что предложил viiv - проверять на 0x8000. Но то предложение, конечно же, ещё глупее...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вс мар 26, 2017 07:18:03 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 3
Медали: 1
Получил миской по аватаре (1)
Аlex писал(а):
Нельзя этого делать.
Если событие захвата произойдёт до переполнения, то...
Можно и нужно. Обратите внимание на важную составляющую алгоритма - проверка флага, если захваченные данные меньше половины максимума счетчика.

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

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вс мар 26, 2017 07:58:50 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А, дак речь идёт о проверке уже захваченного значения. А я всё думаю, причём тут значение счётчика :)
Тогда да, какая то доля правды в этом есть... :roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вс мар 26, 2017 08:01:06 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Аlex писал(а):
Тогда да, какая то дол правды в этом есть... :roll:
А по мне - алгоритм полностью рабочий и решает задачу ТС. По крайней мере я не вижу адекватной ситуации, при которой он работать не будет.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вс мар 26, 2017 08:06:26 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Да, похоже, действительно, рабочий.

ЗЫ: Всем плюсики в карму, за хорошее решение :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Пн мар 27, 2017 07:52:42 
Друг Кота

Карма: 64
Рейтинг сообщений: 966
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4220
Откуда: Ижевск
Рейтинг сообщения: 3
B@R5uk писал(а):
...Наверняка, я не первый кто с этой проблемой сталкивался, подскажите, пожалуйста, какие есть варианты решения.
Как вариант - вырезка из старого проекта решавшего аналогичную задачу. Если ешё актуально.
Вложение:
TEST_CAPT_OVER.asm


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y