Frequenzmessung mit ATMEGA32

Gast #363309
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
Angehängte Dateien:
Gast #363310
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
Gast #363311
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.