Interner Reset im ATMega 8 (PDIP)

Hallo NG,

nun ist es denke ich passiert! Bisher habe ich alle meine Schaltungen in denen ein AVR werkelt immer =FCber eine externe RESET-Schaltung (egal ob eigenes IC oder nur diskret =FCber Diode, Kondensator und Widerstand) resettet. Irgendwann habe ich dann geh=F6rt das es "ausreichen" soll den internen POR (Power On Reset) zu nutzen. Diese Erkenntnis habe ich dann in ein Projekt einflie=DFen lassen und so auf s=E4mtliche externe Beschaltung des Reseteingangs verzichtet..... GROBER FEHLER wie sich jetzt herausgestellt hat!

In dem Projekt, wo ich diesen Fehler gemacht habe, werden 4 gleiche Platinen auf denen jeweils ein eigener Step-Down-Wandler, AVR und ein paar Eingangsschutzschaltungen sind, =FCber ein 4-Adriges Kabel untereinander =FCber RS485 und mit einem USB zu RS485 Interface mit dem PC verbunden.

2 Leitungen des Kabels werden f=FCr RS485 und die anderen 2 Leitungen f=FCr die Spannungsversorgung 24V=3D genutzt. Das Netzteil, das die 24V Gelichspannung erzeugt, befindet sich bei dem PC an dem auch das USB zu RS485-Modul angeschlossen ist (Hintergrund: die 4 Platinen befinden sich in einem Hygeine-Bereich in dem mit sehr viel Wasser gereinigt wird und darum wollte ich dort nicht mit 230V arbeiten). Das erste Modul ist vom PC =FCber 45m Kabel entfernt am RS485-Bus angeschlossen und die folgenden Module sind dann jeweils im Abstand von jeweils 2m an den Bus angeschlossen.

