www.mikrocontroller.net

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


Autor: Daniel Pfefferkorn (seraphim) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
DDRA  = ALL8;        //set Portpins as Output
DDRB  = ALL8;    
DDRC  = ALL8;
TCCR0  |= (_BV(CS02)) | (_BV(WGM01)) | (_BV(WGM01)) | (_BV(COM01));
  //activation of 256-Timer0-Prescaler & FAST-PWM 
TIMSK   |= (_BV(OCIE0)) | (_BV(TOIE0));    
  //activate Timer0 Compare-Match & Overflow-Interrupt

Macros:
#define LED0      PC0
...
#define LED7      PC7

#define TGLED0() PORTC ^= _BV(LED0)
...
#define TGLED7() PORTC ^= _BV(LED7)

ISRs:
void Zehntelrun(void){
  TGLED0();
  TGLED6();
  TGLED7();
}

ISR(SIG_OVERFLOW0){
    sei();//reenable interrupts
    if (timerscaler) timerscaler--;
    else {
        timer++;
        Zehntelrun();//zehntelrun(); is executed every Millisecondcalc
        timerscaler = F_CPU/256/256/10 - 1;// should be 17 @11MHz (12 @8MHz)
    }
}
//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?

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.