Forum: Mikrocontroller und Digitale Elektronik ATmega Reset Pin


von Sören (Gast)


Lesenswert?

Hallo zusammen,

der Reset Pin an meinem ATmega wird lediglich zum Programmieren benutzt 
und ist abgesehen davon nicht beschaltet. Es gibt also nur den internen 
Pull-up Widerstand. Die Leitungslänge zur Programmierbuchse beträgt 
mehrere cm.
Die Anwendung enthält auch ein sendendes Funkmodul, für das die 
Reset-Leitung evtl. eine Antenne darstellt.

Der Controller hängt sich jetzt alle paar Tage auf. Nach Neuanlegen der 
Betriebsspannung funktioniert alles wieder wie erwartet.

Die Frage: Kann es sein, dass durch Einkopplung über die Reset-Leitung 
ein undefinierter Zustand eingenommen wird?

Ich würde meinen, dass das nicht der Fall sein kann, da entweder 
sporadisch ein Reset ausgelöst wird oder eben nicht. Ein Aufhängen würde 
ich nicht erwarten.
Oder habt ihr andere Erfahrungen gemacht?

Besten Dank.
Sören

von NoPlanNoPrg (Gast)


Lesenswert?

Sören schrieb:
> Die Frage: Kann es sein, dass durch Einkopplung über die Reset-Leitung
> ein undefinierter Zustand eingenommen wird?

Nein. Es liegt an der Spannungsversorgung. Alles andere fällt in den 
Bereich der Spekulation.

von Sören (Gast)


Lesenswert?

Die Schaltung wird von einer Batterie versorgt und liegt bei > 3V mit 
einem 8MHz Quarz. Wenn gesendet wird, fällt die Spannung kurz auf 2,7V, 
was laut Datenblatt des ATmega aber im grünen Bereicht ist (8MHz bis 
2,4V).

von Wayne (Gast)


Lesenswert?

Sören schrieb:
> Die Schaltung wird von einer Batterie versorgt und liegt bei > 3V mit
> einem 8MHz Quarz. Wenn gesendet wird, fällt die Spannung kurz auf 2,7V,
> was laut Datenblatt des ATmega aber im grünen Bereicht ist (8MHz bis
> 2,4V).

Oder auch tiefer.
Wie misst du das? Multimeter oder Oszi?
Versuchs doch mal mit dem Brwon-Out-Detector, der reagiert auf 
Spannungseinbrüche und startet deinen Controller neu.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Sören schrieb:
> Der Controller hängt sich jetzt alle paar Tage auf.
Definiere "Aufhängen".

> Die Frage: Kann es sein, dass durch Einkopplung über die Reset-Leitung
> ein undefinierter Zustand eingenommen wird?
Löte einfach mal einen richtigen Pullup da ran oder wenigstens einen 
Kondensator. Kostet ja nicht viel...

> Es gibt also nur den internen Pull-up Widerstand.
Mein EMV-Spezi sagt: alles hochohmiger als 5k ist offen.
Und aus eigener Erfahrung: EMV-technisch wird deine Steuerung beim 
Burst-Test durchfallen.

> Oder habt ihr andere Erfahrungen gemacht?
Solche Effekte kommen zu über 98% von Software, die nicht mit 
"unerwarteten" Signalenwechseln (z.B. auch EMV-Spikes) oder fehlerhaften 
Übertragungsdaten (z.B. umgekipptes Bit) zurechtkommt und sich 
verheddert..

: Bearbeitet durch Moderator
von Sören (Gast)


Lesenswert?

Zur Messung verwende ich ein digitales Oszilloskop.

Der Brown-out Detector ist in der Anwendung nicht möglich, da der zuviel 
Strom frisst (Batteriebetrieb). Für einen Test wäre es evtl. aber eine 
Option.

Das Problem bei der Sache ist nur, dass es Tage dauert, bis der Fehler 
auftritt...

von Sören (Gast)


Lesenswert?

Lothar Miller schrieb:
> Sören schrieb:
>> Der Controller hängt sich jetzt alle paar Tage auf.
> Definiere "Aufhängen".
Der Controller reagiert nicht mehr auf Zustandswechsel der Eingangspins 
und zeigt auch von sich aus keine Aktivitäten (Versenden eines 
Heartbeats).

