Forum: Mikrocontroller und Digitale Elektronik Hilfe zum Timer0 beim Atmega32


von hupe (Gast)


Lesenswert?

Hi,
ich bin totaler AVR Anfänger und habe mir ein Test-Board mit Atmega32
zugelegt. Mit Assembler kenne ich mich ein wenig aus, jedoch bekomme
ich keinen Timer Interrupt zum Laufen. Ich benutze den Timer0 und
bekomme ihn auch zum zählen, jedoch wird beim Überlauf nicht zur
Adresse für den  Timer überlauf gesprungen.
Vielleicht kann mir ja jemand weiterhelfen und mir Vielleicht die
erforderlichen Befehle schreiben. Irgendwo muss ich ja etwas vergessen
haben.
Vielen Dank im Vorraus,

die Hupe

von Rolf Magnus (Gast)


Lesenswert?

Zeig doch einfach mal deinen Code, dann wird dir bestimmt einer sagen
können, was nicht stimmt. Keine Sorge, auslachen wird dich hier keiner,
wenn der Code nicht allzu professionell aussieht.

von hupe (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe den Assembler Code mit Hilfe von anderen Beispielen aus diesem
Forum geschrieben. Allerdings kenne ich mich mit den Fuse Bits nicht so
gut (oder eher gar nicht) aus, was muss ich denn bei denen beachten?

MfG,
Hupe

von Rolf Magnus (Gast)


Lesenswert?

> Allerdings kenne ich mich mit den Fuse Bits nicht so
> gut (oder eher gar nicht) aus, was muss ich denn bei denen
> beachten?

Ich wüßte jetzt nichts, hab aber mit dem Mega32 noch nicht gearbeitet.

Was den Code betrifft: Dein Setup stellt den Timer0 ein, aber dein
Interrupt-Handler wird bei Timer1-Overflow aufgerufen.

von hupe (Gast)


Lesenswert?

Hab ich wohl irgendwann bei den ganzen herum experementieren vertauscht.
Werd es heut abend gleich mal ausprobieren. Melde mich morgen nochmal.
Vielen Dank

von hupe (Gast)


Lesenswert?

Das funktioniert trotzdem nicht. Wie ist das denn mit den fuse und
lockbits? was muss ich denn dabei beachten?

von Rolf Magnus (Gast)


Lesenswert?

> Wie ist das denn mit den fuse und lockbits?

Die kannst du am besten erstmal so lassen, wie sie ab Werk sind.
Höchstens mal JTAGEN abstellen, da sonst ein paar I/O-Ports vom
JTAG-Interface belegt sind, soweit ich weiß.

von Hannes L. (hannes)


Lesenswert?

Die Interrupt-Vektoren des Mega32 sind nicht im Wortabstand (16 Bit)
sondern im Doppelwortabstand (32 Bit). Du musst also statt rjmp jmp
verwenden. Und statt reti zwei Befehle, um das zweite Wort zu füllen.

Nachzulesen im Datenblatt des Mega32 unter Interrupt sources (oder
ähnlich)...

...

von crazy horse (Gast)


Lesenswert?

wenns aber so gemacht ist wie hier, spielt das keine Rolle.

.org $002 reti           ; IRQ0 Handler
.org $004 reti           ; IRQ1 Handler
.org $006 reti           ; IRQ2 Handler

usw.
Beachten muss man das von dir angesprochene, wenn man alle nur mit nur
einer .org-Anweisung schreibt.

von Hannes L. (hannes)


Lesenswert?

@crazy horse:

Ja, gut, dachte ich nicht dran...

Die Dinger sind übrigens gut angekommen, danke nochmals...

Bit- & Bytebruch...
...HanneS...

von hans dieter (Gast)


Lesenswert?

nimmt dir avr studio und den simulator dann siehst du ja was schief
geht...

von hupe (Gast)


Lesenswert?

Hi,
danke für eure Hilfe. Hat wirklich an der Vektor-Tabelle gelegen. Jetzt
läuft alles einwandfrei.

Danke

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.