Hallo Zusammen.
Ich möchte mit einem Mega32 die Frequenz eines PWM Signals bestimmen.
Die Interrupt-Ports sind schon alle belegt. Deshalb hab ich das
PWM-Signal an Port A.0 angeschlossen.
Hier der Code:
1 | ...
|
2 |
|
3 | while (1)
|
4 | { if(PINA.0==0){ // Wenn das PWM Signal Null ist ....
|
5 | lock=0; // PWMSignal war NUll
|
6 | PORTA.5=0;
|
7 | }
|
8 | if(PINA.0==1 && lock==0){ // PWM Signal ist Eins und war davor Null ...
|
9 | TCCR1B=0x02; //Timer1 Starten
|
10 | PORTA.5=1;
|
11 | lock=1;
|
12 | messure=1;
|
13 | }
|
14 |
|
15 | if(PINA.0==1 && messure==1 && lock==0){// PWM Signal ist Eins, war davor Null und die Zeitmessung wurde bei der positev Flanke davor gestartet.
|
16 | cycle_l=TCNT1L;
|
17 | cycle_h=TCNT1H;
|
18 | TCCR1B=0x00; //Timer1 Stoppen
|
19 | cycle_sum=cycle_h*256+cycle_l; // Vorläufigs Ergebnis: Schwingungsdauer = Kehrwert der Frequenz
|
20 | messure=0;
|
21 | }
|
22 |
|
23 | };
|
Ist das soweit Richtig? Hab das ganze mit dem AVR Studio und so einem
JTAGICE mkII ausprobiert. Allerding stimmen der Wert nicht(Das
PWM-Signal hat ca. 300 Hz). Liegt das vielleicht daran das der Code mit
dem AVR Studio nicht mit der wirklichen Geschwindigkeit abläuft?
Grüßle Tiffi