>> Die Frage: Kann es sein, dass durch Einkopplung über die Reset-Leitung
>> ein undefinierter Zustand eingenommen wird?
> Löte einfach mal einen richtigen Pullup da ran oder wenigstens einen
> Kondensator. Kostet ja nicht viel...
Kann ich mal machen.

>> Es gibt also nur den internen Pull-up Widerstand.
> Mein EMV-Spezi sagt: alles hochohmiger als 5k ist offen.
> Und aus eigener Erfahrung: EMV-technisch wird deine Steuerung beim
> Burst-Test durchfallen.
Was heisst durchfallen? Wenn dadurch ein Reset ausgelöst wird, ist das 
in dieser Anwendung in Ordnung. Es werden quasi-statische Zustände 
überwacht, die sich nur alle paar Minuten ändern. Wenn zwischendrin ein 
Reset geschieht und eine Zustandsänderung etwas verzögert erkannt wird, 
ist das kein Problem.

>> Oder habt ihr andere Erfahrungen gemacht?
> Solche Effekte kommen zu über 98% von Software, die nicht mit
> "unerwarteten" Signalenwechseln (z.B. auch EMV-Spikes) oder fehlerhaften
> Übertragungsdaten (z.B. umgekipptes Bit) zurechtkommt und sich
> verheddert..
Grundsätzlich ja. Spielt in dieser Anwendung aber keine Rolle, da nur 
gesendet wird. Trotzdem muss ich die Software nochmal genau prüfen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Sören schrieb:
> Der Brown-out Detector ist in der Anwendung nicht möglich, da der zuviel
> Strom frisst (Batteriebetrieb).

Das habe ich neulich schon mal gelesen und verstehe die Argumente immer 
noch nicht. Gerade bei Batteriebetrieb geht die Versorgung irgendwann 
unvermeidlich in den Keller und sorgt für irritierendes Verhalten des 
MC. Was glaubst du, wofür der BOD ist?

Wenn deine Schüssel zu viel Strom verbraucht, sind entweder die 
Batterien zu klein, du hast den falschen MC gewählt, oder dein Design 
ist für Batteriebetrieb schlicht ungeeignet.

von Sören (Gast)


Lesenswert?

Die Spannung wird von einem weiteren Baustein überwacht, der sowieso 
mitlaufen muss. Damit kann der Strom für die Bandgap eingespart werden.

Eine leere Batterie wird zuverlässig erkannt und ein fälliger 
Batteriewechsel angezeigt.

Das beschriebene Problem tritt bei vollen Batterien auf.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Sören schrieb:
> Wenn zwischendrin ein Reset geschieht und eine Zustandsänderung etwas
> verzögert erkannt wird, ist das kein Problem.
Jeder Reset, der nicht vom Entwickler gewollt ist, ist definitiv ein 
Problem. Es kann nur sein, dass er sich zufällig nicht problematisch 
auswirkt...

von Stefan F. (Gast)


Lesenswert?

> Die Schaltung wird von einer Batterie versorgt und liegt
> bei > 3V mit einem 8MHz Quarz. Wenn gesendet wird, fällt
> die Spannung kurz auf 2,7V

Das ist Ok. Ich habe mal Spielzeuge mit ATtiny13V gebaut, die mit CR2030 
Batterien versorgt wurden. Immer wenn eine LED leuchtete, brach die 
Spannung deutlich ein (bis runter auf 2V - mit den billigen Batterien 
von Tedi). Klappt trotzdem problemlos. Allerdings hatte ich das nur mit 
128kHz und 1Mhz Takt ausprobiert.

von Wayne (Gast)


Lesenswert?

Und wenn wir schon dabei sind, mach doch auch gleich noch den Watch Dog 
an. Dann resetet dein ATmega sobald es hängt, unabhängig davon, an was 
es lag.
Ich vermute aber ehrlich gesagt eher dass dein Program in einen Zustand 
gelangt aus dem es nicht mehr rauskommt -> Programmierfehler.
Wenn es ein Zustandsautomat ist, solltest du versuchen den jeweils 
aktuellen Zustand in EEPROM abzulegen und nach dem Abzturz auslesen 
(Dann aber ohne WD oder BOD).

