www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega128 timer0 geht nicht


Autor: Jens (Gast)
Datum:

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

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja nee is klar ... bevor ein cli(); kommt hab ich auch ein sei(); ... 
daran liegts also nicht

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wo setzt du PortE als Ausgang?

MfG Spess

Autor: Jens (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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
ISR(VEKTORNAME_vect)
{}
eingeleitet. In Deinem Fall also
ISR(TIMER0_OVF_vect)
{}
INTERRUPT gabs glaub ich mal vor langer, langer Zeit für unterbrechbare 
ISRs, bin mir jetzt aber gar nicht mehr sicher...

Autor: Jens (Gast)
Datum:

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

Autor: Jens (Gast)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"interrupt.h" ist nicht obsolete, "INTERRUPT" hingegen schon. Für "ISR" 
muss auch die avr/interrupt.h eingebunden werden, sonst gehts nicht.

Autor: Peter Dannegger (peda)
Datum:

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

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.