C Control PRO STARTER SET MEGA 128 198484 ユーザーズマニュアル

製品コード
198484
ページ / 200
167
Compiler
© 2005 Conrad Electronic
5.4.18.3
Frequenzmessung
Zur direkten Messung einer Frequenz, kann der Timer1(16Bit) verwendet werden. Es werden die
Pulse innerhalb einer Sekunde gezählt, und das Ergebnis ist dann in Herz. Die maximale
Meßfrequenz ist 64kHz und ergibt sich durch den 16Bit Zähler. Ein Beispiel für diese Art der
Frequenzmessung findet man unter "Demo Programme/FreqMessung". Durch Verkürzen der
Meßzeit lassen sich auch höhere Frequenzen messen. Das Ergebnis muß dann entsprechend
umgerechnet werden.
5.4.18.4
Pulsweitenmodulation
Es stehen zwei unabhängige Timer für die Pulsweitenmodulation zur Verfügung. Timer_0 mit 8 Bit und
Timer_1 mit 16 Bit. Mit einer Pulsweitenmodulation läßt sich sehr einfach ein Digital-Analog-Wandler
realisieren.
Timer0 (8 Bit)
Beispiel: Pulsweitenmodulation mit 138,9 µs Periode und 5,42 µs Pulsweite, geändert auf  10,84 µs
Pulsweite
10
,PS0_8);  
//  Puls: 10*542,5 ns = 5,42 µs, Periode: 256*542,5 ns = 138,9 µs
20
);         
//  Puls: 20*542,5 ns = 10,84 µs
Timer1 (16 Bit)
Beispiel: Pulsweitenmodulation mit 6,4 ms Periode und 1,28 ms Pulsweite Kanal A und 640 µs
Pulsweite Kanal B
10
,
20
,
10
,PS_1024); 
//  Periode: 100*69,44 µs = 6,94 ms
                                
//  PulsA: 20*69,44 µs = 1,389 ms
                                
//  PulsB: 10*69,44 µs = 694,4 µs
5.4.18.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 Meßergebnis ein. Mit dem programmierbaren
Vorteiler kann die Auflösung des Timer_1 festgelegt werden. Vorteiler siehe 
)  einschalten
word PM_Wert;
void Timer1_ISR(void)
{