CCP PULSE WIDTH PROBLÉMU

F

faraz101

Guest
ahoj všetkým
chlapi chcem zmerať pulz šírka pozitívny impulz v dĺžke 1ms až 2ms.
im pomocou pic16f628 CCP pre tento modul.Mám písomný kód v ccs kompileru ale nie je working.the kód je tu, prosím pozrite sa na to a povedz mi to chybu.
alebo akékoľvek iné example.i videli ccs, ale napríklad, že program používa 2 CCP module.but chcem použiť iba 1.thanx# Int_CCP1
dlhodobom vzostupe, páde, pulse_width;
void CCP1_isr ()
(
if (vstup (pin_b3))
(
nárast = CCP_1;
setup_ccp1 (CCP_CAPTURE_FE);
)
if (! vstup (pin_b3))
(
pokles = CCP_1;
pulse_width = pokles - nárast;
printf ( "\ r% lu nás", pulse_width / 5);
)
)void main ()
(

setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_1);
setup_timer_1 (T1_INTERNAL);
setup_timer_2 (T2_DISABLED, 0,1);
setup_ccp1 (CCP_CAPTURE_RE);
setup_comparator (NC_NC_NC_NC);
setup_vref (FALSE);
enable_interrupts (INT_CCP1);
enable_interrupts (globálne);

)

 
Nazdar,
Myslím, že vo svojej hlavný program, ktorý by mal slučka pre premennú zmeniť stav a vo svojej rutinnej prerušenia, po printf, platnosť premennej pre zmenu stavu.Inak vaše hlavný program bude ukončený krátko po nastavení.
Pozdravy,
Laktronics

 
Nazdar,
Prosím, Váš príspevok upravil kód.Dostávate žiadne chyby, prekladač, kým kompilácii?Sú prerušenia dostáva rutin zostavených na správnej adrese vektor, ako je zrejmé z konečnej montáže / Hex kódu?
Pozdravy,
Laktronics

 
# Int_CCP1
dlhodobom vzostupe, páde, pulse_width;
int16 a, b;
void CCP1_isr ()
(
if (vstup (pin_b3))
(
nárast = CCP_1;
a = 1;
b = 0;
)
if (! vstup (pin_b3))
(
pokles = CCP_1;
pulse_width = pokles - nárast;
b = 1;
a = 0;
)
)void main ()
(

setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_1);
setup_timer_1 (T1_INTERNAL);
setup_timer_2 (T2_DISABLED, 0,1);
setup_ccp1 (CCP_CAPTURE_RE);
setup_comparator (NC_NC_NC_NC);
setup_vref (FALSE);
enable_interrupts (INT_CCP1);
enable_interrupts (globálne);

while (1)
(
if (a == 1)
(
setup_ccp1 (CCP_CAPTURE_FE);
)
if (b == 1)
(
b = 0;
printf ( "\ r% lu nás", jeseň / 5);
)
)
)
Tu je kód a ccs vykazovať žiadne chyby, zatiaľ čo zostavovaní a budovanie hex súbor.

 
Nazdar,
Skúste to, prosím, opravené kód.Tiež skontrolujte, či printf vyhlásenia potrebuje opravu.Dúfam, že vaša šírka impulzu je dostatočne veľký, aby čas prerušiť skákanie pre každú hranu.Vaša staršie ISR rutina bola lepšia z tohto hľadiska

# Int_CCP1
dlhodobom vzostupe, páde, pulse_width;
int16 a;
void CCP1_isr ()
(
if (vstup (pin_b3))
(
nárast = CCP_1;
a = 0;
)
if (! vstup (pin_b3))
(
pokles = CCP_1;
pulse_width = pokles - nárast;
printf ( "\ r% lu nás", pulse_width);
a = 1;
)
)void main ()
(

setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_1);
setup_timer_1 (T1_INTERNAL);
setup_timer_2 (T2_DISABLED, 0,1);
setup_ccp1 (CCP_CAPTURE_RE);
setup_comparator (NC_NC_NC_NC);
setup_vref (FALSE);
enable_interrupts (INT_CCP1);
enable_interrupts (globálne);
a = 1;
while (1)
(
if (a == 1)
(
setup_ccp1 (CCP_CAPTURE_RE);
)
if (a == 0)
(
setup_ccp1 (CCP_CAPTURE_FE);
)
)

Pozdravy,
LaktronicsPridané po 30 minútach:Nazdar,
Tiež skontrolujte, či setup_CCP1 vymaže CCP registra, ak je to, že je nejaký problém.Ak sa tak nestane, možno budete musieť jasné, že na dvoch miestach - raz po printf v prerušenia rutinných a raz v hlavnom programe po = 1, pred Whie (1) vyhlásenia.Inak váš pulz šírka výpočte môže ísť o zlé bounderies s prepadom.? Považuje,
Laktronics

 
#
Include "D: \
Moja práca na projekte \ PIC \ 16F628 CCS \ CCP PULSE WIDTH \ CCPPW.h"

int8 capture_falling_edge;
int8 got_pulse_width;
int16 ccp_delta;

# Int_ccp1
void ccp1_isr (void)
(
statické int16 pokles;

if (capture_falling_edge)
(
setup_ccp1 (CCP_CAPTURE_RE);
capture_falling_edge = FALSE;
pokles = CCP_1;
)
iné
(
setup_ccp1 (CCP_CAPTURE_FE);
capture_falling_edge = TRUE;
ccp_delta = CCP_1 - jeseň;
got_pulse_width = TRUE;
)
)main ()
(
int16 pulse_width_ms;
got_pulse_width = FALSE;
capture_falling_edge = TRUE;
setup_ccp1 (CCP_CAPTURE_FE);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
enable_interrupts (INT_CCP1);
enable_interrupts (globálne);

while (1)
(
if (got_pulse_width)
(
disable_interrupts (globálne);
enable_interrupts (globálne);
got_pulse_width = FALSE;
pulse_width_ms = ccp_delta / 125;
printf ( "\ r% lu ms", pulse_width_ms / 2);
)
)

)hi laktronics je tu pracuje s kódom 1 CCP

 
Nazdar,
Dobrý, gratulace, som hľadal svoj názor.I všimnete, že ste hneď meranie pulzu nízka a nie je vysoký pulz,
že jo?Opäť platí,
že keď robí CCP protizáruku dostať zbaví, bude ho nie je problém dať inak impulz pre výpočet prepadu bounderies?
Pozdravy,
Laktronics

 
thanx 4 ur participatin laktronics.
ur hned som meracie nízky pulz.
a já jsem to ešte nie sú testované na prepade z timer1.coz som merať len 1ms-2ms pulz.

 

Welcome to EDABoard.com

Sponsor

Back
Top