ATmega128 timer0 geht nicht

Gast #670046
Hallo Leute,
also ich komm mir grad n bissi doof vor, vor grauer Urzeit hab ich mal 
den Timer0 in einem AVR genutzt, jetzt wollte ich das gleiche in grün 
bei meinem neusten Projekt mit einem ATmega128 machen, aber nix tut 
sich, der Interrupt des Timer0 wird nicht einmal angesprungen, aber 
warum???
ATmega128 mit 16Mhz Quarz

Code:

im Hauptprogramm

TCCR0 = 0b00000101;  // ck/1024
TIMSK = 0x02;

cli();

...

in der ISR

INTERRUPT (SIG_OVERFLOW0)    // ISR Timer0
{
iflag++;
PORTE = PORTE | 0b00110000;
}

aber die LED am PortE bleibt auf ewig dunkel - HILFE ...
Gast #670051
den Teil wo PORTE zum Ausgang wird hab ich au irgendwie unterschlagen 
... aber wenn ich die LED manuel im Hauptprogramm anmachen funktionierts 
prima. Irgendwas habe ich wohl übersehen ... vielleicht liegts an der 
Taktquelle des Timers aber da schieb ich ned durch. An den kleinen AVRs 
liegt automatisch der Systemtakt auch am Prescaler an und alles 
funktioniert.
#670052
> TIMSK = 0x02;
Jetzt nimmst Du Dir mal das Datenblatt zur Hand und schaust nach, was Du 
da eigentlich freigegeben hast! (Kleiner Tip: Es ist nicht der 
Interrupt, für den Du eine ISR geschrieben hast...)

Warum schreibst Du das nicht mit 1<<BITNAME? Dann passieren solche 
Sachen nicht.

BTW: Schaff Dir mal ne aktuelle Version vom Compiler (bzw. der Lib) an. 
Ein Interrupt Handler wird mittlerweile mit
1
ISR(VEKTORNAME_vect)
2
{}
eingeleitet. In Deinem Fall also
1
ISR(TIMER0_OVF_vect)
2
{}
INTERRUPT gabs glaub ich mal vor langer, langer Zeit für unterbrechbare 
ISRs, bin mir jetzt aber gar nicht mehr sicher...
Gast #670056
wenn mir die Abkürzung geläufig gewesen wäre würd ich das doch glatt so 
machen. Aber mein Code hat bei einem ATtiny26 genau so prima 
funktioniert. Manchmal versteh ich die Welt wirklich nimmer.
Also nochmal ins Datenblatt gucken. 1<<TOIE0, was meiner LED allerdings 
herzlich egal zu sein scheint ... das wär dann wohl 0x01 gewesen.
Gast #670062
Johannes, Du verdienst nen großen Kaffee, mindestens ... weil s geht.
Mein Compiler is recht neu und s kommt au schon sehr lange wenn ich es 
nutze eine Meldung daß interrupt.h obsulite ist, aber bisher hat das 
alles immer brav funktioniert.
#670079
Jens wrote:
> wenn mir die Abkürzung geläufig gewesen wäre würd ich das doch glatt so
> machen. Aber mein Code hat bei einem ATtiny26 genau so prima
> funktioniert.

Der AVR ist doch kein 8051, wo Externer Interrupt0,1, Timer0,1, UART, 
P0..P3 auf 1000 Jahre festgeschrieben sind, d.h. auf jedem 8051-Derivat 
exakt gleich funktionieren.

Sobald man das AVR-Derivat wechselt, muß man immer prüfen, ob sich was 
in den IO-Registern geändert hat.

Ich bin grad dabei vom ATtiny26 auf ATtiny261 zu wechseln, weil der ja 
abgekündigt ist. Ich gehe zu 99% davon aus, daß zumindest das Hex-File 
nicht mehr läuft.


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.