|
pic18fxxx, CCP, Capture mode, помогите правильно измерить время между импульсами |
|
|
|
Sep 16 2008, 06:55
|
Участник

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

|
задача: померить время между импульсами, с разрешением 0.1us. Максимальная длительность между импульсами - 1.5sec моё решение: настраиваю собственно CCP, прерывание по захвату ССP и по переполнению таймера. в прерывании по переполнению таймера - увеличиваю доп переменную. в прерывании по захвату ССP - сохраняю захваченные значения и доп переменную. суть проблемы: для перехода в прерывание требуется минимум три такта микроконтроллера, + анализ флажков источников прерывания (дабы понять источник прерывания) так вот если захват происходит либо за 3-4 такта до переполнения таймера либо чуть после, подняты оба флажка. И как понять происходил захват до переполнения таймера или после? Всё что я придумала - это анализировать захваченные данные, но очень хочется узнать как поступают здравомыслящие люди
|
|
|
|
|
 |
Ответов
|
Sep 17 2008, 10:36
|

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

|
Цитата(Короткова Светлана @ Sep 16 2008, 05:55)  суть проблемы: для перехода в прерывание требуется минимум три такта микроконтроллера, + анализ флажков источников прерывания (дабы понять источник прерывания) так вот если захват происходит либо за 3-4 такта до переполнения таймера либо чуть после, подняты оба флажка. И как понять происходил захват до переполнения таймера или после? Всё что я придумала - это анализировать захваченные данные, но очень хочется узнать как поступают здравомыслящие люди  Можно сделать так. 1) Назначаете прерывания по захвату и по переполнению на вектор с высоким приоритетом. 2) При возникновении прерывания проверяете флаг захвата. - Если есть захват, то проверяете захваченное время на 0, если 0, то копируете доппеременную в другую ячейку и добавляете к ней 1, т.к. перенос мог возникнуть только в единственном случае, когда в регистре таймера было 0хFFFF и стало 0х0000. Если не 0, то просто копируете доппеременную в другую ячейку. - Если нет захвата, то переходите к п.3 3) Проверяете флаг переполнения, если есть переполнение, то инкрементируете доппеременную, иначе выходите из прерывания.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Sep 17 2008, 11:00
|
Участник

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

|
Цитата(=GM= @ Sep 17 2008, 13:36)  т.к. перенос мог возникнуть только в единственном случае, когда в регистре таймера было 0хFFFF и стало 0х0000. вот как то у меня этот фрагмент вызывает подозрение. вот начало моего обработчика: org 08h movwf WTempH,0 movff STATUS,StatusTempH
btfsc PIR1,TMR1IF,0 ; прерывание от таймера1 ?. bra @TMR1 ; да, переход
btfsc PIR1,CCP1IF,0 ; прерывание от CCP1 ? bra @CCP1 ; да, переход
btfsc PIR2,CCP2IF,0 ; прерывание от CCP2 ? bra @CCP2 ; да, переход
btfsc PIR3,CCP3IF,0 ; прерывание от CCP3 ? bra @CCP3 ; да, переход
btfsc PIR3,CCP4IF,0 ; прерывание от CCP4 ? bra @CCP4 ; да, переход
btfsc PIR3,CCP5IF,0 ; прерывание от CCP5 ? bra @CCP5 ; да, переход
захват от CCP1 может произойти на проверки флага CCP5IF (последней строчке), а переполнение таймера скажем на проверке CCP3IF => захваченное время CCP1 будет уже не равно 0х0000. ... и вот скажите как с этим жить ?  PS сорьки, табуляторы форумом не парсируются, а тег я не помню
Сообщение отредактировал Короткова Светлана - Sep 17 2008, 11:14
|
|
|
|
|
Sep 17 2008, 12:26
|

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

|
Цитата(Короткова Светлана @ Sep 17 2008, 10:00)  захват от CCP1 может произойти на проверки флага CCP5IF (последней строчке), а переполнение таймера скажем на проверке CCP3IF => захваченное время CCP1 будет уже не равно 0х0000 Немного не так, я уже говорил как, читайте как, и смотрите фрагмент ниже Код org 0x0008 movwf WTempH,0 movff STATUS,StatusTempH ccp1int btfss PIR1,CCP1IF,0 ; прерывание от CCP1? bra tim1ovf ; нет, продолжим разбор movff CCPR1L,newtim0 ; захваченное movff CCPR1H,newtim1 ; время и movff auxbyt3,newtim3 ; дополнительный байт movwf newtim0 ; проверим захваченное iorwf newtim1 ; время на 0 bnz tim1ovf ; не было переполнения incf newtim3 ; учтём переполнение для newtim tim1ovf btfsc PIR1,TMR1IF,0 ; прерывание от таймера1? incf auxbyte3 ; учтём перенос
btfsc PIR2,CCP2IF,0 ; прерывание от CCP2? bra @CCP2 ; да, переход btfsc PIR3,CCP3IF,0 ; прерывание от CCP3? bra @CCP3 ; да, переход btfsc PIR3,CCP4IF,0 ; прерывание от CCP4? bra @CCP4 ; да, переход btfsc PIR3,CCP5IF,0 ; прерывание от CCP5? bra @CCP5 ; да, переход Здесь вы сначала проверяете, нет ли прерывания по захвату и делаете что надо, потом проверяете прерывание по переполнению, а уж потом разбираете все оставшиеся прерывания, так что при разборе захвата и переполнения никаких доппрерываний не будет. И будет вам щастье. Теги такие: [ code] без пробелов, админы для общего удобства сделали кнопочку #.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
Короткова Светлана pic18fxxx, CCP, Capture mode Sep 16 2008, 06:55 Короткова Светлана Цитата(=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 Короткова Светлана Цитата(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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|