von Wayne (Gast)


Lesenswert?

PS.: Kontrollierst du eigentlich auch dein Funkmodul ob es gesendet / 
empfangen hat? Und wenn ja, was passiert ein unvollständigen 
Übertragungen oder Übertragungsfehlern? Hängt es evtl. da?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sören schrieb:
> Die Schaltung wird von einer Batterie versorgt und liegt bei > 3V mit
> einem 8MHz Quarz.

Ist die Versorgung sauber abgeblockt?  (Sorry, du zeigst uns keine
Bilder vom Aufbau, sonst würde sich die Frage u. U. erübrigen.)

von Pandur S. (jetztnicht)


Lesenswert?

Den Ressetpin sollte man nit einem 10k Pullup und 100nF gegen GND 
beschalten...

von Thomas E. (thomase)


Lesenswert?

Sören schrieb:
> Der Brown-out Detector ist in der Anwendung nicht möglich, da der zuviel
> Strom frisst (Batteriebetrieb). Für einen Test wäre es evtl. aber eine
> Option.

Die P- und PA-Typen der Atmegas zeichnen sich u.a. dadurch aus, dass sie 
so konfigurierbar sind, dass der BOD im Sleep-Mode abgeschaltet wird. 
Damit wird die Batterie durch den BOD, dessen Stromverbrauch im Sleep 
verhältnismässig gross ist, nicht durch diesen zusätzlich belastet wird. 
Nach dem Aufwachen geht er bei nicht mehr ausreichender Spannung in den 
Reset und verharrt dort.

Jetzt Nicht schrieb:
> Den Ressetpin sollte man nit einem 10k Pullup und 100nF gegen GND
> beschalten...

Ja, zumindest schadet es nicht.

Wenn die Schaltung nicht mehr ständig nachprogrammiert werden muss, ist 
es das sinnvollste, den Reset fest an Vcc zu legen. Das ist über jeden 
Zweifel erhaben.

mfg.

: Bearbeitet durch User
von Sören (Gast)


Lesenswert?

Danke für alle Hinweise.

Jetzt hab ich mal einen 10k Pull-up für die Reset-Leitung eingefügt. Auf 
einen Kondensator habe ich verzichtet aus Sorge, dass dann das 
Programmieren oder debugWire Probleme macht.

Außerdem habe ich noch meinen externen BOD auf eine höhere Schwelle 
gesetzt (2,6V), was gegenüber den 2,4V Mindestspannung bei 8 MHz 
genügend Reserver bietet. Der externe BOD benötigt ~2uA gegenüber den 
~15uA des ATmega.

Die übrigen Punkte stellen kein Problem dar:
- Die Versorgung ist großzügig geblockt, Verbraucher ebenso.
- Dem Funkmodul wird ein String übergeben, der dann versandt wird.
- Eine Prüfung findet nicht statt.
- Beim nächsten Zyklus wird das Funkmodul eingeschaltet und neue Daten 
übergeben.

Was bleibt:
- Prüfung der Software auf evtl. Programmierfehler.
- Weitere Tests mit Aufzeichnung des letzten Zustands vor dem Aufhängen.
- Testweise Aktivierung des Watchdogs.

Schöne Grüße
Sören

von Paul B. (paul_baumann)


Lesenswert?

Jetzt Nicht schrieb:
> Den Ressetpin sollte man nit einem 10k Pullup und 100nF gegen GND
> beschalten...

Warum denn nit?
;-)
MfG Paul

von Peter D. (peda)


Lesenswert?

Paul Baumann schrieb:
> Warum denn nit?

