-         

Ergebnis 1 bis 3 von 3

Thema: Probleme mit Timern und Frequenzmessung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.09.2007
    Beiträge
    10

    Probleme mit Timern und Frequenzmessung

    Anzeige

    Hallo!
    Es gibt den Vorgänger dieses Beitrages bereits bei mikrocontroller.net. Da bin ich schon weitergekommen, jedoch nicht zum Ziel.
    Atmega32, 4 MHz.
    Ich möchte eine Frequenz von ca. 15hz - 500hz messen. Der ICP kommt nicht in Frage, da ich zwei verschiedene Signale auswerten muss und somit zwei Pins brauche.
    Ich habe mich für T0 entschieden. Dann bleibt mir immer noch T1 fürs zweite Signal. Das aber später.
    Meine Funktion sieht derzeit so aus:
    Code:
    uint16_t fSig()
    {
    	DDRB  &= ~(1<<DDB0);  //b0 als eingang
    	PORTB |= (1<<PB0);    //internen pull up aktivieren
    
    	DDRA = (1 << DDA0);	//a0 als ausgang
    
    	uint16_t Sig=0;
    
    	TCNT0 = 0; //reset timer
    	TCNT1 = 0; //reset timer
    
    	TCCR0 |= (1 <<CS02) | (1 <<CS01) | (1 <<CS00); 
                    //external clock pin 1
    	
                   TCCR1B |= (1<< CS12) | (0<<CS11) | (1 << CS10); 
                    //cpu/1024
    
    	while(TCNT1<1024) //chill and count
    	{
    		_delay_ms(189);
    		PORTA |= (1<<PA0); //a0 high
    		_delay_ms(109);
    		PORTA &= ~(1<<PA0);  //a0 low
    	}
    
    	Sig = TCNT0*240; // counted signals
    
    	TCCR0 &= ~((1 <<CS02) | (1 <<CS01) | (1 <<CS00));
    	TCCR1B &= ~((1 << CS10) | (1 << CS11) | (1 << CS12)); 
    
    	return Sig;
    }
    (Code-Tags spendiert, PicNick)


    Die Sachen in der Schleife sind übrigens nur zu Testzwecken da. Ich lege einfach pin 40 auf pin 1 um ein Eingangssignal zu simulieren bevor ich ein echtes anlege um Fehlerquellen auszuschliessen.

    Nun ist es so, dass mir die Funktion 0 ausspuckt, wenn nichts anliegt (soll sie auch). Wenn ich dann das Signal anlege, dann spuckt sie mir einen konstanten Wert aus (auch das finde ich gut). Nehme ich das Signal dann wieder weg, erhalte ich als Rückgabewert allerdings nicht wieder 0. Und das gefällt mir überhaupt nicht.
    Kann mir jemand den Fehler im Code oder im Ansatz sagen?
    Grüße!

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.111
    Ja aber stimmt der konstante Wert auch mit der Realität überein???
    Kann ich irgendwie nicht so recht glauben. Hab aber auch nicht soviel Zeit, eine bessere Beschreibung, wie das funktionieren soll, würde helfen.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    20.09.2007
    Beiträge
    10

    war die ausgabe

    Hab grad keine Zeit für ne detaillierte Beschreibung.
    Problem ist gelöst.
    Lag an der Ausgabe, nicht an der Funktion.
    Grüße!

Berechtigungen

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