Port
_WriteBit(0,0);
Irq_SetVect(INT_TIM0MP,Timer0_ISR);
TimerT0Time(100,ps_1024);
/ / 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);
irqcnt=Irq_GetCount(INT_TIM1CAPT);
}
void
main(void)
{
byte n;
Irq_SetVect(INT_TIM1CAPT,Timwer1_ISR);
Timer_T0PWM(100,ps_64);
/ / 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);
while(PM_waarde==0);
Mag_WriteHex(PM_waarde);
}
/ / PortA.0 uitgang = 0
/ / Interrupt service routine definiëren
/ / Tijd vastleggen en timer0 starten
/ / Pulsbreedte meten
/ / Interrupt Service routine definiëren
/ / pulsgenerator starten
/ / Voordeler voor meting vastleggen
/ / Pulsbreedte of periode meten
/ / Meetwaarde afgeven
106