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

 
 
> Измерение временных интервалов, с высокой точностью
AVR
сообщение Jun 2 2006, 17:03
Сообщение #1


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Здравствуйте!
Как можно измерить временные интервалы дительностью несколько секунд на AVRах с точностью до микросекунды? При том что кварц стоит на 1 МГц? Емкости таймера-счетчика 16 бит для такой задачи не хватает...


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Oct 11 2006, 16:25
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(=GM=)
Автор топика намеревался измерять длительность секундных импульсов, а не период. Т.е., есть передний фронт импульса, длительность импульса и задний фронт импульса. Время начала импульса наша программа измерит, а как быть со спадом? Может быть перенастраивать ICES1 при первом входе в прерывание TIM_CAPT или есть более короткий путь?
Ну дык у АВР есть возможность вызывать прерывание по любому изменению состояния входа. Надо только при запуске правильно инициализироваться (учесть текущее состояние), а дальше - понеслась.

Ведро маслят... Это многое объясняет... Как-нить при случае тоже ляпну такое smile.gif


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
=GM=
сообщение Oct 12 2006, 09:31
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(singlskv @ Oct 11 2006, 15:06) *
Цитата(=GM= @ Oct 11 2006, 15:10) *

Ну раз так, вот вам еще экономия. Не используйте регистры r5-r4 в прерывании, храните результат непосредственно в регистрах icr1h-icr1l. Будет сохранно, как в банке ... до следующего захвата.

А как Вы в основной программе планируете узнавать что произошел второй захват ? smile.gif

А вы у GetSmart спросите, он всё знает(:-). Спокойно, GetSmart, шютю я(:-)

Чуть посерьёзнее. Я вам про экономию регистров в прерывании говорю, "которых всегда не хватает", а вы плавно меняете тему. Какая разница, где хранить время текущего захвата, в регистрах r7-r6-r5-r4 или в r7-r6-icr1h-icr1l? Никакой разницы нет. Почти. Зато экономится два регистра!

Ну а по делу, думаю есть несколько подходов.

1) Есть две переменные, скажем, oldTime и newTime (ваши r7-r6-r5-r4). Прерывание захвата должно переписывать содержимое newTime в oldTime, и только затем обновлять newTime. Основная программа в любое удобное для себя время(:-) определяет длительность интервала, просто вычитая содержимое oldTime из newTime.

2) Прерывание захвата чередует признак начала измерения и конца измерения, (можно просто счетчик на регистре, признак-младший бит), а основная программа доделывает остальное.

Цитата(GetSmart @ Oct 11 2006, 15:25) *
Цитата(=GM=)
Автор топика намеревался измерять длительность секундных импульсов, а не период. Т.е., есть передний фронт импульса, длительность импульса и задний фронт импульса. Время начала импульса наша программа измерит, а как быть со спадом? Может быть перенастраивать ICES1 при первом входе в прерывание TIM_CAPT или есть более короткий путь?
Ну дык у АВР есть возможность вызывать прерывание по любому изменению состояния входа. Надо только при запуске правильно инициализироваться (учесть текущее состояние), а дальше - понеслась.

Неправильно. В том то и дело, что не один раз при запуске программы надо инициализироваться, а каждый раз при входе в захват(:-(. Потому что на четных захватах вы ловите переход 0-1 (начало импульса), а на нечетных захватах вы ловите 1-0 (конец импульса). Я и спрашивал, перенастраивать ICES1 каждый раз или есть другой способ, попроще?

Цитата(GetSmart @ Oct 11 2006, 15:25) *
Ведро маслят... Это многое объясняет... Как-нить при случае тоже ляпну такое smile.gif

GetSmart, хорош бурчать, это у вас так что проявляется(:-)? Не злитесь, ляпните что-нибудь или тяпните, разрядка придёт, поверьте(:-). Добавлю специально для вас. Напротив моих окон стоит бангало, под ним живет более 20 диких кроликов, смешные такие...А недавно видел как ворона ссорилась с белкой, наскакивали друг на друга, прям как вы на меня(:-).

GetSmart, жена маслята уже посолила, вот. Белые тут тоже водятся, но ехать далеко, в Нью Форист, неохота...


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 15 2006, 02:25
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(=GM= @ Oct 12 2006, 12:31) *
А недавно видел как ворона ссорилась с белкой, наскакивали друг на друга, прям как вы на меня(:-).

Дык, эта, если смотреть со стороны, здесь все замечания вам по делу были сказаны, а вы все в шутку да в обидку воспринимаете..
Что ни пост - то перл:

особливо это:
Цитата
Какая разница, где хранить время текущего захвата, в регистрах r7-r6-r5-r4 или в r7-r6-icr1h-icr1l?

Ну уж никак не в аппаратно зависимых регистрах, которые нам абсолютно неподконтрольны.
Вы что, правда не понимаете, что можно не успеть вычитать icr1h-icr1l до того как случится следующий захват? либо например наткнуться на ситуацию когда в момент вычитки L, произойдет следующий захват.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Oct 16 2006, 13:06
Сообщение #5


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(defunct @ Oct 15 2006, 01:25) *
Что ни пост - то перл: особливо это:
Цитата
Какая разница, где хранить время текущего захвата, в регистрах r7-r6-r5-r4 или в r7-r6-icr1h-icr1l?

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

Я и не такие перлы могу выдавать(:-). Но вообще-то, в нашем случае никакой разницы на самом деле нет, посудите сами, как только произошел захват, возникло прерывание, в котором регистры icr1h-icr1l читаются и переписываются в r5-r4, т.е. и icr1h-icr1l, и r5-r4 изменяются практически одновременно (макс разница 32 мс, если есть длинное прерывание). Естественно предполагается, что вы должны успеть обработать r7-r6-r5-r4 до следующего захвата, который может случиться через секунду (по условию задачи). Ну и спрашивается, зачем тратить два регистра МК, если можно с таким же успехом хранить данные в регистрах захвата?

Если же вы не успели, то произойдет новый захват, r5-r4 тоже испортятся, так что тут ничто не поможет, какая разница, что испорчено? Как меру борьбы, в прерывании можно сразу сохранять время захвата в озу, но опять же сохранять можно прямо из регистров захвата, r5-r4 тут не нужны.

Вы-то сами понимаете, что при наличии длинного прерывания наступит крах вашей системы прерываний, если, скажем, возникнет два прерывания захвата в течение 65 мс?

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

Возможно, кому-то достаточно измерять импульсы от 32 мс до секунд и с длинными прерываниями, согласен, тогда забудьте о сказанном выше. Я бы сказал так, что постановка первоначальной задачи была нечеткой, отсюда все недоразумения.

Что ещё? На справедливую критику не обижаюсь, с несправедливой борюсь по мере сил(:-), и посмеяться и пошутить люблю, но по-доброму.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 18 2006, 11:44
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(=GM= @ Oct 16 2006, 16:06) *
Я и не такие перлы могу выдавать(:-). Но вообще-то, в нашем случае никакой разницы на самом деле нет, посудите сами, как только произошел захват, возникло прерывание, в котором регистры icr1h-icr1l читаются и переписываются в r5-r4, т.е. и icr1h-icr1l, и r5-r4 изменяются практически одновременно (макс разница 32 мс, если есть длинное прерывание). Естественно предполагается, что вы должны успеть обработать r7-r6-r5-r4 до следующего захвата, который может случиться через секунду (по условию задачи). Ну и спрашивается, зачем тратить два регистра МК, если можно с таким же успехом хранить данные в регистрах захвата?

Если же вы не успели, то произойдет новый захват, r5-r4 тоже испортятся, так что тут ничто не поможет, какая разница, что испорчено?

Затем, что прерывание может произойти именно в момент вычитки значения, и мы можем прочитать недостоверные данные.

Если же рез-тат будет храниться в r7-r6-r5-r4, то мы можем запретить флаг I при обращении к этой 32х битной переменной, и тем самым обезопасить себя от последствий описанного случая.

Учить матчасть smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AVR   Измерение временных интервалов   Jun 2 2006, 17:03
- - WHALE   C точностью до микросекунды с кварцем на 1Мгц ника...   Jun 2 2006, 17:07
- - GetSmart   А инкрементировать ещё одни (старшие) 16 бит по пе...   Jun 2 2006, 17:10
|- - rezident   Цитата(GetSmart @ Jun 2 2006, 23:10) А ин...   Jun 2 2006, 17:20
|- - AVR   Цитата(GetSmart @ Jun 2 2006, 21:10) А ин...   Jun 2 2006, 17:24
- - GetSmart   ЦитатаC точностью до микросекунды с кварцем на 1Мг...   Jun 2 2006, 17:23
- - GetSmart   Чё-то я ослеп. Речь как раз об AVR. Берёте Мегу8, ...   Jun 2 2006, 17:43
|- - defunct   Цитата(GetSmart @ Jun 2 2006, 20:43) Чё-т...   Jun 2 2006, 19:26
- - GetSmart   ЦитатаНельзя выйти на точность в 1мкс в случае ког...   Jun 2 2006, 19:51
|- - defunct   Цитата(GetSmart @ Jun 2 2006, 22:51) Немн...   Jun 2 2006, 20:32
- - GetSmart   ЦитатаНу представьте захвачен ICR = 0. Что делать?...   Jun 2 2006, 20:54
|- - defunct   Цитата(GetSmart @ Jun 2 2006, 23:54) Цита...   Jun 2 2006, 20:57
|- - smk   Цитата(GetSmart @ Jun 2 2006, 23:54) Цита...   Oct 5 2006, 16:30
|- - defunct   Цитата(smk @ Oct 5 2006, 19:30) У меня си...   Oct 6 2006, 11:11
- - GetSmart   Надо только в прерывании захвата смотреть, если чи...   Jun 2 2006, 21:18
|- - defunct   Цитата(GetSmart @ Jun 3 2006, 00:18) Надо...   Jun 2 2006, 21:45
- - GetSmart   ЦитатаТам это учтено: Да, я это написал когда ещё ...   Jun 2 2006, 21:53
|- - defunct   Цитата(GetSmart @ Jun 3 2006, 00:53) Кста...   Jun 2 2006, 22:05
- - GetSmart   Вроде нормальный пример. Тока непонятно зачем R0 и...   Jun 2 2006, 23:02
|- - defunct   Цитата(GetSmart @ Jun 3 2006, 02:02) Хотя...   Jun 3 2006, 13:02
- - GetSmart   ???   Jun 3 2006, 05:22
- - Rst7   О чем вы, господа? Забыли, что внутри проца есть е...   Jun 3 2006, 06:28
- - GetSmart   О чём вы, господин? Задержка всегда постоянная. И ...   Jun 3 2006, 06:53
- - Rst7   Э, да, вспылил, был неправ   Jun 3 2006, 07:20
- - Валентиныч   А чем вызвано ограничение по кварцу - 1 МГц? (Или ...   Jun 3 2006, 14:17
- - GetSmart   defunct Ну ёкарный бабай... Ещё нужно заменить ...   Jun 3 2006, 17:16
|- - defunct   Цитата(GetSmart @ Jun 3 2006, 20:16) defu...   Jun 3 2006, 19:05
- - Sergiy   все хорошо ребята - мона конечно извращаться с АВР...   Jun 3 2006, 21:14
|- - smk   Цитата(Sergiy @ Jun 4 2006, 00:14) частот...   Oct 5 2006, 17:02
|- - SasaVitebsk   Цитата(Sergiy @ Jun 4 2006, 00:14) все хо...   Oct 5 2006, 23:37
|- - Stanislav   Цитата(SasaVitebsk @ Oct 6 2006, 03:37) Ц...   Oct 6 2006, 11:58
- - Sergiy   Да кстати в продолжение темы, а знаете зачем у ква...   Jun 3 2006, 21:29
- - king2   И вот все равно не понимаю я... Предположим, в эт...   Oct 5 2006, 01:30
- - CD_Eater   Не пойму, к чему эти обсуждения наилучшего кода, е...   Oct 5 2006, 17:56
- - khach   Как померять? Используя ГЛИН (генератор пилы) и вн...   Oct 5 2006, 19:49
- - =GM=   Ну вот, опоздал к началу обсуждения, как всегда, в...   Oct 6 2006, 16:22
|- - Stanislav   Цитата(=GM= @ Oct 6 2006, 20:22) Задача д...   Oct 9 2006, 10:46
|- - =GM=   Цитата(Stanislav @ Oct 9 2006, 09:46) Цит...   Oct 9 2006, 12:56
|- - Stanislav   Цитата(=GM= @ Oct 9 2006, 16:56) Поясните...   Oct 9 2006, 16:09
- - _artem_   =GM=, использование арифметических операций предпо...   Oct 6 2006, 17:17
|- - =GM=   Цитата(_artem_ @ Oct 6 2006, 16:17) =GM=,...   Oct 6 2006, 22:48
- - _artem_   Правильно говорите - я то невнимательно прочитал п...   Oct 7 2006, 00:10
- - singlskv   Подправил немного код GetSmart и defunct - добавил...   Oct 7 2006, 10:37
- - GetSmart   Забавно. На этой странице всех повело совсем не в ...   Oct 9 2006, 13:35
|- - =GM=   Цитата(singlskv @ Oct 7 2006, 09:37) Подп...   Oct 9 2006, 13:59
|- - singlskv   Цитата(=GM= @ Oct 9 2006, 17:59) Хочу нем...   Oct 9 2006, 16:34
|- - Леонид Иванович   ЦитатаНу и последнее, в подобных случаях предпочит...   Oct 9 2006, 20:15
|- - =GM=   Цитата(Леонид Иванович @ Oct 9 2006, 19:1...   Oct 10 2006, 11:04
|- - singlskv   Цитата(=GM= @ Oct 10 2006, 15:04) Что оче...   Oct 10 2006, 11:19
|- - SasaVitebsk   Цитата(singlskv @ Oct 10 2006, 14:19) Цит...   Oct 10 2006, 13:25
|- - =GM=   Цитата(SasaVitebsk @ Oct 10 2006, 12:25) ...   Oct 10 2006, 14:36
|- - defunct   Цитата(SasaVitebsk @ Oct 10 2006, 16:25) ...   Oct 10 2006, 22:32
- - GetSmart   Цитата(=GM=)Код mov temp,r4 ;с возможным п...   Oct 9 2006, 15:22
|- - =GM=   Цитата(GetSmart @ Oct 9 2006, 14:22) Цита...   Oct 9 2006, 16:06
- - _artem_   Для микросекундной точности mожно скорректировать...   Oct 9 2006, 16:11
|- - Stanislav   Цитата(_artem_ @ Oct 9 2006, 20:11) Для м...   Oct 9 2006, 16:13
- - GetSmart   Цитата(=GM=)Ничего не понял, поясните. Здесь никак...   Oct 9 2006, 16:24
|- - =GM=   Цитата(GetSmart @ Oct 9 2006, 15:24) Цита...   Oct 10 2006, 10:43
|- - singlskv   Цитата(=GM= @ Oct 10 2006, 14:43) 3) Одна...   Oct 10 2006, 11:49
|- - =GM=   Чудак-человек, я согласен, что практически ваша пр...   Oct 10 2006, 12:51
|- - singlskv   Цитата(=GM= @ Oct 10 2006, 16:51) Пусть о...   Oct 10 2006, 13:23
- - GetSmart   Павезло так павезло   Oct 9 2006, 20:37
- - smk   По моему скромному мнению, мне очень понравилась и...   Oct 10 2006, 14:09
- - GetSmart   Ой-Ой-Ой. Ладно, господа. Я вас примирю. Использ...   Oct 10 2006, 14:14
- - GetSmart   Цитата(=GM=)Просто механически повторил ваш код, р...   Oct 10 2006, 14:33
- - singlskv   Еще подправил код: - заменил на одну константу Con...   Oct 10 2006, 16:20
|- - =GM=   Цитата(singlskv @ Oct 10 2006, 15:20) Еще...   Oct 10 2006, 17:15
|- - singlskv   Цитата(=GM= @ Oct 10 2006, 21:15) Мне каж...   Oct 10 2006, 17:52
||- - =GM=   Цитата(singlskv @ Oct 10 2006, 16:52) Цит...   Oct 11 2006, 11:10
||- - singlskv   Цитата(=GM= @ Oct 11 2006, 15:10) Ну раз ...   Oct 11 2006, 16:06
|- - singlskv   Цитата(=GM= @ Oct 10 2006, 21:15) Цитата(...   Oct 10 2006, 18:06
|- - =GM=   Цитата(singlskv @ Oct 10 2006, 17:06) Цит...   Oct 11 2006, 10:54
- - GetSmart   Цитата(singlskv)Код in R5, ICR1H mov R7, ConstF...   Oct 10 2006, 20:19
|- - singlskv   [quote name='GetSmart' date='Oct 11 20...   Oct 10 2006, 20:58
- - GetSmart   defunct Скучали тут без Вас А почему все думают,...   Oct 10 2006, 23:11
|- - defunct   Цитата(GetSmart @ Oct 11 2006, 02:01) А п...   Oct 10 2006, 23:14
- - GetSmart   Цитатакак "глюкодром" Класс! Не, ну...   Oct 10 2006, 23:34
|- - defunct   Цитата(GetSmart @ Oct 11 2006, 02:34) Не,...   Oct 10 2006, 23:57
- - GetSmart   Цитата(defunct)i - переход на длительный обработчи...   Oct 11 2006, 02:49
|- - AVR   Прошу прощения за оффтоп, но для самого автора тем...   Oct 11 2006, 17:25
||- - singlskv   Цитата(AVR @ Oct 11 2006, 21:25) Прошу пр...   Oct 11 2006, 17:30
||- - GetSmart   Цитата(AVR @ Oct 11 2006, 23:25) Прошу пр...   Oct 11 2006, 17:43
|- - =GM=   Цитата(defunct @ Oct 18 2006, 10:44) Зате...   Oct 18 2006, 14:14
|- - defunct   Цитата(=GM= @ Oct 18 2006, 17:14) хотя ко...   Oct 18 2006, 16:04
|- - singlskv   Цитата(=GM= @ Oct 18 2006, 18:14) Но вот ...   Oct 18 2006, 20:07
|- - =GM=   Цитата(singlskv @ Oct 18 2006, 19:07) Цит...   Oct 19 2006, 15:21
- - CD_Eater   Цитата(defunct @ Oct 11 2006, 03:57) Цита...   Oct 11 2006, 17:59
- - singlskv   Цитата(defunct @ Oct 11 2006, 03:14) Цита...   Oct 11 2006, 20:51
- - GetSmart   Цитата(=GM=)GetSmart, хорош бурчать, это у вас так...   Oct 12 2006, 10:18
- - GetSmart   Цитата(=GM=)Как-то вы несистемно подходите к задач...   Oct 18 2006, 14:43
|- - =GM=   Цитата(GetSmart @ Oct 18 2006, 13:43) Цит...   Oct 19 2006, 14:55
- - GetSmart   defunct Любопытная вещь. Это я где-то уже видел и ...   Oct 18 2006, 17:17
- - singlskv   Цитата(=GM= @ Oct 19 2006, 18:55) Код.......   Oct 19 2006, 17:20
- - GetSmart   Цитата(=GM=)Похоже вам слово системщик, как быку к...   Oct 20 2006, 02:23
- - =GM=   GetSmart У вас же в последней проге слишком много ...   Oct 20 2006, 10:08
2 страниц V   1 2 >


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

 


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


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