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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren