Forum: Mikrocontroller und Digitale Elektronik Reproduzierbarer Reset


von Peter Schwarz (Gast)


Lesenswert?

Hallo miteinander,

ich habe da ein kleines Problem, wo ich nicht mehr weiter weiß. Die
Suche hier gestaltet sich auch etwas schwierig, da es sich um statische
Aufladung bei Teppichen handelt und da kommt halt nur 'unter den
Teppich kehren' oder 'auf dem Teppich bleiben' :)

Ich habe also eine Schaltung mit einem Atmega8, beschaltet wie es sich
so gehört mit genügend 100nf Kondensatoren-> also zwischen VCC/GND,
10k/100nf am Reset, das ganze versorgt mit einem 7805er und den
üblichen 100nf und einem 100µF. Achja, ein Programmieradapter ist auch
noch auf der Platine (und der stört mich eigentlich auch mit seinen
'freien' 6 Pins, wovon ja einer der Reset ist). Versorgt wird das
ganze mit einem Notebooknetzteil, habe allerdings auch schon
verschiedene ausprobiert, deswegen schließe ich die Dinger jetzt mal
aus.

Folgendes passiert immer (Tatort Büro - daheim mit Buchenparkett kein
Problem): sobald man die Schaltung anschließt, funktioniert alles
tadellos, Programm läuft wunderbar. Irgendwann steht man halt mal auf
und holt sich den Kaffee am Morgen. Sobald man sich von seinem Stuhl
erhebt, macht das Teil auf einmal einen Reset.

Dazu muß gesagt sein, das Netzteil liegt am Boden, die Schaltung ist
auf einer Plexiglasplatte in einem Kunststoffgehäuse montiert und steht
auf dem Schreibtisch (passiert aber auch, wenn es auf einem
Rollcontainer steht). Das einzige was am Boden liegt, ist halt die
Steckdosenleiste mit dem daran angeschlossenen Netzteil.

Somit bekommt die Schaltung also (meiner Meinung nach) nur Kontakt zur
Außenwelt über das Kabel des Netzteils.

Gibt es eine gute Idee, womit man diese 'Spikes' irgendwie vom
Prozessor fernhalten könnte ? Mir fällt da nur noch eine Spule oder
Kondensator noch ein, aber bei 20V / 2A wüßte ich nicht, wie ich da
vorgehen sollte.

Merci schon mal :)

von tubbu (Gast)


Lesenswert?

der reset muss nicht unbedingt über den resetpin ausgelöst werden.

mein beispiel-szenario: (keine ahung, ob das bei dir so sein kann,
kenne ja deine schaltung nicht)

externer interrupt ist eingeschaltet und der interrupt pin nicht
beschaltet. Wenn der entsprechende pin als Eingang geschaltet ist wird
bei einem spannungstoß ein Interrupt aufgerufen, den du aber im Code
überhaupt nicht vorgesehen hast. Dadurch kommt es zu einem Reset.

Ob das jetzt zutrifft, weiß ich nicht, aber ein solches oder ähnliches
Problem könnte eben auch der Grund sein...

von Peter Schwarz (Gast)


Lesenswert?

Danke für den Tipp, werde ich mir mal für später merken. Leider sind bei
meinem Atmega8 Int0 und Int1 beschaltet und werden auch ausgewertet. Ok,
Int0 nur solange eine DCF77 Zeit empfangen werden soll. Wenn
erfolgreich, wird Int0 wieder deaktiviert im Programm, aber
unbeschaltet sind beide nicht.

Gruss, Peter

von Bernhard S. (bernhard)


Lesenswert?

Hallo Peter,

ich kenn das Problem ;)

Bei mir in der Wohnung sorgte der Einschalt- / Ausschalt- Impuls meines
Kühlschrankes für einen regelmäßigen Absturz meiner
µC-Kühlschrank-Regelung.