Dei 100nF stören das Debugwire, falls der unbekannte AVR dieses benutzt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter Dannegger schrieb:
> Dei 100nF stören das Debugwire, falls der unbekannte AVR dieses benutzt.
Anscheinend tut er das, denn Sören schrieb:
> Auf einen Kondensator habe ich verzichtet aus Sorge, dass dann das
> Programmieren oder debugWire Probleme macht.
Das Programmieren macht mit einem 10nF Kondensaotor keine Probleme. Beim 
Debuggen schon.
Aber derselbe Sören schrieb:
>>> der Reset Pin an meinem ATmega wird lediglich zum Programmieren benutzt
Ja was denn nun? Wenn er nur zum Programmieren benutzt wird, dann muss 
der Kondensator dort hin. Und wenn man über den RST-Pin debuggen will, 
dann kann man ihn auslöten oder deaktivieren.

Und natürlich muss man den BOD einschalten. Wenn man das EEPROM 
verwendet sowieso, und bei Batteriebetrieb natürlich auch. Sonst ist das 
wie Autofahren nachts um 2 ohne Licht: kann gut gehen, muss aber 
nicht...

: Bearbeitet durch Moderator
von Pandur S. (jetztnicht)


Lesenswert?

Falls der BOD zuviel Strom zieht, gibt's externe Reset Detektoren von zB 
Microchip wie den MCP111T, der weniger als 1uA zieht

von Sören (Gast)


Lesenswert?

Momentan wird tatsächlich nur programmiert, die Option debugWire sollte 
aber offen bleiben. Aber dafür kann das C dann auch ausgelötet werden.

Aber nochmal zurück zur ursprünglichen Frage:
Wenn der Reset-Pin wie beschrieben ohne äußere Beschaltung betrieben 
wird, mit welchen Auswirkungen ist dann zu rechnen? Mehrfachnennungen 
möglich.

A keine
B sporadisches Reset
C sporadisch undefinierter Zustand

Ist es tatsächlich möglich, dass der letzte Fall auftreten kann?

von Peter D. (peda)


Lesenswert?

Die AVRs haben ein Register, wo die Resetquelle abgespeichert wird.
Ob ein externes Reset ausgelöst wurde, kann man damit erkennen.

Ich habe auch oft eine LED in der Mainloop blinken. Damit kann man 
erkennen, ob die Mainloop noch läuft und vielleicht nur ein 
Peripheriebaustein abgestürzt ist (z.B. Dein Funkmodul).

Das Programm schreibe ich auch immer so, daß nie in einer Unterfunktion 
auf etwas gewartet wird (bis zum St. Nimmerleinstag). Gibt es nichts zu 
tun, gehts zur Mainloop zurück.

von Thomas (Gast)


Lesenswert?

Sören schrieb:

> Aber nochmal zurück zur ursprünglichen Frage:


Nochmal zurück zum ursprünglichen Vorschlag:
- Mach mal ein Foto von dem Aufbau
- poste mal das Layout
- poste mal deinen Quellcode

von Dieter F. (Gast)


Lesenswert?

Sören schrieb:
> Kann es sein, dass durch Einkopplung über die Reset-Leitung
> ein undefinierter Zustand eingenommen wird?

Kann es sein, dass Du für irgendeinen (scheinbar sehr seltenen) 
Interrupt keine ISR angelegt hast?

Und wieso beschaltest Du Reset nicht einfach so, wie Atmel (AVR042) es 
empfiehlt?

Da (im ersten Satz) steht übrigens auch die Antwort auf Deine Frage:

The reset line has an internal pull-up resistor, but if the environment 
is noisy it can be insufficient and reset can
therefore occur sporadically. Refer to datasheet for value of pull-up 
resistor on specific devices.
Connecting the RESET so that it is possible to enter both high-voltage 
programming and ordinary low level reset
can be achieved by applying a pull-up resistor to the RESET line. This 
pull-up resistor makes sure that reset does
AVR Hardware Design Considerations [APPLICATION NOTE] 
Atmel-2521M-AVR-Hardware-Design-Considerations_ApplicationNote_092014
5
not go low unintended. The pull-up resistor can in theory be of any 
size, but if the Atmel AVR should be
programmed from e.g. STK®
500/AVRISP the pull-up should not be so strong that the programmer 
cannot
activate RESET by draw the RESET line low. The recommended pull-up 
resistor is 4.7kΩ or larger when using
STK500 for programming. For DebugWIRE to function properly, the pull-up 
must not be smaller than 10kΩ.
To protect the RESET line further from noise, it is an advantage to 
connect a capacitor from the RESET pin to
ground. This is not directly required since the AVR internally have a 
low-pass filter to eliminate spikes and noise
that could cause reset. Applying an extra capacitor is thus an 
additional protection. However, note that this
capacitor cannot be present if DebugWIRE or PDI is used.
If not using High Voltage Programming it is recommended to add an ESD 
protecting diode from RESET to Vcc,
since this is not internally provided due to High Voltage Programming. 
Alternatively, or in addition, a Zener diode
can be used to limit the RESET voltage relative to GND. The Zener diode 
is highly recommended in noisy
environments. The components should be located physically close to the 
RESET pin of the AVR. Figure 2-1
shows the recommended circuit on the RESET line.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Thomas schrieb:
> Nochmal zurück zum ursprünglichen Vorschlag:
> - Mach mal ein Foto von dem Aufbau
> - poste mal das Layout
> - poste mal deinen Quellcode

