User manual

203 C-Control Pro Mega Series
© 2008 Conrad Electronic
void Timer1_ISR(void)
{
int irqcnt;
PM_Wert=Timer_T1GetPM(); // Pulsweite auslesen
irqcnt=Irq_GetCount(INT_TIM1CAPT);
}
void main(void)
{
byte n;
// Interrupt Service Routine definieren
Irq_SetVect(INT_TIM1CAPT,Timer1_ISR);
Timer_T0PWM(100,PS0_64); // Pulsgenerator Timer 0 starten
// die Messung beginnt hier
// Output Timer0 OC0(PortB.3) verbinden mit ICP(input capture pin, PortD.6)
PM_Wert=0;
// Pulsweite messen einstellen, Vorteiler für Messung festlegen
Timer_T1PM(0,PS_64);
while(PM_Wert==0); // Pulsbreite oder Periode messen
Msg_WriteHex(PM_Wert); // Messwert ausgeben
}
Aus Übersichtsgründen ist hier eine vereinfachte Version angegeben. Beim Mega128 wird
wegen einer Kollision auf Pin B.4 der Timer_0 zur Pulserzeugung benutzt. Das vollständige
Programm ist im Ordner PW_Messung zu finden.
6.19.6 Timerfunktionen
Es stehen zwei (Mega32) bzw. drei (Mega128) unabhängige Timer zur Verfügung. Timer_0 mit 8 Bit,
Timer_1 und Timer_3 mit 16 Bit (nur Mega128). Die Timer verfügen über einen programmierbaren
Vorteiler. Mit dem Timer läßt sich eine Zeit festlegen, nach der ein Interrupt ausgelöst wird. In der
Interruptroutine lassen sich dann bestimmte Verarbeitungsschritte ausführen.
Timer_T0Time (8 Bit)
Beispiel: Timer0: Ausgang mit einer Verzögerung von 6,94 ms (100x 69,44 µs, siehe Tabelle)
einschalten
void Timer0_ISR(void)
{
int irqcnt;
Port_WriteBit(0,1);
Timer_T0Stop() ; // Timer0 anhalten