Bei der ersten Inbetriebnahme des Gesamtsystems funktioniert alles einwandfrei. Ich konnte =FCber den RS485-Bus mit einer Geschwindigkeit von 56kBaud vom PC auf die einzelnen Module (mit denen lediglich Impulse gez=E4hlt werden (ca. 0,5 bis 1Hz) zugreifen. Nach kurzer Zeit konnte dann die Software auf dem PC nur noch das erste, am Bus angeschlossene, Modul automatisch durch Adressscanning erkennen.

An diesem Wochenende habe ich dann endlich Zeit gefunden dieses Problem n=E4her zu untersuchen und habe festgestellt das, wenn ich die Spannungsversorgung =FCber den Bus kurz einschalte, dann sofort wieder ausschalte, kurz warte (LED an Netzteil erlischt langsam) und dann wieder einschalte, auch die restlichen Module am Bus durch die Software auf dem PC automatisch erkannt werden.

Ich vermute nun das durch die Sequenz: Spannung einschalten, ausschalten, warten und wieder einschalten die restlichen Module erst richtig in den Reset laufen und somit richtig initialisiert werden.

Nun kann ich nat=FCrlich an dem SPI-Interface der Platine eine kleine Resetschaltung aufsteckbar nachr=FCsten aber gibt es irgend eine softwaretechnische M=F6glichkeit den AVR zum Resetten zu zwingen? Die Fuses in den AVRs sind bereits so eingestellt das von einer langsam ansteigenden Spannung ausgegangen wird und einer m=F6glichst langer Reset von 65ms intern im AVR erzeugt wird.

Liegt es vielleicht auch an die Step-Down-Wandler 24VDC -> 5VDC? Ich habe dort etwas zu gro=DFe Kondensatoren in der Eingangsschaltung und der Ausgangsschaltung. Aber warum funktioniert dann das erste Modul am Bus fehlerfrei?

F=FCr Anregungen bin ich jederzeit dankbar!

Artur

Reply to
Artur
Loading thread data ...

formatting link

"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"

Als Minimal-Beschaltung nimmt man besser einen 4k7-PullUp, oder legt den Pin direkt auf Vcc.

Ja, sicherlich. Reset-Pin offenlassen mag gehen, wenn's 'ne ganz einfache, Batteriegetriebene Schaltung ist.. Aber bei "Step-Down-Wandler, mehrere Potentialgruppen (RS485, USB), 24V, 45m Kabel" wundert mich das nicht..

Leider liegen Reset und Vcc nicht nebeneinander, sonst würde ein Jumper reichen..

Man kann den Reset-Pin auch per Fuse deaktivieren. Allerdings wird das Programmieren danach blöd -- geht nur noch im High-Voltage-Modus.

Den Watchdog-Timer benutzt du schon?

--
Thomas Kindler, mail@t-kindler.de
Reply to
Thomas Kindler

Pin

Tschuldige, ich habe vergessen zu erw=E4hnen das ich den Resetpin mit einem

10kOhm Widerstand an Vcc gelegt habe...

Stimmt, den habe ich bisher noch nicht eingeschaltet. Danke f=FCr den Tipp!

Artur

Reply to
Artur

Hallo Arthur,

Klassischer Fall von "Murphys Gesetze nicht beachtet"! Hatte ich neulich auch. Fazit: "Wenn du einen Autoreset/Reset-Taster einbaust, wird der garantiert NIE gebraucht. Du brauchtst ihn frühestens dann, wenn er definitiv wegrationalisiert wurde."

Möglicherweise könntest Du den Brown-Out-Detektor dafür missbrauchen? Damit lassen sich einige AVRs scheinbar recht zuverlässig in den Reset-Status zwingen, bis die Betriebsspannung einen bestimmten Wert stabil erreicht hat. Hat sich neulich bei einem meiner AVR-Projekte mit besonders flachem Spannungsanstieg bestens bewährt! (BOD-Fusebits, siehe Datenblatt).

Gruß,

Julien

Reply to
Julien Thomas

Artur schrieb:

Hast Du auch die "brown out" fuse "BODEN" gesetzt? Und die Fuse "BODLEVEL" passend zu Deiner Versorgungsspannung?

Au=DFerdem ist es auf jeden Fall empfehlenswert, den Reset-Pin nicht nur mit einem Pullup sondern auch mit einem Abblock- Kondensator (z.B. 100nF) nach GND zu versorgen, damit nicht St=F6rimpulse zu einem ungewollten Reset f=FChren.

Der Watchdog funktioniert =FCbrigens erst, wenn der Controller =FCberhaupt mal anf=E4ngt zu laufen, was ohne aktivierten "brown out detector" (Fuse "BODEN") nicht immer zuverl=E4ssig der Fall ist.

Gru=DF Thorsten

Reply to
Thorsten Wahn

Hmm, dann sollte es eigentlich kein Problem mit sporadischen Resets geben.. der Brownout- bzw. Power-On Reset funktionierte bei mir immer sehr zuverlässig.

Zum debuggen kann man sich direkt nach einem Reset die Bits im MCUCSR angucken.

Da gibt es einzelne Flags für Power-On Reset (sollte bei dir im Regulären Betrieb das einzige sein, was auftritt), External Reset (Einstreunung am Reset-Pin?), Brown-Out-Reset (nicht-monotoner Spannungsanstieg am Step-Down-Wandler?) und Watchdog-Reset.

Damit sollte man die Fehlerquelle gut eingrenzen können.

--
"Zuse, Zuse" sprach die Tante, als das Rechenzimmer brannte
www.microsoft-hellhounds.de, www.bredobrothers.de
Reply to
Thomas Kindler

Thorsten Wahn schrieb:

Aber das ist doch die klassische Reset-Schaltung. Beim Start ist der Kondensator leer und zieht deswegen /RESET auf GND, sobald er voll ist kommt nurnoch der Pullup zum Tragen.

Viele Grüße, Johannes

--
"Wer etwas kritisiert muss es noch lange nicht selber besser können. Es
reicht zu wissen, daß andere es besser können und andere es auch
besser machen um einen Vergleich zu bringen."     -     Wolfgang Gerber
       in de.sci.electronics
Reply to
Johannes Bauer

Thorsten Wahn wrote: > Der Watchdog funktioniert übrigens erst, wenn der Controller

Sicher?

Der ATmega8 hat schon den "Programmable Watchdog Timer with Separate On-chip Oscillator". Und es gibt die WDTON-Fuse, die den Watchdog-Timer sofort nach dem Power-On aktiviert.

--
"Zuse, Zuse" sprach die Tante, als das Rechenzimmer brannte
www.microsoft-hellhounds.de, www.bredobrothers.de
Reply to
Thomas Kindler

Thomas Kindler schrieb:

Du hast Recht. Als ATmega16-Anwender kannte ich die WDTON-Fuse nicht.

Gru=DF Thorsten

Reply to
Thorsten Wahn

Johannes Bauer schrieb:

Die "klassische" Reset-Schaltung ben=F6tigt eine gr=F6=DFere Zeitkonstante, um halbwegs zuverl=E4ssig zu funktionieren - und ohne Schmitt-Trigger ist auch da die Gefahr hoch, dass der Controller nicht richtig anl=E4uft. Die von mir genannte Beschaltung ist nur deswegen n=F6tig, um zu verhindern, dass der nach wie vor aktive - wenn auch nicht mehr benutzte - Reseteingang keinesfalls durch St=F6rimpulse ausgel=F6st werden kann. Bei Controllern, bei denen sich der Reset-Port ganz abschalten l=E4sst (z.B. bei einigen TinyAVR), ist dann auch das nicht n=F6tig.

Gru=DF Thorsten

Reply to
Thorsten Wahn

Baue da einen richtigen externen Reset ein. AVR kenne ich nicht, doch die meisten uC Hersteller brauchen Jahre, Jahrzehnte oder Jahrhunderte, bis sie POR/BOR gerafft haben. Warum auch immer. Die meinen oft, wenige oder keine Analog-Leute zu brauchen, was ein grosser Fehler ist.

Auf den WDT kann man sich nicht unbedingt verlassen, wenn der uC zu Anfang keinen gescheiten Reset hingelegt hat. Dann kann naemlich niemand wissen, wie die Bits in dessen Konfigurationsregister stehen. Dann ist das wie beim Lotto.

--
Gruesse, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

Auch eine gute Idee! werde ich ausprobieren. Ich glaube nicht das ich irgendwas an den BOD-Fuses ge=E4ndert habe.

Artur

Reply to
Artur

Ich werde das mal ausprobieren. Bisher habe ich nichts an den BOD- Fuses eingestellt.

Das w=FCrde aber dann wieder bedeuten das ich mind. einen Kondensator nachl=F6ten oder durch einen kleinen Stecker am SPI- Interface nachr=FCsten m=FCsste. Ich werde aber mal dr=FCber nachdenken.

Ich lguabe auch das der Controller nicht "richtig" losl=E4uft. In der Schaltung ist eine LED die anzeigt ob ein richtig Addressiertes Frame =FCber RS485 eintrifft. Diese LED leuchtet in den Modulen die nicht angesprochen werden k=F6nnen NIE auf... bis der Reset richtig funktioniert hat.

Reply to
Artur

Ich werde mir das mal genauer ansehen und ein paar Tests machen. Danke f=FCr die Hinweise.

Reply to
Artur

Wie schon geschrieben, ich bin gerade auf der Suche nach eine einigerma=DFen einfachen L=F6sung. Wenn die Softwarel=F6sungen (und dazu z=E4hle ich auch die L=F6sung mit dem Brown out Detektor) nicht funzen muss halt ein kleines "Huckepackplatinchen" her auf dem ich einen "richtigen" Reset baue ;-)

