Hallo zusammen,
habe das Problem, das der 2313 in unregelmäßiger Reihenfolge
resettet, wenn ich externe Interupts an Int0 über einen
Fototransistor (siehe schaltung) anlege.
Wo kann das herrühren?
Watchdog kann ausgeschlossen werden, ist deaktiviert!
Speisespannung kommt aus Bleiakku und ist stabil.
Kann es an der Eingangsbeschaltung des Int0 liegen?
Danke und Gruß Holger
Kann es am Programm liegen?
Gibst Du innerhalb der IR-Routine Interrupts wieder frei?
-> mehrfacher IR-Aufruf -> Stack läuft über -> Absturz -> Reset ??
1-2 100nF-Kondensatoren parallel zum 470uF solltest Du noch einbauen.
Stefan
Hallo zusammen,
schon mal Danke für die schnelle Reaktion!!
Es ist sicher, dass es ein Reset ist, da das Programm in einer Loop
läuft und nur durch Reset die LED an PD5 gesetzt wird und
beim ersten Int0 abgeschaltet wird.
Interupts werden während der IR-Routine freigegeben,
da parallel auch noch ein Timer läuft, der bei Überlauf einen
Int. auslöst und eine Variable hochzählt.
Kann es sich dann um einen "Prell-Effekt" der Lichtschranke handeln?
Gruß Holger
Hat der 2313 nicht einen Hardware-Stack? Wenn ja, hast Du mit 99.99999%
ein Softwarefehler.
Im übrigen ist Dein 7805 falsch beschaltet: Der 470uF Kondensator
gehört an den Eingang (auf die 12 Volt Seite). Zusätzlich baust Du noch
einen 100nF Kondensator zwischen VCC und GND an Dein 2313 ran. Ein
Kondensator am Ausgang des 7805 ist Blödsinn.
BEVOR Du innerhalb der IR-Routine andere IRs freigibst, musst Du den
INT0 sperren, sonst wird er mehrfach aufgerufen -> bis der Stack durch
die IR-Push-Adressen überläuft.
INT0/1 kann entweder level- oder flankengetriggert erfolgen. Im ersten
Fall bekommst Du bei Dauer-low immer wieder einen IR, im zweiten Fall
bei jeder Flanke.
Stefan
Hallo zusammen,
der Int0 ist flankengetriggert für fallende Flanke konfiguriert.
Will heißen, wenn Licht eingeschaltet wird, dann Int0.
Licht ausschalten oder eingeschaltet lassen sollte doch keine
Auswirkung haben.
Gruß Holger
Hallo zusammen,
kann es sein, dass Sprünge in Prozeduren innerhalb einer
Interrupt-Routine unzu(ver)lässig sind?
Habe zwei solcher Sprünge etwas umgebaut, sodass der Code jetzt
innerhalb der Routine abgearbeitet wird und der Fehler scheint
weg zu sein.
Übrigens programmiere ich mit AVRide.
Gruß Holger
Unzurvelässig sind solche Sprünge nicht, sondern Dein Programm ist
unzuverlässig. Du hast ganz offensichtlich einen Stack-Überlauf.
Aber wie "crazy horse" schon mal geschrieben hat, stell' doch
einfach Deinen Source hier rein. Alles andere hat keinen Wert. Wenn Du
Angst hast, dass jemand etwas abkupfert, dann musst Du alleine mit
Deinem Problem fertigwerden!
Hallo Holger,
auf die Schnelle sind mir zwei Dinge aufgefallen:
1.: Schließe mal einen 47pF-Kondensator direkt noch an Reset, andere
Seite an GND.
2.: Verwendest Du bei Deinen Interrupts auch "reti". Ein "ret" wäre
hier falsch!!!
Sonst stell' mal Dein Programm rein...
Sebastian
Hallo zusammen,
AVRide ist ein kleiner Assembler, der auch für Anfänger (wie mich)
recht einfach zu verstehen ist.
Gibt es eine Möglichkeit, vielleicht durch einen Registereintrag
festzustellen ob ein Stack-Überlauf stattgefunden hat?
Wenn ja, welches Register ist das?
Gruß Holger
Eine eigene Frage?
Dieser Thread ist über 21 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.