Nicht alles hier muss nun zwanghaft opensource sein, und wenn er
schreibt, dass genügend abgeblockt ist, dann glaub' ich das auch
mal.

von Thomas (Gast)


Lesenswert?

Jörg Wunsch schrieb:

> schreibt, dass genügend abgeblockt ist, dann glaub' ich das auch
> mal.

Dann muss es laufen! Ohne source kann man nicht prüfen was an seiner 
perfekten hardware passiert

von Dieter F. (Gast)


Lesenswert?

Sören schrieb:
> der Reset Pin an meinem ATmega wird lediglich zum Programmieren benutzt
> und ist abgesehen davon nicht beschaltet. Es gibt also nur den internen
> Pull-up Widerstand.

Jörg Wunsch schrieb:
> Nicht alles hier muss nun zwanghaft opensource sein, und wenn er
> schreibt, dass genügend abgeblockt ist, dann glaub' ich das auch
> mal

Wo schreibt er das denn?

Sören schrieb:
> Jetzt hab ich mal einen 10k Pull-up für die Reset-Leitung eingefügt. Auf
> einen Kondensator habe ich verzichtet aus Sorge, dass dann das
> Programmieren oder debugWire Probleme macht.

Da schreibt er nur, dass er einen 10K Pull-up spendiert hat - nicht 
mehr. Ob das etwas bewirkt hat wird nicht mitgeteilt ...

Ganz am Anfang schreibt er auch von einem Sender ...und einer relativ 
langen Leitung zur Programmierbuchse ...

Sören schrieb:
> Die Leitungslänge zur Programmierbuchse beträgt
> mehrere cm.
> Die Anwendung enthält auch ein sendendes Funkmodul, für das die
> Reset-Leitung evtl. eine Antenne darstellt.

von Sören (Gast)


Lesenswert?

Es ist tatsächlich so, dass ich die Schaltpläne und Quellen nicht 
veröffentlichen möchte bzw. darf.

Ich hab jetzt noch einen Kondensator mit eingebaut und lasse das ganze 
über das lange Wochenende laufen.

Eine LED für die Main Loop kommt dann noch, wenn's weiter Probleme geben 
sollte.

Was mir aber immer noch unklar ist, ob es prinzipiell überhaupt möglich 
ist, dass der uC über die mehr oder weniger offene Reset-Leitung in 
einen undefinierten Zustand geht.

Danke mal soweit. Jetzt ist erst mal Feierabend.

von mse2 (Gast)


Lesenswert?

NoPlanNoPrg schrieb:
> Sören schrieb:
>> Die Frage: Kann es sein, dass durch Einkopplung über die Reset-Leitung
>> ein undefinierter Zustand eingenommen wird?
>
> Nein. Es liegt an der Spannungsversorgung. Alles andere fällt in den
> Bereich der Spekulation.
Das ist eine kühne Behauptung! Sein kann es natürlich, müssen muss es 
aber nicht.
Es kann auch sein, dass die Firmware schlecht programmiert ist und der 
Stack ab und zu crasht (auch nur eine Möglichkeit von mehreren).

Um den Einfluss auf die Resetleitung per EMV sicher auszuschließen, 
würde ich diese einfach einmal versuchsweise auf Vcc löten und ein paar 
Tage abwarten, was passiert.

