Свежие обсуждения
Микроконтроллеры

Ликбез по программированию PIC

1 63 99

picmaniac: В принципе при 4 входах все флаги можно в один регистр запихать. Только нужно ли?

А не всё равно? Это я объяснял как отделить случай прихода первого импульса, когда предыдущее значение таймера неопределено.

 

Да я в курсе. Так, просто подметил.

 

AHTOXA, хочу прокомментировать ваше сообщение от сегодня, 20:08.
Ну во-первых, вы просто предлагаете как бы увеличить на 1 разряд наш таймер. Но этот прием скорее можно отнести к повышению точности измерения. Мы пока этот момент не затрагивали.
Во вторых, вы пишете таймер снова досчитал до 255 импульса нет, прерывание от таймера, увеличиваем ROLLOVER (стало 3) - а это уже тайм-аут! Вот тут то и начинает "рыться собака". Ваш тайм-аут держится не постоянно. Он то появляется, то исчезает! Как раз об этом эффекте я писал ранее. А позже наметил пути преодоления. См. Zandy: сегодня, 17:09.

Со стартовыми флагами конечно все понятно.

picmaniac: Похоже на правду? На правду похоже, но вы рассмотрели частный случай - полное пропадание сигнала. Тут-то как раз проблем нет. Все-таки прошу высказаться насчет: Zandy: сегодня, 17:09. Вроде бы я изложенным устраняю проблемы, связанные с результатом интерференции частот прерывания по таймеру и входного сигнала. А может нет?

 

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

Можно и не на один Всё зависит от максимальной допустимой длительности импульса. Это как бы два в одном - можно измерять импульсы длиннее периода счёта таймера, и засекать тайм-аут.

Zandy:

Во вторых, вы пишете таймер снова досчитал до 255 импульса нет, прерывание от таймера, увеличиваем ROLLOVER (стало 3) - а это уже тайм-аут! Вот тут то и начинает "рыться собака". Ваш тайм-аут держится не постоянно. Он то появляется, то исчезает! Как раз об этом эффекте я писал ранее.

Как это "то появляется, то исчезает"? Никуда он не исчезает! Он просто может опоздать немножко Максимально - на период счёта таймера. ИМХО, это не критично. Вас, как я понял, волнует случай, когда уже пора бы наступить тайм-ауту, таймерное прерывание ещё не произошло, и тут приходит импульс? Так здесь тоже всё просто: вычисляем длительность этого импульса, и видим, что она за пределом, длиннее тайм-аута. А это значит - тай-маут!

Или я опять не понял?

 

AHTOXA, что-то как-то мы в "разных плоскостях" мыслим. Я о своем, а вы тоже о своем. Мне, как начинающему сложно до мелочей усечь ход ваших мыслей. Может быть по сути это одно и тоже, только подходы и реализация разные?
Просто было бы любопытно узнать мнение, о том, что я писал выше (вроде бы достаточно подробно) с указанием конкретных ошибок, если они есть.

 

Zandy: Просто было бы любопытно узнать мнение, о том, что я писал выше (вроде бы достаточно подробно) с указанием конкретных ошибок, если они есть.

Я честно пытался вникнуть Ну давайте ещё раз.

Zandy: Посмотрите внимательно на мой маленький рисуночек, что был выше. Допустим То - период переполнения нашего тактового таймера (период прерываний - красный цвет). Тх - период измеряемого сигнала. Если Tx<To, то все в порядке, измерения штатные.

<b>Согласен.

Zandy: Если nТо < Тх < 1.5nТо, где n - любое целое 1,2,3... при вычислении периода путем нахождения разности между текущим и предыдущим значениями нашего таймера, результат всегда будет меньше, чем То/2.

Вот здесь уже засада. Мы не можем делать предположений о соотношении To и Tx! Мы должны обрабатывать все случаи. И все скважности.

И зачем "браковать" какие-то замеры, когда можно достаточно просто измерить практически любой импульс, в диапазоне от 0(виртуально конечно) до тайм-аута?

Вот, я даже картинку нарисовал:

Видите, нас не волнует, как соотносятся периоды таймера и сигнала. Мы их просто измеряем.
Кстати, если запустить таймер побыстрее, то получим 2 преимущества:
- увеличение точности;
- уменьшение ошибки при детектировании тайм-аута.

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

 