Die gesamte µC Platine bestückte ich mit den verschiednartigsten
Kapazitäten, half aber nicht :(

Die Komplettabsturze waren nicht so schlimm, der µC startete wieder und
das Programm wurde vernünftig abgearbeitet.

Aber es kam auch vor, dass der µC durch diese Störimpulse in einen
undefinierten Zustand gebracht wurde
(Eingänge mutierten plötzlich zu Ausgängen).

Abhilfe:

Ein Blechgehäuse, wenn das nicht mehr möglich ist, das Plastegehäuse
von innen mit Leiterplattenmaterial "tapezieren" und dieses auf GND
legen.

Bernhard

von Profi (Gast)


Lesenswert?

Achte auch auf unbeschaltete Pins, entweder auf Ausgang schalten oder
PullUp / PullDown-Widerstände.

Eine stromkompensierte Drossel in die Versorgungsleitung legen.
Auf kurze Leiterbahnen und Leitungen achten.

R am Reset verkleinern auf 1k.

Suche im Forum nach EMV.

von Bernhard S. (bernhard)


Lesenswert?

Natürlich kann auch durch Deine Software das REGISTER MCUCSR

(Resetgrund) ausgelesen und ausgewertet werden,

aber erfahrungsgemäß sind es bei solchen Problemen meistens interne

und nicht nachvollziehbare Resets die Ursache.

Ich hoffe, Dein Reset-Pin wurde mit einem kleinen Elko (10 µF)
beschaltet?

von Peter Schwarz (Gast)


Lesenswert?

Hallo Bernhard,

der Reset Pin hat 'nur' einen 10k gegen VCC und einen 100nF Kerko
gegen GND. Zuwenig ?

von Bernhard S. (bernhard)


Lesenswert?

>der Reset Pin hat 'nur' einen 10k gegen VCC und einen 100nF Kerko
>gegen GND. Zuwenig ?

erstmal besser als garnichts, den C kannste ja mal vergrößern, wird
aber sicherlich nichts bringen ?

von Peter Schwarz (Gast)


Lesenswert?

Danke übrigens auch an die anderen mit den Tipps :) Ich werde zuerst
jetzt mal die unbenutzen Pins als Ausgänge deklarieren.

Was mir beim Atmega8 jetzt allerdings auffiel: Der PC6, also der Reset
Pin, wird der Ausgang oder Eingang im DDRx Register eingestellt.
Momentan steht er auf 1, also als Ausgang.

Merci, Peter

von Bernhard S. (bernhard)


Lesenswert?

>Was mir beim Atmega8 jetzt allerdings auffiel: Der PC6, also der >Reset
Pin, wird der Ausgang oder Eingang im DDRx Register
> eingestellt. Momentan steht er auf 1, also als Ausgang.

lass ihn so, ist ok.

PS:
Bei den Fuse-Bits kannst Du Dir den RESET-PIN deaktivieren und den
eigentlichen PC6-Pin aktivieren. Aber vorsicht, der µC lässt sich dann
nicht mehr programmieren ;)

von Rolf Magnus (Gast)


Lesenswert?

> Gibt es eine gute Idee, womit man diese 'Spikes' irgendwie vom
> Prozessor fernhalten könnte ? Mir fällt da nur noch eine Spule
> oder Kondensator noch ein, aber bei 20V / 2A wüßte ich nicht, wie
> ich da vorgehen sollte.

Dein Prozessor braucht 20V/2A? :)

> Was mir beim Atmega8 jetzt allerdings auffiel: Der PC6, also der
> Reset Pin, wird der Ausgang oder Eingang im DDRx Register
> eingestellt. Momentan steht er auf 1, also als Ausgang.

Das ist egal. Solange er per Fuse als Reset-Pin konfiguriert ist, ist
die normale Portfunktion inaktiv.

von Peter Schwarz (Gast)


Lesenswert?

Hallo,

also Reset Pin muß Reset bleiben ;) Leider habe ich keinen
HV-Programmer.
@Rolf: nö, der Proz braucht keine 20V/2A, aber die Schaltung
'drumherum' :)

Da dumme ist, daß ich das Gehäuse auch nicht mit Platinenmaterial
abschotten kann, da sich im inneren der Conrad DCF-Empfänger befindet
und der dann höchstwahrscheinlich gar nix mehr empfängt.

Aber ich werde jetzt noch heute abend mal den 10k am Reset-Pin gegen
was einen 4,7k auswechseln. Im Datenblatt vom Atmega8 mußte ich ja auch
schmunzeln, als ich gesehen habe, das im inneren ein Spike-Filter drin
sein soll - funktioniert wohl nicht so toll :)))

von Bernhard S. (bernhard)


Lesenswert?

>daß ich das Gehäuse auch nicht mit Platinenmaterial abschotten kann,

vielleicht aber die Unterseite/Oberseite des µC, bewirkt manchmal schon
Wunder ;)

