Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

16F877 и измерване на продължителност на импулс?
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=2745
Страница 1 от 2

Автор:  milenjs [ Сря Авг 09, 2006 12:02 pm ]
Заглавие:  16F877 и измерване на продължителност на импулс?

Дайте някаква идея за измерване на продължителност на импулс - от качващ до падащ фронт. Кофтито е че порт В е зает и не може да се ползва, там щеше да стане лесно с прекъсване при промяна на състоянието на който и да е пин от порт :(

Автор:  VSU [ Сря Авг 09, 2006 12:46 pm ]
Заглавие: 

In Capture mode, CCPR1H:CCPR1L captures the
16-bit value of the TMR1 register when an event occurs
on pin RC2/CCP1. An event is defined as:
• Every falling edge
• Every rising edge
Айде малко да поровиш де или този режим на работа е ТАБУ за теб

Автор:  milenjs [ Сря Авг 09, 2006 12:57 pm ]
Заглавие: 

Не е табу, така си измервам периода на импулса, сега ми трябва да меря ширината на импулса, не се сещам как и дали може да се стартира кепчара по качващ фрон и да се спре/отчете таймер 1 при падащ фронт. Ако някой знае - да драсне нещо. Благодаря!

Автор:  Predator_MF [ Сря Авг 09, 2006 1:15 pm ]
Заглавие: 

В регистър CCPCON1:
Цитат:
bit 3-0 CCPxM3:CCPxM0: CCPx Mode Select bits
0000 = Capture/Compare/PWM disabled (resets CCPx module)
0100 = Capture mode, every falling edge
0101 = Capture mode, every rising edge
0110 = Capture mode, every 4th rising edge
0111 = Capture mode, every 16th rising edge
1000 = Compare mode, set output on match (CCPxIF bit is set)
1001 = Compare mode, clear output on match (CCPxIF bit is set)
1010 = Compare mode, generate software interrupt on match (CCPxIF bit is set, CCPx pin is
unaffected)
1011 = Compare mode, trigger special event (CCPxIF bit is set, CCPx pin is unaffected); CCP1
resets TMR1; CCP2 resets TMR1 and starts an A/D conversion (if A/D module is
enabled)
11xx = PWM mode

Нагласяш си прекъсване при CCP1 capture, нагласяш фронта на положителен (пишеш xxxx0101 в CCPCON1) - при поява на прекъсване, нулираш таймер 1, сменяш фронта на отрицателен (xxxx0100 в CCPCON1), при появата на следващото прекъсване ще имаш дължината на импулса в Timer1.

Автор:  VSU [ Сря Авг 09, 2006 1:21 pm ]
Заглавие: 

даже не е нужно да нулира таймера помни стойноста някаде сменяш режима от нарастващ на падащ фронт на следващото прекъсване четеш новата стойност и вадиш от нея старата

Автор:  milenjs [ Сря Авг 09, 2006 1:42 pm ]
Заглавие: 

OK, ще го пробвам ама без прекъсване и ще обадя дали е станало!

Автор:  VSU [ Сря Авг 09, 2006 2:05 pm ]
Заглавие: 

Пример4е на Ц :)

Прикачени файлове:
ccp.c [716 Байта]
270 пъти

Автор:  rumen [ Сря Авг 09, 2006 3:38 pm ]
Заглавие: 

Примерче на протон 8)
Variable = PULSIN Pin , State

Автор:  Реконструктор [ Сря Авг 09, 2006 3:48 pm ]
Заглавие: 

Аналогов компаратор нямаш ли свободен?

Автор:  Dimitar [ Сря Авг 09, 2006 4:15 pm ]
Заглавие: 

Реконструктор написа:
Аналогов компаратор нямаш ли свободен?

За тая цел се ползват кепчъри, щото става автоматично. С компаратор пак ще стане, ама с малко повече играчка :) .
И е по добре да нулира таймера, за да не смята после повече, още повече пък на следващия качващ фронт вече му дава и периода. Така с един кепчър - два заека 8) .

Автор:  milenjs [ Сря Авг 09, 2006 4:36 pm ]
Заглавие: 

Румене, с Pulsin става най-лесно, но при 4 мхз кварц разделителната му способност е 10us та затова се мъча с CCP

Автор:  milenjs [ Сря Авг 09, 2006 4:49 pm ]
Заглавие: 

Kой да ти чете внимателно че понякога при запис в CCP1CON си вдига флага за прекъсване и цял час се чудя защо ми дава само 4 мкс :( . Сега го коригирах но пък ми отчита 2 пъти повече. Явно пак някое недоглеждане!

Автор:  VSU [ Сря Авг 09, 2006 5:19 pm ]
Заглавие: 

Друг е въпроса че като нулираш таймера вече не е и вярно (времето за влизане в прекъсване) меренето ти . milenjs за това в примерчето чистенето на флага съм го сложил най-накрая

Автор:  milenjs [ Сря Авг 09, 2006 5:26 pm ]
Заглавие: 

Добре де, къде бъркам, не ми измерва дължината на импулса а периода :?

Код:
      CCP1CON = %00000101               ' Enable the CCP1 capture, falling edge
       T1CON = %00000001               ' TMR1 prescale=1, and turn it on (1uS per count)     
       PIR1.2 = 0                           ' Clear capture flag
       PIR1.0 = 0
       While PIR1.2 = 0 : Wend                                 ' Wait here until captured         
            TMR1H=0
            TMR1L=0                              
            PIR1.0 = 0
            CCP1CON = %00000100
            PIR1.2 = 0                                                       ' Clear capture flag
        While PIR1.2 = 0 : Wend
         TimerL = CCPR1L               ' Store the captured value in period variable
         TimerM = CCPR1H

Автор:  Реконструктор [ Сря Авг 09, 2006 5:35 pm ]
Заглавие: 

Еми кепчъра, доколкото разбирам, бачка само по един фронт. Аз за това казвам за компаратора, щото иначе не виждам как ще стане.

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/