Frequenzmessung +Komperator

Gast #1090201
Hallo Hallo

Ich habe eine Frage zu -einem schon oft durchgekautem 
Thema-Frequenzmessung mit einem ATMEGA8.

Ich hab mich natürlich schon umgehört, die beste Varaiante is 
anscheinend über ICP. Das steht mir leider nicht zu Verfügung, denn mein 
Signal kommt auf einem AD Pin herein.

Die nächste Variante dürfte laut diversen Beiträgen die Verwendungn des 
Komperators sein. Ich habe aber dazu leider nichts näheres gefunden...

Mitterlweile hab ich mal ein Programm geschrieben, das bei einer 
positiven Flanke timer startet und bei einer negativen wieder 
abschaltet.
1
#define F_CPU 16000000 
2
#include <avr/io.h>
3
#include <avr/signal.h>
4
volatile uint8_t ovfl; 
5
ISR(TIMER0_OVF_vect)
6
{
7
   ovfl=ovfl+1;
8
   TCNT0 = 90;                 //Vorladung des Timers  
9
} 
10
int main (void) 
11
{
12
  uint16_t endw=0,fre=0;
13
  uint8_t over;
14

15
  DDRC &= ~(1<<PC3);         //PC3 Eingang
16
  PORTC |= (1<<PC3);         //PC3 Pullup 
17
  TCNT0 = 90;                //Vorladung des Timers  
18
  TIMSK |= (1<<TOIE0);       //Overflow Interrupt aktiviert 
19
  sei ();              //interrupts einschalten
20
  over=0;
21
  do
22
  {
23
    if(PIND & (1 << PD3))
24
    TCCR0 |= (1<<CS00); // Kein Prescaling, 
25
  }while(PIND & (1 << PD3));
26
  
27
  endw=TCNT2;
28
  TCCR0 &= ~(1<<CS00);  TCCR0 &= ~(1<<CS01);  TCCR0 &= ~(1<<CS02);  //Timer stoppen
29
  
30
  fre = (ovfl * (256-90)) + endw-90; 
31
  fre = fre/F_CPU;
32
  cli();  //Interrupts abschalten
33
  return 0;
34
}

Den Timer dürfte ich richtig berechnet haben, das ganze ist aber äußerst 
unsauber gelöst.
Mir gefällt zB die while schleife nicht, die mir bei jedem Durchlauf 
eine Ungenauigkeit reinbringt.

Ich würde jetzt gern in dieses Programm den Comperaotr einbauen, um mit 
Interrupts das Starten und Beenden des Timers bewirken zu können...
....hab aber keine Ahnung wie das geht^^


Ich wäre über eure Hilfe sehr dankbar.

Michael

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.