|
Измерение временных интервалов, с высокой точностью |
|
|
|
 |
Ответов
|
Oct 12 2006, 09:31
|

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. Будет сохранно, как в банке ... до следующего захвата.
А как Вы в основной программе планируете узнавать что произошел второй захват ?  А вы у 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)  Ведро маслят... Это многое объясняет... Как-нить при случае тоже ляпну такое  GetSmart, хорош бурчать, это у вас так что проявляется(:-)? Не злитесь, ляпните что-нибудь или тяпните, разрядка придёт, поверьте(:-). Добавлю специально для вас. Напротив моих окон стоит бангало, под ним живет более 20 диких кроликов, смешные такие...А недавно видел как ворона ссорилась с белкой, наскакивали друг на друга, прям как вы на меня(:-). GetSmart, жена маслята уже посолила, вот. Белые тут тоже водятся, но ехать далеко, в Нью Форист, неохота...
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Oct 15 2006, 02:25
|

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

|
Цитата(=GM= @ Oct 12 2006, 12:31)  А недавно видел как ворона ссорилась с белкой, наскакивали друг на друга, прям как вы на меня(:-). Дык, эта, если смотреть со стороны, здесь все замечания вам по делу были сказаны, а вы все в шутку да в обидку воспринимаете.. Что ни пост - то перл: особливо это: Цитата Какая разница, где хранить время текущего захвата, в регистрах r7-r6-r5-r4 или в r7-r6-icr1h-icr1l? Ну уж никак не в аппаратно зависимых регистрах, которые нам абсолютно неподконтрольны. Вы что, правда не понимаете, что можно не успеть вычитать icr1h-icr1l до того как случится следующий захват? либо например наткнуться на ситуацию когда в момент вычитки L, произойдет следующий захват.
|
|
|
|
|
Oct 16 2006, 13:06
|

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 мс до секунд и с длинными прерываниями, согласен, тогда забудьте о сказанном выше. Я бы сказал так, что постановка первоначальной задачи была нечеткой, отсюда все недоразумения. Что ещё? На справедливую критику не обижаюсь, с несправедливой борюсь по мере сил(:-), и посмеяться и пошутить люблю, но по-доброму.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
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    defunct Цитата(=GM= @ Oct 16 2006, 16:06) Я и не ... Oct 18 2006, 11:44     =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 страниц
1 2 >
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|