Forum: Mikrocontroller und Digitale Elektronik Timer3 bei ATmega128 konfigurieren


von Ralf (Gast)


Lesenswert?

Hallo

Ich versuche den Timer3 des ATmega so zu konfigurieren, dass er keine 
Aktionen an den OCR3n Pins ausgibt, sondern nur intern hochzählt und 
periodisch einen software Interrupt auslöst...aber ich komm nicht drauf 
warum das bei mir nicht klappt.

Mein Code:
1
  OCR3A = 20000;                 //Maximum value for TCNT3
2
3
  TCCR3A &= ~( (1<<COM3A1) | (1<<COM3A0) ); //Normal port operation, OC3A disconnected
4
  TCCR3A |= (1<<WGM32);      //CTC mode
5
  TCCR3B |= (1<<CS31);                  //Prescaler 8 
6
  TIMSK |= (1<<OCIE3A);             //Interrupts enable
7
8
...
9
10
ISR(TIMER3_COMPA_vect)
11
{
12
  if(PINB & (1<<PB6))
13
        PORTB &= ~(1<<PB6);
14
  else
15
    PORTB |= (1<<PB6);
16
}

Wo ist da der Haken?

Also zuerst setze ich den Maximalwert, dann lösche ich (explizit) die 
Bits COM3A1 und COM3A0, damit der OC3A-Pin nicht ins Timer-geschehen 
eingreift. Mit WGM32 auf 1 aktiviere ich noch den CTC Mode mit 
Maximalwert für TCNT bei OCR3A. Anschließend noch der Prescaler und das 
Interrupt aktivieren.

Ich sehe da einfach keinen Fehler.

von Ralf (Gast)


Lesenswert?

Ich wollte sagen: Der Timer des ATmega128 !

von Ralf (Gast)


Lesenswert?

Oh man, ich sollte wirklich eine Pause einlegen...
Ich habe ja ganz vergessen was bei mir nicht geht:

Also ich messe an dem Pin, der eigentlich durch den SW-Interrupt toggeln 
soll keine Aktion. Er geht anscheinend nicht in die Routine rein...auch 
wenn ich andere Pins verwende bleiben diese tot.

von Magnus Müller (Gast)


Lesenswert?

sei();  <--- vergessen?!?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.