Vermuten würde ich so wenig wie Ihr, dass ein Einfluss auf der 
Resetleitung undefinierte Zustände hervorruft, aber wenn man man auf die 
Idee gekommen ist, stellt man den Verfolgungswahn am einfachsten durch 
ein ausschließendes Experiment ab, finde ich.

von Dieter F. (Gast)


Lesenswert?

Sören schrieb:
> Was mir aber immer noch unklar ist, ob es prinzipiell überhaupt möglich
> ist, dass der uC über die mehr oder weniger offene Reset-Leitung in
> einen undefinierten Zustand geht.

Dieter Frohnapfel schrieb:
> The reset line has an internal pull-up resistor, but if the environment
> is noisy it can be insufficient and reset can
> therefore occur sporadically.

Zur Not kannst Du ja Google-Sprachtools zur Übersetzung benutzen.

von Dieter F. (Gast)


Lesenswert?

Wobei - ein HW-Reset würde ja (soweit mir bekannt) komplett 
durchstarten.

Sören schrieb:
> Nach Neuanlegen der
> Betriebsspannung funktioniert alles wieder wie erwartet.

Wie nach einem HW-Reset ...

Ich tippe daher eher auf einen unbehandelten Interrupt ...

von Sören (Gast)


Lesenswert?

Vielen Dank jedenfalls und ein schönes Wochenende!

Der Threat kann geschlossen werden!

von Paul B. (paul_baumann)


Lesenswert?

Sören schrieb:
> Der Threat kann geschlossen werden!

Erst, wenn Du vom Interrupt zurück bist.
;-)
MfG Paul

von Dieter F. (Gast)


Lesenswert?

Sören schrieb:
> Der Threat kann geschlossen werden!

Schön - und was war die Ursache? Würde sicher alle Beteiligten 
interessieren ..

von NoPlanNoPrg (Gast)


Lesenswert?

Dieter Frohnapfel schrieb:
> Sören schrieb:
>> Was mir aber immer noch unklar ist, ob es prinzipiell überhaupt möglich
>> ist, dass der uC über die mehr oder weniger offene Reset-Leitung in
>> einen undefinierten Zustand geht.
>
> Dieter Frohnapfel schrieb:
>> The reset line has an internal pull-up resistor, but if the environment
>> is noisy it can be insufficient and reset can
>> therefore occur sporadically.
>
> Zur Not kannst Du ja Google-Sprachtools zur Übersetzung benutzen.

Einen Reset sehe ich nicht als einen undefinierten Zustand. Das 
Aufhängen des µC, von dem der TE im Ausgangspost schreibt ist kein Reset 
und kann sonstwo her rühren.

Ich habe keine weitere Idee dazu als alle Vorsichtsmaßnahmen und 
Schutzbeschaltungen für die Ports auszuprobieren. µC tauschen?

von Dieter F. (Gast)


Lesenswert?

NoPlanNoPrg schrieb:
> Dieter Frohnapfel schrieb:
>> Sören schrieb:
>>> Was mir aber immer noch unklar ist, ob es prinzipiell überhaupt möglich
>>> ist, dass der uC über die mehr oder weniger offene Reset-Leitung in
>>> einen undefinierten Zustand geht.
>>
>> Dieter Frohnapfel schrieb:
>>> The reset line has an internal pull-up resistor, but if the environment
>>> is noisy it can be insufficient and reset can
>>> therefore occur sporadically.
>>
>> Zur Not kannst Du ja Google-Sprachtools zur Übersetzung benutzen.

NoPlanNoPrg schrieb:
> Einen Reset sehe ich nicht als einen undefinierten Zustand. Das
> Aufhängen des µC, von dem der TE im Ausgangspost schreibt ist kein Reset
> und kann sonstwo her rühren.
>
> Ich habe keine weitere Idee dazu als alle Vorsichtsmaßnahmen und
> Schutzbeschaltungen für die Ports auszuprobieren. µC tauschen?

Schön wäre es, wenn Du vollständig zitieren würdest - es fehlt nämlich 
der Folge-Post ...

