C Control PRO UNIT MEGA 32 198206 ユーザーズマニュアル

製品コード
198206
ページ / 134
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
(
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 ( 
).  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 
.
)  einschalten
word PM_Wert;
void Timer1_ISR(void)
{
    int irqcnt;
    PM_Wert=
(
0
);   
// Pulsweite messen
    irqcnt=Irq_GetCount(INT_TIM1CAPT);
}
void main(void)
{
    byte n;
    Irq_SetVect(INT_TIM1CAPT,Timer1_ISR);  
// Interrupt Service Routine
definieren
(
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
;
(ps_64);      
// Vorteiler für Messung festlegen
    while(PM_Wert==
0
);     
// Pulsbreite oder Periode messen
    Msg_WriteHex(PM_Wert);  
// Messwert ausgeben
}