Forum: Mikrocontroller und Digitale Elektronik AVR Simulator


von Daniel (Gast)


Lesenswert?

Hallo Zusammen,

Ich bin hier grad am programmieren und bisschen mit dem AVR Simulator am 
simulieren. Installiert hab ich Atmel Studio 6. Wenn ich jetzt zb einen 
Timer overflow habe geht er auch in die ISR rein und führt sie aus nur 
das Problem ist das er kein zweites mal dort reingeht. Das selbe Problem 
besteht bei einem Pin interrupt (Logikwechsel am Pin). Ist dies ein 
allgemeines Problem des Simulators?

Gruß
Daniel

von Nachtschicht (Gast)


Lesenswert?

Daniel schrieb:
> Ich bin hier grad am programmieren und bisschen mit dem AVR Simulator am
> simulieren. Installiert hab ich Atmel Studio 6. Wenn ich jetzt zb einen
> Timer overflow habe geht er auch in die ISR rein und führt sie aus nur
> das Problem ist das er kein zweites mal dort reingeht. Das selbe Problem
> besteht bei einem Pin interrupt (Logikwechsel am Pin). Ist dies ein
> allgemeines Problem des Simulators?

Ich bin fast sicher, dass es an der Zeile 42 liegt. Schau da nochmal 
genauer hin...

von Dussel (Gast)


Lesenswert?

ret statt reti verwendet? Außerdem wollte Nachtschicht ausdrücken, dass 
ein Quelltext hilfreich sein könnte.

von Daniel (Gast)


Lesenswert?

Ähm, Quelltext? Ick hab keen Quelltext vom Simulator.

von Donald (Gast)


Lesenswert?

Deinen C Code mit dem Timer usw. meinen Dussel und Nachtschicht.

von Ein Gast (Gast)


Lesenswert?

Daniel schrieb:
> Ähm, Quelltext? Ick hab keen Quelltext vom Simulator.
Aber vielleicht von dem, was du da simulierst ...

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

Also hier mal mein code.
Aufgerufen wird der Timerinterrupt und PCINT3 Interrupt ja, halt nur 
einmal leider.
Den USART Interrupt kann ich nicht simulieren aber nich weiter schlimm.

Gruß
Daniel

von Daniel (Gast)


Lesenswert?

Also was ich grad beim Simulieren herausgefunden habe ist folgendes.
Mit dem Befehl sei(); wird das GIE bit im SREG nicht gesetzt. Mit dem 
Befehl SREG  |= (1<<SREG_I); jedoch schon. Wie kann ich das jetzt 
verstehen?
Wenn nun ein Interrupt aufgerufen wird dann wird das GIE bit im SREG 
gelöscht. D. h. weitere Interrupts sind dann gesperrt. Wieso macht der 
Simulator das?

von Spess53 (Gast)


Lesenswert?

Hi

>Wieso macht der Simulator das?

Weil der Controller das auch so macht. Am Ende einer Interruptroutine 
steht immer der Assemblerbefehl 'reti', der das I-Flag wieder 
einschaltet.

MfG Spess

von Visitor (Gast)


Lesenswert?

>Am Ende einer Interruptroutine steht immer der Assemblerbefehl 'reti',

Ich beende meine ISR-Routinen immer mit 'return' und das funktioniert 
bisher immer.

von Daniel (Gast)


Lesenswert?

Wird dieser reti Befehl automatisch ausgeführt damit das I-Flag wieder 
ein ist oder muss ich das manuell setzen?
Ich befürchte einfach das dies nur der Simulator nicht setzt auf dem µC 
selbst jedoch schon.

von Daniel (Gast)


Lesenswert?

Hat hier jemand auch schonmal das Problem gehabt, dass das I-Flag im 
SREG nach einer Interruptausführung nicht wieder aktiviert wird?
Ist dies ein Simulatorbug?

Gruß
Daniel

von Seb (Gast)


Lesenswert?

Bei mir ist das Problem auch schon aufgetreten, dass das I-Flag nach dem 
Interrupt wieder gesetzt wird. Ich vermute mal dies ist ein Fehler der 
Atmel Studio Software ;)

von Marc (Gast)


Lesenswert?

Hmm also das Problem wäre mir neu.

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.