Давайте так. Не будем усложнять задачу. Условие такое. Если период входного сигнала меньше периода прерываний по таймеру, мы должны измерять сигнал и мы это будем делать с помощью арифметики. Если период входного сигнала превысил период прерывания по таймеру, нам ничего измерять не надо, нам надо просто констатировать, что сигнал вышел из диапазона измерений. Смотрим прилагаемый рисунок.
Пользуясь вашей терминологией (ROLLOVER), кружочками обозначено, когда мы "засекаем", что длительность вышла за измеряемые пределы. Другими словами мы засекли тайм-аут. Хорошо, предприняли необходимые действия (погасили светодиод). А дальше что? Жизнь на этом не кончается. А дальше, при анализе следующего прерывания, тайм-аута нет! Работаем штатно (зажигаем светодиод). Смотрим дальше. В следующем прерывания опять тайм-аута нет. И только на 5-ом прерывании мы опять засекаем тайм-аут, опять гасим светодиод. Поведение светодиода нештатно!
При любой длительности входного сигнала, даже в сотни раз превышающей период прерываний, всегда при анализе прерываний обнаружится такой момент, когда изменение сигнала (или фронт) будет иметь место. И что мы с этим будем делать? Будем организовывать измерение длительности бесконечно большого периода, инкрементируя бесконечно длинный регистр ROLLOVER? Нам же попросту не нужны эти измерения в численном виде.
Вот я про что все время пытаюсь сказать, а не про фиксацию тайм-аута и не про измерение периода сигнала, вышедшего за необходимый измеряемый диапазон! Я и предлагал выше алгоритм для преодоления именно этого явления.

 

Zandy: Вот я про что все время пытаюсь сказать, а не про фиксацию тайм-аута и не про измерение периода сигнала, вышедшего за необходимый измеряемый диапазон! Я и предлагал выше алгоритм для преодоления именно этого явления.

А-а-а!. Понял. Вы предлагаете считать тайм-аутом 2 таймерных прерывания подряд. А одно таймерное прерывание - не считается... Так?
А как тогда с длительностью импульса? Вы "с помощью арифметики" получаете то длительность импульса, то (длительность - 255)?

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

Теперь, когда я (надеюсь) понял Ваш метод, попробуйте понять мой, он проще!

 

AHTOXA: Вы предлагаете считать тайм-аутом 2 таймерных прерывания подряд. А одно таймерное прерывание - не считается... Так?
Да нет, опять не так! Все считается. Я не знаю, как еще написать, разве что переписать все заново. Я не про механизм обнаружения тайм-аута, я про то
Zandy: Другими словами мы засекли тайм-аут. Хорошо, предприняли необходимые действия (погасили светодиод). А дальше что? Жизнь на этом не кончается.

AHTOXA: И ещё, очень во многих случаях (почти всегда) Вы не сможете настроить таймер на такую частоту, из-за ограниченного набора предделителей.
Это вопрос дальнейшего обсуждения, и к тому, о чем мы сейчас говорим, это имеет косвенное отношение. Как это решать, будем думать потом. Может кварц на соответствующую частоту подберем, ну или увеличивать разрядность счета будем, добавив дополнительный регистр, может так, как вы и предлагаете. Дело то не в этом.

AHTOXA: Теперь, когда я (надеюсь) понял Ваш метод, попробуйте понять мой, он проще!
Да я тоже (надеюсь) понял Ваш метод. Но вы же о том, как обнаружить тайм-аут, а не о том, что делать с этим обнаружением дальше. Просто мы о разных вещах говорим.

Что-то picmaniaca давно не слыхать. Способ, предложенный им, с задействованием дополнительного таймера тайм-аута самый простой и понятный. Может плюнуть на все, раз так все выходит, и делать, как он предлагает? А то, уже долго топчемся на одном месте, пора уже кончать с этой задачей?

 

Zandy: Да нет, опять не так! Я не про механизм обнаружения тайм-аута, я про то
Zandy: "Другими словами мы засекли тайм-аут. Хорошо, предприняли необходимые действия (погасили светодиод). А дальше что? Жизнь на этом не кончается."

А здесь-то какие проблемы? Засекли тайм-аут, зажгли лампочку, взвели флажок, что будет первый импульс - и ждём импульса.

Zandy: Способ, предложенный им, с задействованием дополнительного таймера тайм-аута самый простой и понятный. Может плюнуть на все, раз так все выходит, и делать, как он предлагает? А то, уже долго топчемся на одном месте, пора уже кончать с этой задачей?

Так я давно говорю : Чего думать-то, трясти надо! ©
Тут ведь как, главное начать с чего-то, а там - само пойдёт...