User manual
111 C-Control Pro Mega 32
© 2005 Conrad Electronic
void
main(
void
)
{
Port_DataDirBit(
0
,
0
);
// PortA.0 Ausgang
Port_WriteBit(
0
,
0
);
// PortA.0 Ausgang=0
Irq_SetVect(INT_TIM0COMP,Timer0_ISR);
// Interrupt Service Routine
definieren
Timer_T0Time
(
100
,ps_1024);
// Zeit festlegen und Timer0
starten
// weiterer Programmablauf...
}
5.3.16.5 Puls & Periodenmessung
Mit dem
Timer_1
können Pulsweiten oder Signalperioden gemessen werden. Es wird mit Hilfe der
Input Capture Funktion (spezielles Register des Controllers) die Zeit zwischen zwei Flanken
gemessen. Diese Funktion nutzt den Capture-Interrupt (
INT_TIM1CAPT
). Der Puls wird
zwischen einer steigenden und der nächsten fallenden Signalflanke gemessen. Die Periode wird
zwischen zwei steigenden Signalflanken gemessen. Durch die Input Capture Funktion gehen
Programmlaufzeiten nicht als Ungenauigkeit in das Messergebnis ein. Mit dem programmierbaren
Vorteiler kann die Auflösung des
Timer_1
festgelegt werden. Vorteiler siehe
Tabelle
.
Beispiel: Pulsbreitenmessung 434 µs (100 x 4,34 µs, siehe
Tabelle
) einschalten
word
PM_Wert;
void
Timer1_ISR(
void
)
{
int
irqcnt;
PM_Wert=
Timer_T1GetPM
(
0
);
// Pulsweite messen
irqcnt=Irq_GetCount(INT_TIM1CAPT);
}
void
main(
void
)
{
byte
n;
Irq_SetVect(INT_TIM1CAPT,Timer1_ISR);
// Interrupt Service Routine
definieren
Timer_T0PWM
(
100
,ps_64);
// Pulsgenerator starten
// die Messung beginnt hier
// Output Timer0 OC0(PortB.3) verbinden mit ICP (input capture pin) (PortD.6)
PM_Wert=
0
;
Timer_T1PM
(ps_64);
// Vorteiler für Messung festlegen
while
(PM_Wert==
0
);
// Pulsbreite oder Periode messen
Msg_WriteHex(PM_Wert);
// Messwert ausgeben
}