Vermutlich gelangt der Störimpuls direkt in den Chip des µC und bringt
dort alles durcheinander

von Peter Schwarz (Gast)


Lesenswert?

Hallo Bernhard,

vermute ich auch, daß der dort direkt reinkommt, allein schon wegen dem
Programmieradapter auf der Platine. Das Teil ist nämlich unterhalb des
Prozessors angebracht, also am unteren Rand da wo Pin 14/15 sind (DIP
Ausführung). Somit wirkt wahrscheinlich die Leitung bis Pin1 auch schön
als 'Antenne'.
Habe auch gerade noch ein paar App-Notes von Atmel gelesen und einen
Verweis darauf, daß man im jeweiligen Datenblatt nachsehen soll, wie
groß der Pull-Up Widerstand am Reset sein soll. Beim Atmega8 steht drin
MIN 30k MAX 80k. Meinen die 30k wirklich ernst ? Wieso sagt man dann
immer, 10k ist ok, manchmal sogar vielleicht kleiner. Kann man also dem
Datenblatt nicht so vertrauen, oder ? :))

von A.K. (Gast)


Lesenswert?

"wie groß der Pull-Up Widerstand am Reset sein soll. Beim Atmega8 steht
drin MIN 30k MAX 80k."

Das ist der Wert des internen Pullup-Widerstands.

von Bernhard S. (bernhard)


Lesenswert?

>Beim Atmega8 steht drin MIN 30k MAX 80k.
>Meinen die 30k wirklich ernst ?

kommt auf den Programmieradaper drauf an,
ich nutze meistens 470 Ohm .... 1,2 K.

Wird ér zu niederohmig, dann kann der Programmieradapter den µC nicht
mehr in den Reset-Zustand versetzen.

von Jadeclaw D. (jadeclaw)


Lesenswert?

Hmm, warum nicht das Problem an der Quelle anpacken?
Z.B. Sessel und Teppich mit Antistatikspray behandeln.
Rat aus der Lötanleitung des Sinclair ZX81: "" Gehen Sie barfuß ""

Gruss
Jadeclaw.

PS: Ich habe keine derartigen Probleme, lediglich der Kühlschrank
resettet das Teil, wenn der ISP-Adapter dran ist. 10kOhm & 100nF lösten
auch dieses Problem. Kühlschrank ist 31 Jahre alt.

von Benedikt (Gast)


Lesenswert?

Kann es sein sein, dass der mega8 mit >=8MHz läuft und die CKOPT Fuse
nicht gesetzt ist ? Das liefert ähnliche Ergebnissse.

von Peter Schwarz (Gast)


Lesenswert?

Hi Benedikt,

ja, ist so, der Mega8 läuft mit 16Mhz und CKOPT ist in Ponyprog nicht
angekreuzt, somit auch nicht programmiert (Bit = 1).

Gibts da einen Zusammenhang mit dem Reset, daß sozusagen der Takt nicht
sauber ist bzw. 'in a very noice environment' betrieben wird ?

von Benedikt (Gast)


Lesenswert?

Ja, jede noch so kleine Störung bringt das Programm zum Absturz, wenn
CKOPT nicht gesetzt ist, und der Takt hoch ist.

Ich würde sogar eine Wette darauf abschließen, dass die Schaltung
problemlos läuft, wenn du CKOPT setzt...

von Der T. (Gast)


Lesenswert?

Was passiert eigendlich, wenn man CKOPT immer setzt, egal wie hoch
(niedrig) die Frequenz ist? :)

Gruß,
Techniker

von Benedikt (Gast)


Lesenswert?

Das mache ich immer, dann schwingt der Oszillator mit voller Amplitude,
also sicherer.
Dafür braucht der AVR wenige mA mehr.

von Peter Schwarz (Gast)


Lesenswert?

Auf die paar mA kommts hier nicht an :)

@Jadeclaw: wenn ich dürfte, würde ich gerne den Teppich im Büro mit
Spray behandeln, denke nur das es a)meinem Kollegen stinkt und b)
unsere Facilitymanagement was dagegen hat

Ich jetzt mal CKOPT gesetzt, mal sehen was das Teil jetzt im Büro
macht, ist jetzt direkt ein 'Nachteil' daheim mit dem schönen
Buchenparkett, nix zum reproduzieren, außer ich nehm ein Wollpulli und
einen Kunststoffstab und fahr einmal genüßlich übers Gehäuse ;)

