mikrocontroller.net

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


Autor: Tiffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
...

while (1)
      { if(PINA.0==0){ // Wenn das PWM Signal Null ist ....
        lock=0;     // PWMSignal war NUll
        PORTA.5=0; 
        }  
        if(PINA.0==1 && lock==0){ // PWM Signal ist Eins und war davor Null ...
        TCCR1B=0x02; //Timer1 Starten 
        PORTA.5=1;
        lock=1;
        messure=1; 
        } 
         
        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.
        cycle_l=TCNT1L;
        cycle_h=TCNT1H;
        TCCR1B=0x00; //Timer1 Stoppen
        cycle_sum=cycle_h*256+cycle_l;  // Vorläufigs Ergebnis: Schwingungsdauer = Kehrwert der Frequenz
        messure=0; 
        } 

      };

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

Autor: Tiffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Sascha Dürkes (plutoonline)
Datum:

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

Autor: Tiffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird das nicht automtisch gemacht wenn den Timer anhalte?

Autor: Tiffi (Gast)
Datum:

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

Autor: Tiffi (Gast)
Datum:

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

Autor: Ulrich (Gast)
Datum:

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

Autor: Sascha Dürkes (plutoonline)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und läufts jetzt?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.