User manual

106
Port _WriteBit(0,0); / / PortA.0 uitgang = 0
Irq_SetVect(INT_TIM0MP,Timer0_ISR); / / Interrupt service routine definiëren
TimerT0Time(100,ps_1024); / / Tijd vastleggen en timer0 starten
/ / verdere verloop programma …
}
5.3.16.5 Puls - & periodemeting
Met Timer_1 kunnen pulsbreedtes of signaalperiodes gemeten worden. Met behulp van de
Input Capture functie (speciaal register van de Controller) wordt de tijd tussen twee flanken
gemeten. Deze functie gebruikt de Capture -Interrupt (INT_TIM1CAPT). De puls wordt
gemeten tussen een stijgende en de volgende vallende flank. De periode wordt gemeten
tussen twee stijgende flanken. Door de Input Capture functie worden programma –looptijden
niet als onnauwkeurigheid in het meetresultaat ingevoegd. Met de programmeerbare
voordeler kan de resolutie van de Timer_1 vastgelegd worden. Voordeler zie Tabel.
Voorbeeld: pulsbreedte –meting 434 µ
µµ
µs (100*4,34 µ
µµ
µs, zie Tabel) inschakelen
word PM_waarde;
void Timer1_ISR(void)
{
int irqcnt;
PM_waarde=Timer_T1GetPM(0); / / Pulsbreedte meten
irqcnt=Irq_GetCount(INT_TIM1CAPT);
}
void main(void)
{
byte n;
Irq_SetVect(INT_TIM1CAPT,Timwer1_ISR); / / Interrupt Service routine definiëren
Timer_T0PWM(100,ps_64); / / pulsgenerator starten
/ / De meting begint hier
/ / Output timer0 OC0(Port B.3) verbinden met ICP (Input Capture Pin) (Port D.6)
PM_waarde=0;
Timer_T1PM(ps_64); / / Voordeler voor meting vastleggen
while(PM_waarde==0); / / Pulsbreedte of periode meten
Mag_WriteHex(PM_waarde); / / Meetwaarde afgeven
}