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
wenn vorhanden watchdog?? und sicher, dass es ein "RESET" ist toggel mal ein paar LEDs im Programm um herrauszufinden, wo / wann er "RESETTET"
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.
"Ein Kondensator am Ausgang des 7805 ist Blödsinn." das nicht, aber er sollte 100nF haben
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
Ich dachte Interrupts würden (zumindest in C) automatisch komplett deaktiviert, sobald eine Int-Routine aufgerufen wird?
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
und warum stellst du nicht endlich mal dein Programm ein, damit die Rätselraterei aufhört?
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
2.: Verwendest Du bei Deinen Interrupts auch "reti". Ein "ret" wäre hier falsch!!! Der Mann programmiert in c
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
HAST DU WAS AN DEN OREN???? STELL' DEIN SOURCE HIER REIN, DANN REDEN WIR WEITER!!!
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.