von Bernhard S. (bernhard)


Lesenswert?

Hallo Peter, hallo Benedikt,

>Ja, jede noch so kleine Störung bringt das Programm zum Absturz, wenn
>CKOPT nicht gesetzt ist, und der Takt hoch ist.

Das ist eine sehr gute Idee!!

Peter, teste es mal, sollte dieser einfache Trick wirkungsvoll sein,
dann hat uns Benedikt jetzt schon ein schönes Ostern beschert ;)

Bernhard

von Jadeclaw D. (jadeclaw)


Lesenswert?

@Peter: Antistatik100 ist geruchsfrei und greift Oberflächen nicht an:
http://www.crcind.com/csp/web/ProdDisp.csp?lng=4&country=GE&product=ANTISTATIK%20100&brand=KOC

Gruss
Jadeclaw.

von Ssss S. (sssssss)


Lesenswert?

>@Peter: Antistatik100 ist geruchsfrei und greift Oberflächen nicht an:
Stimmt nicht ganz, Tafellack greift es an (gibt dunkle Flecken die
nicht wieder weggehen)

Bye, Simon

von Peter Schwarz (Gast)


Lesenswert?

Hallo,

also der Tipp von Benedikt scheint es wohl (bis jetzt) gewesen zu
sein.

Ich rutsche schon den ganzen vormittag hier auf meinem Stuhl rum, stehe
auf, höre es sogar knistern, aber das Teil läuft stabil. Kein Absturz
oder Reset mehr.

Ich habe auch absichtlich nur diese eine Änderung bis jetzt gemacht,
also CKOPT Fuse gesetzt, nicht zu viel auf einmal ändern mit Leitungen,
kleinerem Widerstand am Reset, 'Clamp-Diode' einbauen usw.

Vielen herzlichen Dank auf jeden Fall :)))

von Bernhard S. (bernhard)


Lesenswert?

>also der Tipp von Benedikt scheint es wohl (bis jetzt) gewesen zu
>sein.

...und wenn Du "CKOPT" wider umprogrammierst, ist dann das alte
Fehlerbild wieder da?

von Peter Schwarz (Gast)


Lesenswert?

Ja, selbes Fehlerbild wieder. Es hängt zumindest bei meiner Schaltung
mit dem CKOPT zusammen. Ich muß kleinlaut zugestehen, es ist auf
Lochraster aufgebaut schäm

Aber auf den Takt wäre ich gekommen :)

Danke Benedikt !

von Benedikt (Gast)


Lesenswert?

Was ist an Lochraster schlimm ? Ich habe schon einige Digitalschaltungen
mit über 50MHz auf Lochraster aufgebaut...

Wenn man einmal auf die CKOPT Fuse reingefallen ist, und mehrere Tage
den Fehler in der Software gesucht hat, vergisst man die CKOPT Fuse nie
mehr zu setzen.

Die Fehler sind echt merkwürdig, manchmal treten sie an den
verrücktesten Stellen auf: z.B. bestimmten Bitmuster bei den zu
verarbeitenden Daten oder ähnlichem. Da würde echt niemand auf die
CKOPT Fuse kommen.

von Peter Schwarz (Gast)


Lesenswert?

Eben, ich wär auch nicht drauf gekommen. Das Teil hat die merkwürdigsten
Sachen gemacht (Propeller-Uhr Basisstation). Mal gabs nen Reset, mal hat
sich der Motor ein- oder ausgeschaltet, mal hat das Teil weder auf die
Fernbedienung noch die Taster reagiert (lief aber munter vor sich hin,
aber tot).

Das sucht man sich wirklich einen Wolf in der Software bis man auf das
kommt.

Ich sag nur deswegen Lochraster*schäm*, weil halt einige
Kupferlackdrahtverbedingungen drauf sind, die auch nicht gerade kurz
verlaufen. Deswegen dachte ich mir erst, die Dinger wirken halt wie
gute Antennen für diese ganzen 'Hochspannungsentladungen' von dem
Teppichboden. Noch dazu hat das Teil nicht mal Kontakt zum Boden, alles
auf Plexiglas aufgebaut, die einzige Verbindung ist nur über das
Notebook-Netzteil.

Auf jeden Fall merke ich es mir ;)

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.