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

 
 
> pic18fxxx, CCP, Capture mode, помогите правильно измерить время между импульсами
Constantka
сообщение Sep 16 2008, 06:55
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 47
Регистрация: 15-09-08
Из: Россия, Москва, САО
Пользователь №: 40 220



задача:
померить время между импульсами, с разрешением 0.1us.
Максимальная длительность между импульсами - 1.5sec

моё решение:
настраиваю собственно CCP,
прерывание по захвату ССP и по переполнению таймера.

в прерывании по переполнению таймера - увеличиваю доп переменную.
в прерывании по захвату ССP - сохраняю захваченные значения и доп переменную.

суть проблемы:
для перехода в прерывание требуется минимум три такта микроконтроллера,
+ анализ флажков источников прерывания (дабы понять источник прерывания)
так вот если захват происходит либо за 3-4 такта до переполнения таймера либо чуть после, подняты оба флажка. И как понять происходил захват до переполнения таймера или после? Всё что я придумала - это анализировать захваченные данные, но очень хочется узнать как поступают здравомыслящие люди wink.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Constantka
сообщение Sep 18 2008, 13:08
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 47
Регистрация: 15-09-08
Из: Россия, Москва, САО
Пользователь №: 40 220



Цитата(DL36 @ Sep 18 2008, 08:26) *
Посмотрите на телесистемах, было интересное решение для захвата в 32 бита.
Пересмотрела всю конференцию где упоминалось про CCP. Потратила час времени.
Нет ни одного обсуждения сохранения хотя бы флажка переполнения таймера!!!
Вы вероятно имели ввиду ветку Можно ли используя аппаратные возможности Capture/Compare (Timer_B) в MSP430F149, реализовать 4 счетчика внешних импульсов (32-разрядные), с частотой счета до 1МГц? (МК работает на 8МГц) так это как говорится ноу коментс...

Цитата(=GM= @ Sep 18 2008, 12:32) *
Создаётся впечатление, что вы не понимаете идеи моего кода, придётся немного поаргументировать, чтобы вы тоже порадовались.
Уважаемый =GM=, я крайне благодарна Вам за Вше внимание к проблеме.
Однако очень прошу вас отойти от мысли, что Вас не понимают. Ваша идея мне понятна как 5 копеек! И я всячески пытаюсь обратить Ваше внимание на её неработоспособность, уже и в картинках и развлекательных видеофильмах biggrin.gif Попробуйте хоть на 10 минут посмотреть с позиции, что что-то в вашем алгоритме не так. И тогда у нас скорее всего получится нормальное обсуждение.
Цитата(=GM= @ Sep 18 2008, 12:32) *
Если в моём коде сначала произойдёт прерывание по переполнению TMR1, то будет скорректирован дополнительный байт auxbyt3, если затем произойдёт захват CCP1, то при проверке захваченное значение естественно будет больше нуля, и допбайт времени auxbyt3 будет благополучно скопирован в байт newtim3 без инкрементирования. Ну и что здесь неверного?
Да и мне тоже сначала так показалось. Давайте предположим что этот "...если затем произойдёт захват CCP1, то..." произойдёт на первой или второй строчке нашего обработчика прерывания. тогда оба флажка будут в 1! и CCP1IF и TMR1IF, рассмотрите пожалуйста эту ситуацию! Именно она продемонстрирована на диафильме
Цитата(=GM= @ Sep 18 2008, 12:32) *
Рассмотрим ситуацию с точки зрения системного времени Т, системных тиков, если хотите, которые фиксирует таймер1 в переменных time2, time1, time0 (две последние переменные по сути - регистры таймера). Время захвата фиксируется в переменных capt2, capt1, capt0 (две последние переменные по сути - регистры схемы захвата).
Ok давайте рассмотрим.
Цитата(=GM= @ Sep 18 2008, 12:32) *
Ситуация 1. T=0xFFFF. Прерывания по переполнению нет, и может возникнуть прерывание захвата. Если прерывание захвата возникло, capt2=time2=0х02(произвольно), capt1=time1=0xFF, capt0=time0=0xFF. Что и должно быть.
Не вызывает сомнений! 5+
Цитата(=GM= @ Sep 18 2008, 12:32) *
Ситуация 2. T=0x0000. Есть прерывание по переполнению, и может возникнуть прерывание захвата. Если прерывание захвата возникло, в моём коде оно обрабатывается первым, тогда capt2=time2=0х02, capt1=time1=0x00, capt0=time0=0x00. Поскольку время захвата равно 0х0000,
Вот давайте посчитаем! Команды перехода выполняются за два таката, следовательно значение таймера будет=2. а вы только на на адресе 0008h и до первого btfss CCP1IF надо ещё сохранить WREG, а если сейчас произойдет захват? захваченное значение будет 0002h, (и появится флаг CCP1IF см диафильм)
Цитата(=GM= @ Sep 18 2008, 12:32) *
Ситуация 3. T=0x0001. Прерывания по переполнению нет, и может возникнуть прерывание захвата. Если прерывание захвата возникло, capt2=time2=0х03, capt1=time1=0x00, capt0=time0=0x00.
тут я не поняла почему не возникло прерывание по таймеру...
Цитата(=GM= @ Sep 18 2008, 12:32) *
Вопрос по приведённому алгоритму. Почему вы инкрементируете CCP1U, если у вас не было прерывания захвата?
предположим у меня только два источника прерывания, ССP1 и TMR1.
Ну может конечно я чего то недопонимаю, Но тогда вам нужно дать конкретный комментарий именно к тому месту моих рассуждений который вам кажется неверным. А не просто повторять свою идею да ещё в мельчайших подробностях. Пожалуйста обратите внимание на ход моих мыслей!
Go to the top of the page
 
