реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> использование Timer A
CSB
сообщение Nov 1 2006, 08:55
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088



Требуется измерять интервалы времени от десятков мс до нескольких секунд и выдерживать одинаковые временные интервалы в том же диапазоне. Измеряемые интервалы могут сильно отличаться от генерируемых интервалов. Вопрос: можно ли эту задачу реализовать на одном таймере А? По всему выходит, что нет, но вдруг есть какая-то фича, которую пропустил.
Go to the top of the page
 
+Quote Post
chopik
сообщение Nov 1 2006, 10:02
Сообщение #2





Группа: Новичок
Сообщений: 7
Регистрация: 14-09-06
Пользователь №: 20 384



Не совсем внятно обяснена проблема.Может опишете поподробнее.Для чего выдерживать одинаковые временные интервалы в том же диапазоне?Какая погрешность допустима при измерениях?Сколько источников измеряемых интервалов(хотя это наверное не так уж принципиально)?В общем неплохо было бы развернуть проблему, ибо пока трудностей в описанной задаче не видно.
Go to the top of the page
 
+Quote Post
CSB
сообщение Nov 1 2006, 10:34
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088



Выдержка интервалов нужна для алгоритма, не для ШИМа. Источник сигнала - один.

Трудность заключается в том, что для есть только один таймер, который нужно использовать для измерения и выдержки, т.е. если нормально использовать схему захвата - учитывать количество переполнений и текущее значение счетного регистра, после использования TAR его следует обнулить. Как при таком режиме выдерживать временые интервалы? Ведь может потребоваться несколько переполнений счетчика, а TAR обнулен.
С другой стороны можно использовать непрерывный режим работы таймера и с выдержкой интервалов будет все отлично, но как тогда лучше оргнизовать захват? Ведь обнуления TAR не будет и точка отсчета сместится.
Go to the top of the page
 
+Quote Post
shasik
сообщение Nov 1 2006, 22:57
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188



Цитата(CSB @ Nov 1 2006, 12:34) *
Выдержка интервалов нужна для алгоритма, не для ШИМа. Источник сигнала - один.

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

Как то все смутно и непонятно...

Если мы говорим об одном и том же, то можно сделать так. Таймер работает в непрерывном режиме. Для каждой сехмы захвата/сравнения вводим дополнительную переменную счетчик срабатываний выбранной схемы.
a) Допустим нужно выждать дико большое время T1, а период тамера T2.
Устанавливаем схему сравнения на значение TAR + T1 - [T1/T2]*T2, где [x] - целая часть. Значение счетчика N=T1/T2+1. Включаем соответсвующее прерывание и делаем каждый раз N--. Когда N==0 - прошло нужное время и можно отключить прерывание.
Пример: T1 = 95 попугаев, T2=15 попугаев ==> N=7. В первый раз прерывание щелкает через 95-[95/15]*15=5 попугаев. Затем оно будет срабатываит еще 7-1=6 раз через каждые 15 секунд. В итоге 5 + 6*15 = 95. Вопрос: а что будет если T1<T2, тогда N=1 и прерывание будет вызвано один раз через T1 попугай, после чего N-- дает 0 и все - время вышло. Надеюсь понятно.
б) Нужно посчитать время от текущего момента до некоторого события. Запоминаем текущее значение TAR, т.е TAR_0 = TAR. Сбрасываем соответствующий счетчик M в ноль. При каждом переполнении таймера (TAIF) делаем M++ и ждем событие. И тут оно случилось. Время которое прошло - M*0xFFFF + TAR-TAR_0 (или 0xFFFF-TAR_0 + (M-1)*0xFFFF + TAR - если не понятно). Только нужно пересчитать все эти 0xFFFF в попугаев (т.е. определиться с частотой тактирования и единицами измерения)

Для большей наглядности нарисуй несколько периодов пилы и потренируйся.

Количество устройств задержки на время T1 определяется количеством схем сравнения/захвата ( TimerA/TimerB). А количество измерений времени от ... до .... - количеством ОЗУ и точностью измерения. Когда много счетчиков - долго обрабатывать ==> задержки (можно их учесть).

Возможные проблемы - при вычислении [T1/T2]*T2 и M*0xFFFF возможно переполнение если использовать простой int, а не длинный int.

Если все написанное выше неправильно, то или я или ты не поняли, что нужно сделать
Go to the top of the page
 
+Quote Post
CSB
сообщение Nov 2 2006, 16:26
Сообщение #5


Частый гость
**

Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088



Фухххх, наконец-то добрался до машины smile.gif

Списибо за ответ!

Вчера сам тоже самое считал и ничего не получалось sad.gif

Сейчас пересмотрел свои записи и не смог найти на чем вчера спотыкался! Точно помню что мне чего-то не нравилось когда считал время между импульсами (у тебя это пункт (б)).
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 05:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016