Dieter Frohnapfel schrieb:
> Wobei - ein HW-Reset würde ja (soweit mir bekannt) komplett
> durchstarten.
>
> Sören schrieb:
>> Nach Neuanlegen der
>> Betriebsspannung funktioniert alles wieder wie erwartet.
>
> Wie nach einem HW-Reset ...
>
> Ich tippe daher eher auf einen unbehandelten Interrupt ...


was ich auch schon einige Posts weiter oben bemerkt habe ..

von Dieter F. (Gast)


Lesenswert?

Lustigerweise hat sich der TO ja ausgeschaltet - das tue ich dann auch, 
da das Thema / der Post wohl beendet ist ...

Also vermute ich mal, dass ich richtig lag ... :-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sören schrieb:
> Was mir aber immer noch unklar ist, ob es prinzipiell überhaupt möglich
> ist, dass der uC über die mehr oder weniger offene Reset-Leitung in
> einen undefinierten Zustand geht.

Selbstverständlich ist es das.  Wenn er sich durch die Antenne
Spikes einfängt, die jenseits der Specs liegen, dann gibt's über
die Schutzdioden einen Impuls in die Versorgungsspannung, davon kann
schon mal ein Flipflop falsch kippen.

von Dieter F. (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Nicht alles hier muss nun zwanghaft opensource sein, und wenn er
> schreibt, dass genügend abgeblockt ist, dann glaub' ich das auch
> mal.

Jörg Wunsch schrieb:
> Sören schrieb:
>> Was mir aber immer noch unklar ist, ob es prinzipiell überhaupt möglich
>> ist, dass der uC über die mehr oder weniger offene Reset-Leitung in
>> einen undefinierten Zustand geht.
>
> Selbstverständlich ist es das.  Wenn er sich durch die Antenne
> Spikes einfängt, die jenseits der Specs liegen, dann gibt's über
> die Schutzdioden einen Impuls in die Versorgungsspannung, davon kann
> schon mal ein Flipflop falsch kippen.

Ja. S.o.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dieter Frohnapfel schrieb:
> Ja. S.o.

Das mit dem „genügend abgeblockt“ bezog ich jetzt auf die Versorgung,
denn danach hatte ich zuvor gefragt.

Dass der Reset-Pin offen ist, war ja unzweifelhaft.

von Sören (Gast)


Lesenswert?

So, jetzt ist die Schaltung fünf Tage am Stück durchgelaufen. Das ist 
mit Abstand ein Rekord!
Es sieht also ganz so aus, als ob die Maßnahmen erfolgreich waren (10k 
Pull-up Widerstand und 100nF Kondensator an der Reset-Leitung).
Alles andere blieb unverändert, es wurden auch keine neuen Batterien 
eingesetzt.
Vielen Dank nochmal für die Hinweise.

Wenn ich trotzdem weiter fragen darf:
In den Beiträgen tauchte immer wieder die Vermutung nach unbehandelten 
Interrupts auf, was grundsätzlich natürlich sein kann.
Ist es aber nicht so, dass der AVR-GCC eine default Interrupt Tabelle 
anlegt, indem jeder Interrupt-Vektor vorkommt? Oder muss dazu ein 
bestimmtes Compiler-Flag gesetzt werden?

Außerdem:
Jetzt nehmen wir mal an, dass die Batteriespannung einbricht, wenn das 
Funkmodul zu senden beginnt. Ohne weitere Maßnahmen verstolpert sich der 
Controller und hängt sich auf.
Wenn jetzt der Brown-out Detector aktiv ist, wird ein Reset ausgelöst. 
Der Controller läuft neu an bis zur gleichen Stelle, an der wieder der 
Brown-out Detector zuschlägt.
In beiden Fällen habe ich nun keine Funktion mehr. Oder anders gefragt, 
was hilft hier der Brown-out Detector?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sören schrieb:

> Es sieht also ganz so aus, als ob die Maßnahmen erfolgreich waren (10k
> Pull-up Widerstand und 100nF Kondensator an der Reset-Leitung).

Dann solltest du vielleicht ja auch noch die in der Appnote genannte
Diode (Eingang nach Vcc) mit anbringen.  Der Grund für diese Diode
ist, dass der Reset-Eingang eine solche nicht bereits integriert hat,
da er ja 12-V-fähig (für HV-Programmierung) sein muss.

> In den Beiträgen tauchte immer wieder die Vermutung nach unbehandelten
> Interrupts auf, was grundsätzlich natürlich sein kann.
> Ist es aber nicht so, dass der AVR-GCC eine default Interrupt Tabelle
> anlegt, indem jeder Interrupt-Vektor vorkommt?

Das macht nicht der Compiler, sondern der Startup-Code der
Bibliothek.  Der wiederum würde allerdings (by default) zu einem
Neustart ab Adresse 0 führen, was bei dir ja nicht der Fall war.
Insofern war der entsprechende Hinweis inkorrekt.

> In beiden Fällen habe ich nun keine Funktion mehr. Oder anders gefragt,
> was hilft hier der Brown-out Detector?

Du könntest nach dem Reset feststellen, dass der Brownout-Detektor
zugeschlagen hat und entsprechend reagieren, also gar nicht erst
wieder versuchen zu senden.

von Dieter F. (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Der wiederum würde allerdings (by default) zu einem
> Neustart ab Adresse 0 führen, was bei dir ja nicht der Fall war.
> Insofern war der entsprechende Hinweis inkorrekt.

Das sehe ich nicht so. Der unbehandelte "Bad-Interrupt" erzeugt (i.d.R., 
falls nicht anders definiert) einen Sprung an den Programmanfang.

Das Programm fängt von vorne an - und wenn der Auslöser für den 
unbehandelten Interrupt immer noch da ist wiederholt sich das bis St. 
Nimmerlein ...


Hast Du übrigens auch im Thread
Beitrag "was passiert bei Interrupt ohne Routine"
am : 24.08.2008 21:37

so geschrieben :-)

von Dieter F. (Gast)


Lesenswert?

Sören schrieb:
> In den Beiträgen tauchte immer wieder die Vermutung nach unbehandelten
> Interrupts auf, was grundsätzlich natürlich sein kann

Jetzt bin ich aber neugierig - gibt es in Deinem Programm unbehandelte 
Interrupts?

Vermutlich werde ich diesbezüglich dumm sterben ... :-(

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dieter Frohnapfel schrieb:
> Das Programm fängt von vorne an - und wenn der Auslöser für den
> unbehandelten Interrupt immer noch da ist wiederholt sich das bis St.
> Nimmerlein ...

OK, in einem solchen Falle stimmt es natürlich.

Allerdings löschen sich die meisten Interruptbedingungen beim Eintreten
in die ISR selbst.  (Der im verlinkten Beitrag genannte UART-Interrupt
ist eine der wenigen Ausnahmen in dieser Hinsicht.)

von Dieter F. (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Allerdings löschen sich die meisten Interruptbedingungen beim Eintreten
> in die ISR selbst.

Wenn es diese denn gibt - aber weder Du noch ich wissen um den - 
möglicherweise - betroffenen Interrupt.

Und bei einer "Bad Isr-Routine" - ohne RETI - würde ich nichts verwetten 
...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dieter Frohnapfel schrieb:
> Und bei einer "Bad Isr-Routine" - ohne RETI

Der RETI ist wurscht, das ist kein Z80, bei dem die Peripherie den
Opcode dechiffriert und dann die Daisy-Chain rücksetzt.  Der einzige
Effekt des RETI ist das Erlauben der Interrupts, aber das würde beim
Reinitialisieren der Applikation nach einem Sprung auf Adresse 0 durch
einen späteren SEI genauso passieren.

Sören wird sich da einfach nur Spikes eingefangen haben, die die CPU
in einen undefinierten Zustand verbracht haben.  Dafür brauchen die
keine umständlichen Interrupts erst. :-)

von Sören (Gast)


Lesenswert?

Diese Auskunft möchte ich nicht schuldig bleiben:

Für jede Interrupt-Quelle, die aktiviert wurde, gibt es auch einen 
Handler.
Allerdings keinen, der die übrigen Interrupts einfangen würde.

Also, vielen Dank nochmal!

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
Noch kein Account? Hier anmelden.