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!
Hast du die üblichen 100nf Kerkos am Controller verbaut? Ansonsten wäre ein Schaltplan in solchen Situation immer sehr hilfreich ;o)
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.
Ü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?
Ohne Schaltplan oder Layout nicht wirklich beantwortbar. Ohne den Source Code kann man auch Programmierfehler nicht ausschliessen...
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.