Vielleicht sind diese Bedenken ja durch das Posting von Thomas Kindler Zitat: "...Der ATmega8 hat schon den "Programmable Watchdog Timer with Separate On-chip Oscillator". Und es gibt die WDTON-Fuse, die den Watchdog- Timer sofort nach dem Power-On aktiviert. ..." abgedeckt.

Vielen Dank,

Artur

Reply to
Artur

Ganz so dramatisch ist es nicht. Bei den AVRs reicht ein 10K Pullup, ein Kondensator am Reset-Eingang ist nicht notwendig. Das interne Zeug (POR, BOR, ...) laeuft zuverlaessig. Wenn ungewollte ;) Resets im Betrieb auftreten, liegt das entweder an einem totalen Gagga-Layout oder die Versorgungsspannung an allen *VDD-Pins ist nicht genug geglaettet. Mein Vorgaenger hat ein Gagga-Layout kombiniert mit schweren Design-Fehlern hingelegt (Induktivitaet zwischen Digital-VCC und AVDD (Analog-VDD), aber Kerko zwischen AVDD und AVSS weggelassen ;( ), was die Serien-boards welt- weit mit Resets bedankten und das bei einem Schluesselkunden, was auch einer der Gruende ist, warum ich gerade meinen Lebenslauf auf den aktuellen Stand bringen muss ;(.

Gruss,

Steffen

Reply to
Steffen Koepf

Steffen Koepf schrieb:

In elektrisch ruhiger Umgebung ist das sicher kein Problem. Wenn es aber - wie hier - um industrielle Elektronik geht, w=FCrde ich nicht so leichtsinnig sein, einen Kondensator am Reset-Pin einzusparen. Vor allem nicht, wenn der Resetpin weitergef=FChrt wird an einen Programmierstecker (SPI- oder JTAG). ESD-Entladungen in der N=E4he der Leiterplatte k=F6nnen dann m=F6glicherweise einen Reset ausl=F6sen. Aber es sei jedem verg=F6nnt, seine eigenen =FCberraschenden EMV- Erfahrungen zu machen. (-:

Das ist auch meine Erfahrung beim ATmega16.

Da hilt dann nat=FCrlich nichts mehr. Mit viel Gl=FCck st=F6rt sich die Schaltung wenigstens nicht selbst...

Firma putt ?!?

Gru=DF Thorsten

Reply to
Thorsten Wahn

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.