Hallo, Ich habe hier ein kleines Programm, das mir noch den letzten Nerv Raubt. rjmp RESET ; Reset Handler rjmp INT0H ; IRQ0 Handler RETI ; PCINT0 Handler RETI ; Timer0 Overflow Handler RETI ; EEPROM Ready Handler RETI ; Analog Comparator Handler RETI ; Timer0 CompareA Handler RETI ; Timer0 CompareB Handler RETI ; Watchdog Interrupt Handler RETI ; ADC Conversion Handler RESET: LDI r16, low (RAMEND) OUT SPL, r16 ; Setzt sen StackPointer auf Anfang LDI r16, 0b00000010 OUT PORTB, r16 ; PullUp LDI r16, 0b01000000 OUT GIMSK, r16 ; Aktiviert Interupt INT0 LDI r16, 0b00000011 OUT MCUCR, r16 ; Interupt nur bei Steigender Flanke SEI Loop: inc R17 rjmp Loop INT0H: PUSH R15 IN R15,SREG ; Save SREG inc R18 OUT SREG, R15 ; Restore SREG POP R15 RETI Wenn ich im Simulator auf Pin6 Signal gebe, Wird der Interrupt gefeuert. Nach dem RETI aber nochmal! Warum? Wenn ich dann weiter Das Signal an Pin6 Änder wird es nur ein mal gefeuert. Seltsamerweise aber auch wenn ich das Signal weg nehme, obwohl ich sage, dass er nur bei Steigenden Flanken auslösen soll. Kann mir jemand die Ursache dazu nennen, oder ist das einfach nur der Simulator und der Tiny arbeitet später richtig?
Es schadet nie, wenn man den Typ des Controllers angibt. Allein schon, damit nicht nur du selbst weisst, welche Funktion Pin 6 hat.
Wie ich schon beim letzten Mal schrieb, funktioniert es mit meinem alten Simulator; der Interrupt wird beim Setzen von PINB1 genau einmal ausgelöst, beim Rücksetzen nicht.
Im postfaktischen Zeitalter muss man natürlich der komplex-verschwurbelten Simulation glauben, statt der einfachen Logik und Empirie. :) Ich würde in der Isr eine led toggeln, um zu sehen ob er 2mal feuert... allerdings entprellt, falss eine Taste der Trigger ist.
Das würde ich ja tun, wenn ich meinen Programmer ans laufen kriege! Werde wohl dass erstmal lösen müssen.
S. Landolt schrieb: > Wie ich schon beim letzten Mal schrieb, funktioniert es mit meinem alten > Simulator; der Interrupt wird beim Setzen von PINB1 genau einmal > ausgelöst, beim Rücksetzen nicht. Das schriebst du nicht, jedenfalls nicht in diesem Thread. Oder ich bin blind. Wenn du dich auf einen anderen Thread beziehst, dann solltest du ihn auch verlinken... Und übrigens: der AVR-SimulatorV1 hat bekanntermassen einen Riesenhaufen Bugs. Eigentlich hat die Emulation der Peripherie sogar nur recht wenig mit der Realität zu tun, könnte man sogar sagen. Dafür ist immerhin die MCU perfekt emuliert. Hier klemmt es wiederum an einigen Stellen beim SimulatorV2 (jedenfalls bei dem im Studio4 verfügbaren Entwicklungsstand). Er bildet aber dafür die Peripherie (soweit unterstützt) doch sehr treffend ab. Schön, wenn man wählen kann und nicht beide Eigenschaften gleichzeitig benötigt. Ansonsten wird die Arbeit mit dem Simulator echt übel. Da muss man probieren und sich ggf. selber Workarounds für die konkrete Anwendung ausdenken. D.h.: neben den üblichen release- und debug-Builds muss es u.U. noch einen speziellen simulator-Build geben. Nicht gerade schön, aber doch oft sehr hilfreich bei der Fehlersuche an anderer Stelle. Nämlich immer dann, wenn ein echter Debugger nicht mehr weiter hilft, weil man damit zwar recht zuverlässig das "Sichtbarwerden" eines Bugs detektieren kann, aber völlig aufgeschmissen ist, wenn man sich davon ausgehend sozusagen zeitlich "rückwärts" zum eigentlichen Bug durcharbeiten muss, denn dabei hilft einem ein in-circuit-Debugger exakt kein bissel weiter. Das geht nur im Simulator, wo man recht einfach ein- und dieselbe Situation beliebig oft reproduzieren kann.
Hallo, habe das selbe Problem, auch auf dem Tiny13A. Habe das ganze aber mit einer erneuten Abfrage des INT0 und einem Bit , welches beim ersten auslösen gesetzt wird beseitigen können. keine besonders elegante Lösung, aber sie funktioniert. Code ist im Anhang! (Sorry, ist zweimal der selbe..)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.