Forum: Mikrocontroller und Digitale Elektronik C8051F020 Reset immer wieder


von Peng (Gast)


Lesenswert?

Hallo,

ich arbeite momentan mit dem C8051F020 Mikrocontroller der Marke Silabs.
Ich baue ein Roboterauto, dass innerhalb eines Quadrats einer Linie 
folgt (die Linien sind der Rahmen des Quadrats).
Wenn das Auto eine Querlinie erkennt, macht es eine Linkskurve und folgt 
anschließend wieder der Linie.

Nun habe ich aber das Problem, dass der Controller immer wieder einen 
Reset auslöst.
Das passiert zufällig (kein gewisses Schema erkennbar) und oft auch 
mehrmals hintereinander.
Der Watchdog-Timer is disabled. Das Problem besteht auch, wenn alle 
Interrupts und das Globale Interrupt disabled sind.

Ich habe mir auch schon gedacht, dass es mit der Spannungsversorgung 
zusammenhängen könnte.
Habe dann den Controller nicht mit der Batterie (ca. 10V aus 
AAA-Batterien, die mit einem LM2596 DC-Converter auf 3,3V runtergeregelt 
werden),
sondern auch mit einem DC-Generator versorgt. Kein Erfolg.
Habe außerdem auch schon versucht, die Versorgungsspannung mit einem 
Elko zu puffern (1000uF, 50V), ebenfalls nutzlos.

Hat von euch jemand eine Idee was die Ursache für das Problem sein 
könnte?
Vielen Dank schonmal!

von Markus S. (acepilot)


Lesenswert?

Hast du die üblichen 100nf Kerkos am Controller verbaut?
Ansonsten wäre ein Schaltplan in solchen Situation immer sehr hilfreich 
;o)

von Peter D. (peda)


Lesenswert?

Peng schrieb:
> Nun habe ich aber das Problem, dass der Controller immer wieder einen
> Reset auslöst.

Oftmals haben MCs einige Bits, die sich merken, welche Resetquelle den 
Reset ausgelöst hat. Die laß Dir anzeigen.

von GB (Gast)


Lesenswert?

Überschreibst Du Dir vielleicht den Stack und damit eine 
Rücksprungadresse, so dass der Prozessor irgendwo ins Nirvana springt 
und dann so lange seine Adresse hochzählt, bis er wieder bei Null 
angekommen ist?

von Michael W. (michelw)


Lesenswert?

Vielleicht Watchdog nicht disabled?

von Jim M. (turboj)


Lesenswert?

Ohne Schaltplan oder Layout nicht wirklich beantwortbar. Ohne den Source 
Code kann man auch Programmierfehler nicht ausschliessen...

von Ralf (Gast)


Lesenswert?

Hi,

deine Beschreibung der Hardware lässt vermuten, dass sie noch 
verbesserungswürdig ist (z.B. die Sache mit den Pufferkondensatoren => 
nicht nur dicke Caps verwenden, auch 100nF haben zusätzlich ihre 
Daseinsberechtigung). Desweiteren wäre interessant zu wissen, wie das 
Resetsignal beschaltet ist. Was sind denn für Motoren verbaut bzw. wie 
werden diese versorgt? => Schaltplan!

Peter hat es schon angedeutet, lass dir mal den Status des 
RSTSRC-Registers nach so einem Reset geben.

Wenn du Interrupts etc. deaktiviert und auch den Komparator als 
Resetquelle deaktiviert hast, kommt ein verkorkster Stack eigentlich nur 
bei Assemblerprogrammierung infrage oder wenn du einen verbeulten 
Pointer hast - aber das wurde auch bereits erwähnt, ohne den Code zu 
kennen ist das schwer zu beurteilen.

Ralf

von Michael W. (michelw)


Lesenswert?

Hallo,
hatte das mit dem Watchdog überlesen.
Aber ich hatte mal ein ähnliches Problem. Die Lösung war das ich den 
Stack in der Subroutine überschrieben hatte. Leg den Stack doch mal 
woanders hin.
Vielleicht postest Du mal den Code?

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.