Forum: Mikrocontroller und Digitale Elektronik Erster Versuch einer Frequenzmessung. Code korrekt?


von Tiffi (Gast)


Lesenswert?

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

von Tiffi (Gast)


Lesenswert?

... bei 300Hz und einem Timertakt von 500kHz sollte cycle_sum ja 
ungefähr 1670, oder? Aber gemessen kommt eigentlich immer ein beliebiger 
Wert raus ...

von Sascha D. (plutoonline)


Lesenswert?

Hallo, bin nur kurz über den source geflogen.
Kann es sein das Du den Timer nicht auf 0 Stellst?

von Tiffi (Gast)


Lesenswert?

Wird das nicht automtisch gemacht wenn den Timer anhalte?

von Tiffi (Gast)


Lesenswert?

Sorry, für das schlechte deutsch. Sollte den Text vielleicht noch mal 
durchlesen bevor ich auf Absenden drücke! ;-)

von Tiffi (Gast)


Lesenswert?

Eingentlich sollte das ja kein Problem sein so ein 300 Hz Signal 
einzulesen.
Der Controller sollte ja schnell genug sein,oder?

von Ulrich (Gast)


Lesenswert?

Der Timer wird nicht automatisch zurückgesetzt beim anhalten oder wieder 
starten.

von Sascha D. (plutoonline)


Lesenswert?

Und läufts jetzt?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.