Forum: Mikrocontroller und Digitale Elektronik Atmega8 OVF0addr Interrupt tritt nicht auf


von Christian F. (sunsetip)


Lesenswert?

Also das Programmieren von µC ist noch ziemliches Neuland für mich und 
nun stehe ich grade vor einem Problem. Ich bin grade dabei mich ein 
wenig mit dem Timer zu beschäftigen und dazu habe ich mich mal an dieser 
Anleitung orientiert: 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Interrupts

Nun hab ich einen kleinen Code zurecht gebastelt aber irgendwie hat das 
nicht so funktioniert, wie ich mir das vorgestellt habe, deshalb habe 
ich mir folgenden Code auf dieser Seite einfach mal ins AtmelStudio 
kopiert:
1
.include "m8def.inc"
2
 
3
.def temp = r16
4
.def leds = r17
5
 
6
.org 0x0000
7
        rjmp    main                  ; Reset Handler
8
.org OVF0addr
9
        rjmp    timer0_overflow       ; Timer Overflow Handler
10
 
11
main:
12
        ; Stackpointer initialisieren
13
        ldi     temp, HIGH(RAMEND)
14
        out     SPH, temp
15
        ldi     temp, LOW(RAMEND)     
16
        out     SPL, temp
17
 
18
        ldi     temp, 0xFF            ; Port B auf Ausgang
19
        out     DDRB, temp
20
 
21
        ldi     leds, 0xFF
22
 
23
        ldi     temp, (1<<CS00)       ; CS00 setzen: Teiler 1
24
        out     TCCR0, temp
25
 
26
        ldi     temp, (1<<TOIE0)      ; TOIE0: Interrupt bei Timer Overflow
27
        out     TIMSK, temp
28
 
29
        sei
30
 
31
loop:   rjmp    loop
32
 
33
timer0_overflow:                      ; Timer 0 Overflow Handler
34
        out     PORTB, leds
35
        com     leds
36
        reti

Allerdings gibt es da das Problem, dass beim Timer-Überlauf einfach 
nicht an die Interrupt-Adresse OVF0addr gespungen wird (weder im 
Simulator noch beim Test mit einem richtigen µC), hat möglicherweise 
jemand eine Idee, woran das liegen könnte?

von spess53 (Gast)


Lesenswert?

Hi

>Allerdings gibt es da das Problem, dass beim Timer-Überlauf einfach
>nicht an die Interrupt-Adresse OVF0addr gespungen wird (weder im
>Simulator noch beim Test mit einem richtigen µC), hat möglicherweise
>jemand eine Idee, woran das liegen könnte?

Im Simulator vom 4er Studio funktioniert es problemlos.

MfG Spess

von Christian F. (sunsetip)


Lesenswert?

> Im Simulator vom 4er Studio funktioniert es problemlos.
>
> MfG Spess

Ich hab das AtmelStudio 6 aber ich finde es schon merkwürdeig, dass es 
weder im Simulator, noch auf nem richtigen µC funktioniert.

von Thomas E. (thomase)


Lesenswert?

Christian Franken schrieb:
>> Im Simulator vom 4er Studio funktioniert es problemlos.
>>
>> MfG Spess
>
> Ich hab das AtmelStudio 6 aber ich finde es schon merkwürdeig, dass es
> weder im Simulator, noch auf nem richtigen µC funktioniert.

Zu Studio6 und seinem Simulator kann ich nichts sagen. Aber ein 
beliebter Fehler ist es, das falsche Hex-File zu flashen.

mfg.

von spess53 (Gast)


Lesenswert?

Hi

Woran erkennst, das es auf dem Controller nicht funktioniert. Ein 
Blinken kannst du nicht erwarten.

>Ich hab das AtmelStudio 6 aber ich finde es schon merkwürdeig, dass es
>weder im Simulator, ...

Für Assembler brauchst du kein 6er Studio. Nimm das AVR Studio 4.19 von 
hier:

http://www.atmel.com/tools/studioarchive.aspx

MfG Spess

von Bitflüsterer (Gast)


Lesenswert?

Naja, so einfach ist das alles nicht, dass Du die Flinte schon in's Korn 
werfen musst; sprich: Annehmen, das es schlicht nicht geht.

1. Es ist nicht unüblich, das gewisse Details im Simulator nicht 
funktionieren. Das war im AVRStudio 4 so und das wird auch in 6 so sein 
(das ich auch nicht benutze). Was das AVRStudio 6 betrifft, kann Du hier 
nur ein User helfen, der das auch benutzt. Aber es lohnt sich 
vielleicht doch, das Du mal genau schreibst, auf welche Weise Du 
feststellst, das es im Simulator nicht geht. Es kommt dann doch recht 
häufig vor, das Anfänger etwas erwarten, das so nicht geschieht.

2. Ein Code der im AVR 4 Simulator geht, wird sehr wahrscheinlich im 
echten Chip auch gehen. Dein Problem wird ganz andere Gründe haben. Zu 
allererst wieder die Frage, auf welche Weise Du feststellst, das es 
nicht geht. Falls Du ein für Dich wahrnehmbares Blinken erwartest, 
könnte es sein, das das ein Irrtum ist. Rechne mal die Blinkfrequenz 
aus.

von H.Joachim S. (crazyhorse)


Lesenswert?

Hast du denn in der Realität mit nem Oszi geschaut oder nur die LEDs 
leuchten sehen?

von Detlef K. (adenin)


Lesenswert?

Ich kann bestätigen, das es im 4er super läuft.
Hast Du tatsächlich den richtigen CPU-Typ im Simulator gewählt?
Auf welche Adresse sprint er denn?

von Christian F. (sunsetip)


Lesenswert?

Peinlich peinlich... ich muss irgendwo einen Fehler in der Schaltung 
gehabt haben. Ich hab jetzt mal nur die Grundschaltung aufgebaut und da 
hat alles funktioniert und dann habe ich alles andere drumherum gebaut 
und siehe da, es funktioniert jetzt alles so wie es soll... Nur im 
Simulator funktioniert es immer noch nicht (der Timer zählt zwar, aber 
bei einem Overflow wird einfach nicht zum Interrupt gesprungen, obwohl 
das TOV0-Bit gesetzt wird) aber was solls... Meine Schaltung 
funktioniert jetzt.

Ich bedanke mich trotzdem für eure Anteilnahme.

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.