Forum: Mikrocontroller und Digitale Elektronik ATmega162 springt nicht in (SIG_OVERFLOW0)


von Daniel P. (seraphim) Benutzerseite


Angehängte Dateien:

Lesenswert?

Moin!

Mein Problem ist, dass der ATmega162 mit angefügtem Code anscheinend 
nicht in die ISR SIG_OVERFLOW0 springt.

Ich will mittels der definierten Makros TGLEDX() LEDs an- bzw. 
ausschalten um  zu überprüfen, ob meine Timerverlängerung (timerscaler) 
richtig funktioniert.

Leider leuchten die LEDs nur ständig oder gar nicht. Das ist einerseits 
im STK500, andererseits in meinem Board so.

Fuses: JTAGEN, CKDIV8, ATmega161, OCDEN und Watch-Dog sind aus.

Das Problem besteht sowohl, bei externem Quarz(11,0592 MHz) als auch bei 
internem Oszillator.

Die Register sind wie folgt gesetzt:
1
DDRA  = ALL8;        //set Portpins as Output
2
DDRB  = ALL8;    
3
DDRC  = ALL8;
4
TCCR0  |= (_BV(CS02)) | (_BV(WGM01)) | (_BV(WGM01)) | (_BV(COM01));
5
  //activation of 256-Timer0-Prescaler & FAST-PWM 
6
TIMSK   |= (_BV(OCIE0)) | (_BV(TOIE0));    
7
  //activate Timer0 Compare-Match & Overflow-Interrupt

Macros:
1
#define LED0      PC0
2
...
3
#define LED7      PC7
4
5
#define TGLED0() PORTC ^= _BV(LED0)
6
...
7
#define TGLED7() PORTC ^= _BV(LED7)

ISRs:
1
void Zehntelrun(void){
2
  TGLED0();
3
  TGLED6();
4
  TGLED7();
5
}
6
7
ISR(SIG_OVERFLOW0){
8
    sei();//reenable interrupts
9
    if (timerscaler) timerscaler--;
10
    else {
11
        timer++;
12
        Zehntelrun();//zehntelrun(); is executed every Millisecondcalc
13
        timerscaler = F_CPU/256/256/10 - 1;// should be 17 @11MHz (12 @8MHz)
14
    }
15
}
16
//else branch is executed every 0.1s

Eigentlich total simpel, aber es treibt mich in den Wahnsinn.

Vielen Danke für Eure Hilfe!

P.S.: Wollte eigentlich im GCC-Forum posten, aber irgendwas ist da 
schiefgelaufen. Sollte ich einen Doppelpost riskieren?

von Niels H. (monarch35)


Lesenswert?

Im ISR-Handler muss kein sei();

Das sollte aber bevor es zu einem Interrupt kommen soll auf jeden Fall 
gemacht werden, am besten noch vor dem TIMSK-Setting.

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.