www.mikrocontroller.net

Forum: Compiler & IDEs Frequenzmessung mit ATMEGA32


Autor: puma5 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
bin  uC Neuling und versuche mit einem Atmega32 eine Frequenz zu
messen.
Habe an den INT0 Eingang einen echten Frequenzgenerator angeschlossen.
Die Werte wollte ich erst mal binär auf dem PORTA ausgeben lassen.

Könntet Ihr euch evtl. mal den Quellcode ansehen, da der Ausgang
ziemlich merkwürdige Werte anzeigt...

MfG puma5

Autor: Ulli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab das hier zwar nicht getestet aber vieleicht hilft es dir weiter

#define SYSCLK   1000000
#define PRESCALE 1024
#define OVERFLOW 255  // 0...255
#define T_SCALE  ( 1 / SYSCLk)  PRESCALE  OVERFLOW //ergibt die Zeit
in Sek.
//
static unsigned char x = 0; //Toggle Variable (!könnte auch als Bit
deklariert werden)
static unsigned char xcnt = 0; //Zähler (* vieleicht besser als Int
nehmen)
//----------------------------------------------------
SIGNAL(SIG_INTERRUPT0)   //Zeit zwischen zwei Flanken messen
{

 if(x==0)            //als gesetzt markieren
 {
   x=1;
   xcnt=0;     //Zähler zurücksetzen
 }
 else        //löschen
 {
   x=0;
   PORTA = T_SCALE * xcnt; //Ausgabe als Zeit*???
 }
}
//----------------------------------------------------
SIGNAL(SIG_OVERFLOW0)
{
 if(x==1) xcnt+=1;    //wenn gesetzt Zähler inkrementieren
}
//----------------------------------------------------


/* *??? bei der Berechnung für die Ausgabe, wusste ich nicht so recht,
was du am Port anzeigen willst (die Zeit zwischen zwei Flanken?) */

int main(void)
{
init();
sei();
    while(1)
    {
      //hier passiert (noch) nichts
                }
}

mfg Ulli

Autor: puma (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schon mal
kann es leider heute nich mehr testen.
Wollte am Port A die Frequenz in Hz ausgeben.
Die messung soll zwischen zwei positiven Flanken erfolgen.
Habe ich den Zähler und die Interrupts richtig initialisiert?

GICR=0x40;  // Interruptcontrol Register externer Interrupt 0
aktiviert
MCUCR=0x03; // Selektion der Flanken hier steigende Flanke für Int 0
TCCR0=0x05; // Prescaler auf 1024 setzen
TIMSK=0x01; // Timermaskenregister Interrupt overflow freigeben

mfg Puma

Autor: Ulli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo so auf den ersten Blick denke ich schon, dass es ok ist nur ob die
Auflösung um die Frequenzen, die du damit messen willst dafür geignet
sind weiß ich nicht..

mfg Ulli

Autor: baeri3 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde damit gerne Frequenzen von ca. 1-2kHz messen, wobei +-10Hz
schon genügen würde!
Ist dass mit obigem Code möglich?

Autor: Dominik T. (dom) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde anstelle des externen Interrupts einfach die Input Capture
Funktion des Timers verwenden oder Wenn die Auflösung nicht so hoch
sein soll mit T0 oder T1 die Impulse pro Zeiteinheit zählen.

Gruß, Dominik

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.