+Quote Post
=GM=
сообщение Sep 18 2008, 14:14
Сообщение #3


Ambidexter
*****

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



Цитата(Короткова Светлана @ Sep 18 2008, 12:08) *
Вот давайте посчитаем! Команды перехода выполняются за два такта, следовательно значение таймера будет=2. а вы только на на адресе 0008h и до первого btfss CCP1IF надо ещё сохранить WREG, а если сейчас произойдет захват? захваченное значение будет 0002h

Ну не так вы всё интерпретируете. Рассмотрим ситуацию 2, когда системное время Т=0х0000.

1) Возникают одновременно ДВА прерывания: захват и переполнение. Причём заметьте, переполнение может возникнуть только при Т=0х0000, надеюсь, что вам это очевидно.
2) Что такое захват? По фронту входного импульса, который вы измеряете, происходит ПЕРЕЗАПИСЬ содержимого таймера в регистры модуля захвата и оно не меняется до прихода следующего фронта. какое там будет значение? Ну конечно, 0х0000.
3) В прерывании по захвату вы спокойно, не торопясь, переписываете содержимое регистров модуля захвата в ячейки памяти capt2=time2 (ваша доппеременная системного времени), capt1=CCPR1Н, capt0=CCPR1L.
4) Проверяете, не ноль ли у вас в ячейках capt1, capt0? Там действительно ноль. Значит, говорите вы себе, в прерывании по таймеру надо будет учесть перенос, и в захваченном времени надо учесть, давайте я его учту добавлением единицы к capt2, да и всё.
5) Позволяете отработать остальной части кода, а именно, прерыванию по переполнению, чтобы текущее время было адекватным. (Замечу в скобках, время в таймере по-прежнему бежит, но кого это волнует? Поскольку мы точно зафиксировали момент наступления фронта входного импульса и подправили доппеременную ЗАХВАЧЕННОГО системного времени).

Цитата(Короткова Светлана @ Sep 18 2008, 12:08) *
тут я не поняла почему не возникло прерывание по таймеру...

Потому что оно может возникнуть при Т=0х0000, но никак не при Т=0х0001. Ну что тут непонятного? Как таймер считает? 0х0000, 0х0001, 0х0002,..., 0хFFFF, затем 0х0000 и ПЕРЕНОС, 0х0001, 0х0002, и т.д. Перенос надо учесть в доппеременной, что и делается в моём коде в прерывании по переполнению, а именно, инкрементируется переменная time2.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Constantka
сообщение Sep 18 2008, 14:48
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 47
Регистрация: 15-09-08
Из: Россия, Москва, САО
Пользователь №: 40 220



Цитата(=GM= @ Sep 18 2008, 17:05) *
1) Возникают одновременно ДВА прерывания: захват и переполнение. Причём заметьте, переполнение может возникнуть только при Т=0х0000, надеюсь, что вам это очевидно.
Очевидно что в этой ситуации проблем нет, но я вас очень прошу рассмотреть ситуацию когда захват произойдет между переполнением таймера+1такт и началом анализа флага CCP1IF. тогда захваченное значение не будет равно нулю!
Цитата(=GM= @ Sep 18 2008, 17:05) *
2) Что такое захват? По фронту входного импульса, который вы измеряете, происходит ПЕРЕЗАПИСЬ содержимого таймера в регистры модуля захвата и оно не меняется до прихода следующего фронта. какое там будет значение? Ну конечно, 0х0000.
Пожалуйста давайте не будем рассматривать нижележащие пункты а остановимся на этом!

Я на всякий случай опишу эту ситуацию:
1. Значение таймера FFFFh
2. В следующем такте происходит прерывание по переполнению таймера.
3. Мы оказываемся в обработчике прерывания по адресу 0008h (значение таймера=0002h)
4. происходит захват. (захваченное значение 0002h).
и далее по вашему алгоритму....

Давайте сначала рассмотрим эту ситуацию!

Цитата(=GM= @ Sep 18 2008, 12:32) *
Ситуация 3. T=0x0001. Прерывания по переполнению нет, и может возникнуть прерывание захвата. Если прерывание захвата возникло, capt2=time2=0х03, capt1=time1=0x00, capt0=time0=0x00.
мне было не понятно как при "T=0x0001" может "capt1=time1=0x00, capt0=time0=0x00"

