- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 10

Thema: Timer2 init am Mega644 klappt einfach nicht

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.03.2013
    Ort
    Berlin
    Alter
    45
    Beiträge
    6
    Vielen Dank für die schnelle Antwort. So was ähnliches hatte ich ja befürchtet. Bei den zwei Registern kann man ja auch eigentlich nicht viel falsch machen...

    @Markus: wie kommst du auf 72kHz? Der Mega rennt mit 18,432Mhz und der PWM soll mit 1,125kHz laufen.

    Also tiefer ins Detail: Am PortD wo die OC2A&B Pin's sitzen habe ich noch den INT0 beschaltet. Der zündet den INT0_vect:
    Code:
    ISR( INT0_vect )					// Int2 liest DynamoImpulse ein
    {
    
    	if (ImpulsCheck == 0)				// kein DynamoImpuls vorweg
    	{
    		TCCR1B |= (1<<CS12) | (1<<CS10);	// Prescaler für Timer1 auf 1024 setzen,
    									// dadurch 'füllt' sich TCNT1 mit 18kHz bei 18,432Mhz Fcpu
    		ImpulsCheck=1;
    	}
    	else								// DynamoImpuls vorher kam, also Timer auswerten für Frequenzmessung
    	{
    		Timer1Register = TCNT1;			// Übergabe des Timer1 Registers an globale Var zur Verrechnung in main
    		TCNT1=1;						// Register Nullen um Messung neu zu beginnen
    	}
    	Impulse++;							// Impulse um eins erhöhen um DynamoImpulse zu zählen, daraus Strecke
    }
    Hier wird aber meiner Meinung nach nichts am PortD geändert was die beiden OC2A&B "verwirren" könnte.

    An die Variable ImpulsCheck ist eine (andere) LED gekoppelt, die bei ImpulsCheck=1 an ist, sonst eben aus. Eine einfache visuelle Kontrolle für mich:
    Code:
    	if (ImpulsCheck == 1)
    	{
    		PORTD= (1<<PD3);
    	}
    	else
    	{
    		PORTD &= ~(1<<PD3);
    	}
    So das war's was ich an PortD veranstalte. Vllt ist hier ja was bei, was den Timer nicht starten lässt. Ich komme dem Problem einfach nicht auf die Schliche
    Vielen Dank für Eure Hilfe

    MfG
    Eddy

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.698
    ... Ich komme dem Problem einfach nicht auf die Schliche ...
    Muss für den Timerstart nicht irgendwann der Timerinterrupt enabled werden ( TIMSK2 |= (1<<OCIE2A) ...) ? Die dümmste Frage will ich ja eigentlich nicht stellen: sind Interrupts global erlaubt ( sei(); ). Nix für ungut.
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    37
    Beiträge
    1.225
    Zitat Zitat von ad°FX Beitrag anzeigen
    @Markus: wie kommst du auf 72kHz? Der Mega rennt mit 18,432Mhz und der PWM soll mit 1,125kHz laufen.
    Rechenfehler meinerseits. Ich hatte nur 1,125kHz * 64 gerechnet und den Faktor von 2^8 Bit vergessen.

    Zitat Zitat von ad°FX Beitrag anzeigen
    Code:
    	if (ImpulsCheck == 1)
    	{
    		PORTD= (1<<PD3); // !!! Überschreibt PORTD komplett
    	}
    	else
    	{
    		PORTD &= ~(1<<PD3);
    	}
    Ich glaube da haben wir den Schuldigen. Du bügelst einen eigenen Wert über das vom Timer erzeugte Signal. "|=" wäre wohl eher das Mittel der Wahl.
    Edit: Der Zugriff auf PORTD kannn nicht schuld sein, der Timer hat Vorrang. Entweder du misst falsch oder der Fehler liegt an anderer Stelle.

    Zitat Zitat von oberallgeier Beitrag anzeigen
    Muss für den Timerstart nicht irgendwann der Timerinterrupt enabled werden
    Nein, der Timer läuft auch ohne Interrupts. Die sind nur Bonusprogramm.

    mfG
    Markus
    Geändert von markusj (07.03.2013 um 13:22 Uhr) Grund: Korrektur
    Tiny ASURO Library: Thread und sf.net Seite

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 25.02.2014, 12:37
  2. SD-Karte: Init + FAT-Infos geht, Sektoren auslesen nicht.
    Von Jaecko im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 30.07.2008, 19:42
  3. Displaytech 161A, beim Init geht das Display nicht aus.
    Von Sonic111 im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 1
    Letzter Beitrag: 04.11.2007, 15:53
  4. PWM funktioniert nicht in Verbindung mit Timer2
    Von IE04 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 02.11.2006, 20:01
  5. Timer2 overflow Interrupt will nicht
    Von BomberD im Forum C - Programmierung (GCC u.a.)
    Antworten: 10
    Letzter Beitrag: 30.01.2006, 16:37

Berechtigungen

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

Labornetzteil AliExpress