www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ungewollter Reset


Autor: Holger Körber (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stackproblem?
Hardware eher nicht.

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jens123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn vorhanden watchdog??

und sicher, dass es ein "RESET" ist

toggel mal ein paar LEDs im Programm um herrauszufinden, wo / wann er
"RESETTET"

Autor: Holger Körber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael (ein anderer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Ein Kondensator am Ausgang des 7805 ist Blödsinn."

das nicht, aber er sollte 100nF haben

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich dachte Interrupts würden (zumindest in C) automatisch komplett
deaktiviert, sobald eine Int-Routine aufgerufen wird?

Autor: Holger Körber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und warum stellst du nicht endlich mal dein Programm ein, damit die
Rätselraterei aufhört?

Autor: Holger Körber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael (ein anderer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Sebastian Wille (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
2.: Verwendest Du bei Deinen Interrupts auch "reti". Ein "ret" wäre
hier falsch!!!



Der Mann programmiert in c

Autor: Holger Körber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael (ein anderer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HAST DU WAS AN DEN OREN???? STELL' DEIN SOURCE HIER REIN, DANN REDEN
WIR WEITER!!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.