Цитата(=GM= @ Sep 18 2008, 17:14) *
Потому что оно может возникнуть при Т=0х0000, но никак не при Т=0х0001. Ну что тут непонятного? Как таймер считает? 0х0000, 0х0001, 0х0002,..., 0хFFFF, затем 0х0000 и ПЕРЕНОС, 0х0001, 0х0002, и т.д. Перенос надо учесть в доппеременной, что и делается в моём коде в прерывании по переполнению, а именно, инкрементируется переменная time2.

1. "Потому что оно может возникнуть при Т=0х0000, но никак не при Т=0х0001"
2. "Как таймер считает? 0х0000, 0х0001, 0х0002,..."
3. "T=0x0001"
исходя из вышеизоженных вами правил становится непонятно как при T=0x0001 [пункт 3] не возникло прерывания, которое обязано было возникнуть ещё при Т=0х0000 [пункт 1], исходя из [пункта 2].
Но это я просто ответила на вопрос что мне было непонятно. давайте это обсудим после рассомтрения синутации выше.

Сообщение отредактировал Короткова Светлана - Sep 18 2008, 14:49
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Короткова Светлана   pic18fxxx, CCP, Capture mode   Sep 16 2008, 06:55
- - =GM=   Цитата(Короткова Светлана @ Sep 16 2008, 05...   Sep 17 2008, 10:36
|- - Короткова Светлана   Цитата(=GM= @ Sep 17 2008, 13:36) т.к. пе...   Sep 17 2008, 11:00
|- - =GM=   Цитата(Короткова Светлана @ Sep 17 2008, 10...   Sep 17 2008, 12:26
- - Короткова Светлана   Цитата(=GM= @ Sep 17 2008, 15:26) Немного...   Sep 17 2008, 23:58
|- - =GM=   Цитата(Короткова Светлана @ Sep 17 2008, 22...   Sep 18 2008, 09:32
- - konstanta   RE: pic18fxxx, CCP, Capture mode   Sep 18 2008, 02:37
- - Короткова Светлана   пока ничего умнее не придумала. требуется критика,...   Sep 18 2008, 02:50
|- - DL36   Цитата(Короткова Светлана @ Sep 18 2008, 05...   Sep 18 2008, 05:26
||- - =GM=   Похоже, у вас какое-то фундаментальное недопониман...   Sep 18 2008, 15:49
||- - Короткова Светлана   Цитата(=GM= @ Sep 18 2008, 18:49) Похоже,...   Sep 18 2008, 17:33
||- - =GM=   Цитата(Короткова Светлана @ Sep 18 2008, 16...   Sep 18 2008, 23:05
|- - DL36   Цитата(Короткова Светлана @ Sep 18 2008, 16...   Sep 18 2008, 20:14
- - Короткова Светлана   Цитата(DL36 @ Sep 18 2008, 23:14) Нет не ...   Sep 20 2008, 03:26
|- - =GM=   Цитата(Короткова Светлана @ Sep 20 2008, 02...   Sep 21 2008, 23:10
- - Короткова Светлана   здесь можно взять MPLAB собственно мой проект. ди...   Sep 22 2008, 13:58
|- - =GM=   У вас там ошибка на ошибке (:-(. Например, проверк...   Sep 23 2008, 08:50
|- - Короткова Светлана   Цитата(=GM= @ Sep 23 2008, 11:50) У вас т...   Sep 23 2008, 10:37
|- - =GM=   Что если пришли короткие импульсы и захваты начали...   Sep 23 2008, 13:19
|- - Короткова Светлана   Цитата(=GM= @ Sep 23 2008, 16:19) Что есл...   Sep 23 2008, 14:04
|- - =GM=   Ну подайте 200 кГц меандр на один канал захвата и ...   Sep 23 2008, 14:19
|- - Короткова Светлана   Цитата(=GM= @ Sep 23 2008, 17:19) Ну пода...   Sep 23 2008, 14:49
|- - =GM=   Светунь, я не знаю, какой был первый вопрос. Ваша ...   Sep 24 2008, 09:01
- - NickB   Не вдаваясь в суть Вашей дискуссии. Когда-то давно...   Sep 24 2008, 10:08
|- - Короткова Светлана   Цитата(NickB @ Sep 24 2008, 13:08) Поэтом...   Sep 24 2008, 11:16
|- - =GM=   Отвечаю по порядку, хотя вопросы...третьего порядк...   Sep 24 2008, 11:29
|- - Короткова Светлана   Я повторюсь. Для меня все точки над i уже расставл...   Sep 24 2008, 11:50
|- - =GM=   Уважаемая Светлана, Во-первых, с вашей помощью об...   Sep 25 2008, 11:06
- - Короткова Светлана   Лишь в споре рождается истина Рада, что мы с ва...   Sep 25 2008, 13:00
- - =GM=   Ещё вот, по мелочи, чувствуя свою невольную вину(:...   Sep 25 2008, 14:21


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:40
Рейтинг@Mail.ru


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