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

 
 
> 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 17 2008, 23:58
Сообщение #2


Участник
*

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



Цитата(=GM= @ Sep 17 2008, 15:26) *
Немного не так, я уже говорил как, читайте как, и смотрите фрагмент ниже
Меня всегда радовали люди с четкой аргументацией biggrin.gif
поэтому на этот раз приготовила свой аргумент в двух вариантах
вариант I. (словесный)
Если в вашем коде, произойдёт сначала прерывание по переполнению TMR1, а вслед за этим захват CCP1, то при проверке захваченное значение будет однозначно больше нуля.

вариант II. (в картинках)
я загрузила ваш кусочек кода в MPLAB и пошагала по вашему алгоритму.
результат можно посмотреть во флеш по ссылке http://korotkovasvetlana.by.ru/CCP.htm,
или отсюда Прикрепленный файл  ccp.zip ( 965.72 килобайт ) Кол-во скачиваний: 105
.

расскажите какой вариант понравился больше wink.gif
Go to the top of the page
 
+Quote Post
=GM=
сообщение Sep 18 2008, 09:32
Сообщение #3


Ambidexter
*****

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



Цитата(Короткова Светлана @ Sep 17 2008, 22:58) *
Если в вашем коде, произойдёт сначала прерывание по переполнению TMR1, а вслед за этим захват CCP1, то при проверке захваченное значение будет однозначно больше нуля

Если в моём коде сначала произойдёт прерывание по переполнению TMR1, то будет скорректирован дополнительный байт auxbyt3, если затем произойдёт захват CCP1, то при проверке захваченное значение естественно будет больше нуля, и допбайт времени auxbyt3 будет благополучно скопирован в байт newtim3 без инкрементирования. Ну и что здесь неверного?

Создаётся впечатление, что вы не понимаете идеи моего кода, придётся немного поаргументировать, чтобы вы тоже порадовались. Рассмотрим ситуацию с точки зрения системного времени Т, системных тиков, если хотите, которые фиксирует таймер1 в переменных time2, time1, time0 (две последние переменные по сути - регистры таймера). Время захвата фиксируется в переменных capt2, capt1, capt0 (две последние переменные по сути - регистры схемы захвата).

Ситуация 1. T=0xFFFF. Прерывания по переполнению нет, и может возникнуть прерывание захвата. Если прерывание захвата возникло, capt2=time2=0х02(произвольно), capt1=time1=0xFF, capt0=time0=0xFF. Что и должно быть.

Ситуация 2. T=0x0000. Есть прерывание по переполнению, и может возникнуть прерывание захвата. Если прерывание захвата возникло, в моём коде оно обрабатывается первым, тогда capt2=time2=0х02, capt1=time1=0x00, capt0=time0=0x00. Поскольку время захвата равно 0х0000, переменная capt2=capt2+1=0х03. После этого, обрабатывается прерывание от таймера, и независимо от наличия прерывания захвата, корректируется переменная time2=time2+1=0х03. Как видите, полёт нормальный.

Ситуация 3. T=0x0001. Прерывания по переполнению нет, и может возникнуть прерывание захвата. Если прерывание захвата возникло, capt2=time2=0х03, capt1=time1=0x00, capt0=time0=0x00.

Как видите, в любой ситуации время появления внешнего события соответствует времени захвата.

Вопрос по приведённому алгоритму. Почему вы инкрементируете CCP1U, если у вас не было прерывания захвата?


--------------------
Делай сразу хорошо, плохо само получится
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
- - 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
- - Короткова Светлана   Цитата(DL36 @ Sep 18 2008, 08:26) Посмотр...   Sep 18 2008, 13:08
|- - =GM=   Цитата(Короткова Светлана @ Sep 18 2008, 12...   Sep 18 2008, 14:14
||- - Короткова Светлана   Цитата(=GM= @ Sep 18 2008, 17:05) 1) Воз...   Sep 18 2008, 14:48
||- - =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 Текстовая версия Сейчас: 20th July 2025 - 05:33
Рейтинг@Mail.ru


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