Hallo! Gibt es eine Möglichkeit, per SW herauszufinden, warum ein RST stattgefunden hat? für die HW fallen mir nur folgende Möglichkeiten ein: 1) Versorgung nicht konstant/sauber 2) RST-Spannung am Pin nicht konst/sauber für die SW fallen mir nur folgende Möglichkeiten ein: 1) fehlende ISR wird vers. anzuspringen Gibt es weitere Resetquellen? Oder gute Möglichkeiten, diese ausfindig zu machen?
Hi >Hallo! Gibt es eine Möglichkeit, per SW herauszufinden, warum ein RST >stattgefunden hat? Nach Reset MCUCR auslesen. MfG Spess
Dieses Register hat 4 bits (0....3), die im Datenblatt nicht beschrieben sind. Komisch. ABer es gib anscheinend noch ein Register, was so ähnlich heißt: MCUCSR. Wann kommt denn ein HW-RESET zustande? Vllt wenn der µC ein einem Pin/Port kurzzeitig zu viel Strom treibt?
Timo P schrieb: > fehlende ISR wird vers. anzuspringen ISR(BADISR_vect) { } Damit kannst du einen verselbständigten Interrupt abfangen. Sonst wird ein Sprung auf den Reset-Vektor ausgeführt. mfg.
Hi >ABer es gib anscheinend noch ein Register, was so ähnlich heißt: MCUCSR. Entschuldige, das meinte ich. >Wann kommt denn ein HW-RESET zustande? Vllt wenn der µC ein einem >Pin/Port kurzzeitig zu viel Strom treibt? Da AVRs keinen Software-Reset kennen ist alles, was den AVR in den Reset treibt, ein Hardware-Reset. MfG Spess
Hi
>In 90% der Fällen ist es jedoch ein Speicherüberlauf...
Das ist aber kein Reset.
MfG Spess
spess53 schrieb: > Das ist aber kein Reset. Stimmt, aber sieht aus Sicht der Software so aus. Genau wie das manchmal anzutreffende Makro für einen Softwarereset, wo einfach per Inline-Assembler zur Adresse 0 gesprungen wird. Das Firmware startet neu, die Hardware aber nicht.
Ein SW-REset bei AVR: goto *((void**) 0); ABer zum HW-Reset: Wodurch kann er ausgelöst werden, abgesehen vom wegnehmen der Vsg. oder Signalwechsel am RST-Pin?
Hi >Ein SW-REset bei AVR: >goto *((void**) 0); Nein. Bei einem Reset setzt der Controller die IO-Register auf Default-Werte. Und das passiert hier nicht. Vielleicht erläuterst du mal dein Problem, bevor das Rumgestochere hier noch weiter geht. MfG Spess
Mein Problem ist, dass ich einen Reset bekomme, ich aber nicht weiß, warum. Am"Anfang" des Programms gebe ich mir den RST über die UART aus. Warum ein Reset kommt, ist mir nicht klar. Mit dem µC schalte ich ein Relais über einen Transistor. Klappt eig. Wunderbar. Ab und an bekomme ich halt den RST. Ich hab das Gefühl, der Code hängt sich einfach auf. Ich nutze übrigens einen RFM12 Funktreiber hier aus dem Forum.
Nachtrag: So, wie ich das überschaue, gibt es keinen Zeitlichen Zusammenhang zwischen der Relaisansteuerung und dem Reset. Dieser kommt eher durch die einfließenden Funkdaten. (vllt.....)
Timo P schrieb: > Mein Problem ist, dass ich einen Reset bekomme, ich aber nicht weiß, > warum. ... Woher weißt Du überhaupt das ein Reset erzeugt wurde ? Nochmal zur Erinnerung : Ein Reset wird entweder durch die POR-Steuerung (Power On Reset ), durch ein Low-Signal am Reset-Pin oder durch den Watchdog hervorgerufen. Falls es zu einem Sprung zu Adresse $0 kommt, kann man nicht von einem Reset im eigentlichen Sinne reden. Also, Versorgungsspannung und Pegel am Reset-Pin aufzeichenen oder durch ein Fangschaltung feststellen, falls irgendwelche Pegel kurzzeitig unterschritten wurden. Das der Watchdog das Problem ist, ist eher unwahrscheinlich, weil dieser nur aktiv ist, wenn er fehlerfrei initialisiert wurde. Bernd_Stein
Timo P schrieb: > Ab und an bekomme ich halt den RST. Ich hab das Gefühl, der Code hängt > sich einfach auf. Ich nutze übrigens einen RFM12 Funktreiber hier aus > dem Forum. Timo P schrieb: > Nachtrag: So, wie ich das überschaue, gibt es keinen Zeitlichen > Zusammenhang zwischen der Relaisansteuerung und dem Reset. Dieser kommt > eher durch die einfließenden Funkdaten. (vllt.....) Hängt sich die Software auf oder hast du einen echten Reset und alles beginnt von vorne? Wenn es mit den Funkdaten korreliert ist es vieleicht einfach ein Softwarefehler mit einer Endlosschleife?
Was steht denn nun im MCUCSR ? Oder willst du ewig weiterraten ??
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.