-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 25

Thema: Programm zum Frequenzmessen

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.06.2004
    Ort
    Ulm
    Alter
    30
    Beiträge
    248

    Programm zum Frequenzmessen

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo AVR-Gemeinde,

    ist es möglich mit einem Mega32 per Software eine Fequenz zwischen 0,1 MHz und 2 MHz zu messen.

    Gibt es vielleicht sogar schon fertige Lösungen?


    Grüßle
    Sebastian

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Stichwort: Timer, Counter - Siehe Datasheet.

    mfG
    Markus

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Das müsste möglich sein, wenn man die zu messende Frequenz als Taktquelle für einen Timer benutzt.
    Ein weiterer Timer bestimmt dann noch die Torzeit der Messung.
    Es gibt aber, soweit ich das im Hinterkopf habe, eine Grenze wie hoch der Timer extern im Bezug auf den Controllertakt sein darf.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.06.2004
    Ort
    Ulm
    Alter
    30
    Beiträge
    248
    hat hierzu vielleicht irgendjemand ein Beispiel damit ich mich daran orientieren kann?
    Hab so was noch nie gemacht.

  5. #5
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Für etwas niedrigere Frequenzen, bis etwa 300 kHz, geht die Freqwunzmessung sehr gut über die ICP funktion. Man maißt da nicht die Freqwunz direkt, sondern die Periodendauer. Unter Timer ist in Wiki Bereich ein Beispielprogramm in C, allerdings mehr für niedrige Freqwunzen unter 1 kHz. Für höhere Freqwunzen solle man die Dauer von mehreren Perioden messen.
    Eine Frequenz über etwa 300 kHz müßte man das Signal runterteilen.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    @sebi87
    Ein fertiges Programm hab ich leider nicht in petto.
    Im Prinzip geht es darum einen Timer, vorzugsweise den Timer 1 mit der zu messenden Frequenz zu takten. Ich würde das ohne Vorteiler machen.
    Im Overflow Interrupt des Timers 1 wird dann eine Variable hochgezählt, die dann auch Messungen über 65536 Hz zulässt und somit als High Word dient.

    Ein anderer Timer z.B. dient als Torzeitquelle für z.B. 1sek. Der wird mit der prozessoreigenen Taktquelle gesteuert.

    Nach einer Sekunde, also wenn der Torzeittimer zugeschlagen hat wird der Zähler + Überlaufzähler ausgelesen, in eine Variable geschoben und der Timer 1 für die nächste Messung wieder auf 0 gesetzt. Diesen Programmteil würde ich auch in einem Interrupt anlegen.

    Man hat jetzt das Low und High Word der gemessenen Frequenz direkt in Hertz und kann das Ergebnis in der Hauptroutine des Programms weiter verarbeiten.

    Für etwas niedrigere Frequenzen, bis etwa 300 kHz, geht die Freqwunzmessung sehr gut über die ICP funktion.
    Das stimmt schon, hier geht es aber um 2 MHz und da wird es mit ICP schon sehr ungenau und schwierig.
    Ausserdem wir ja so bei jedem Takt der Frequenz ein Interrupt ausgelöst und blockier so den Controller.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.06.2004
    Ort
    Ulm
    Alter
    30
    Beiträge
    248
    Kann mir da jemand ne grobe Programmierstuktur geben?

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.06.2004
    Ort
    Ulm
    Alter
    30
    Beiträge
    248
    Wie muss ich das mit der Torzeit machen.
    Mir ist klar wie das Funktionieren soll, kann es nur nicht programmierne...

    Das habe ich mal Programmiert und der Zähler zählt auch die Überläufe am Timer0

    Code:
    volatile uint16_t overflow ;
    
    
    /*-- Hauptprogramm ---------------------------------------------------------------------*/
    int main(void)
    { 
    	char buffer[10] ;
    	count = 0 ;
    	overflow = 0 ; // Variable für Overflow  
    
        lcd_init() ;      // LCD aktivieren
    
    	// Timer0 auf Externen Clock Source T0 mit Rising Edge setzen --> S.86
        TCCR0 |= (1<<CS02) | (1<<CS01) | (1<<CS00) ;
    
        // Overflow Interrupt Enable --> S.87
        TIMSK |= (1<<TOIE0) ;
    
    	sei() ;
    	
    	while(1)
    	{
    	   utoa(overflow,buffer,10) ;
           set_cursor(0,1) ;
           lcd_string(buffer) ;	  
    	}                         
    
    }
    
    /*-- Timer0 Overflow Interrupt ---------------------------------------------------------*/
    SIGNAL (SIG_OVERFLOW0) 
    {
      overflow++ ;
    }
    Wenn mir jemand helfen könnte wäre ich sehr dankbar

  9. #9
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Für die Torzeit muß man noch eine genaue Verzögerung Programmieren:
    Ersr den externen timer zurücksetzen und starten, dann die genau definierte Zeit (z.B. 1 Sekunde) warten und danach den Timer Stoppen.

    Für eine Möglichst genaue Wartezeit, sollte man dafür einen 2 ten Timer nehmen, denn die man sollte das schon bis auf ein paar Zyklen genau hinkriegen. Es ist möglich das sogar wirklich zykengenau hinzukriegen, allerdings nicht ganz einfach wenn man gerade am Ende eine Überlauf Interrupt dazukriegt. Wenn man sich nicht um diesen eher seltenen Fall kümmern will, sollte man zum Zählen besser den 16 Bit Zähler nehmen, dann tritt der Fehler eher selten auf.

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.06.2004
    Ort
    Ulm
    Alter
    30
    Beiträge
    248
    Ich komm gerade irgendwie nicht weiter....
    Wie bekomme ich den Timer dazu diese Genau definierte Zeit zu messen?

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •