PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mega32 mit Software reseten



jeffrey
05.05.2006, 14:46
Hi,
ich habe ein Problem, und zwar möchte ich meine Mega32 nachdem ein Interrupt aufgetreten ist resete. Allerdings kann ich nicht den Watchdog verwenden, da ich den zur Programmüberwachung verwende, oder ist es möglich die Zeit für den Reset durch den Watchdog im Programm zu ändern. Er ist nämlich auf 2s eingestellt, nachdem Interrupt sollen amer höchstens einige ms bis zum Reset vergehen.
Hat jemand eine Idee, wie das funktzioniren könnte? Ich habe überlegt einen Pin, der als Ausgang funktioniert mit dem Resetpin zu verbinden und dann den Pin auf 0 zu ziehen, aber irgendwie funktioniert das nicht.
MfG Jeffrey

jeffrey
05.05.2006, 14:57
hat sich erledigt, es funktioniert mit dem anderen pin, das kabel war kaputt. allerdins funktioniert jetzt mein restknopf nicht mehr, da der pin ja sonst 5v ausgibt. gibt es einemöglichkeit den pin anstatt auf 5v einfach hochohmig zu machen, sodass mein restknopf trotzdem noch geht.
mfg jeffrey

linux_80
05.05.2006, 21:24
Hallo,
reicht es nicht, einfach wieder an Adresse $0 zu Springen ?
Das wäre der Reset-Vector, hier gehts auch los, wenn man Reset zB. gedrückt hatte.

Hanni
05.05.2006, 21:54
Nein, das dürfte nicht wirklich reichen ...

Begründung:

Sämtliche Controllereinstellungen werden bei einem Hardware Reset zurückgesetzt .. also auch z.B.:

- Sämtliche Register der integrierten Schnittstellen
- Sämtliche Register der integrierten Timer
- Sämtliche Register der integrierten Ports
- die Interupts werden Global deaktiviert

etc ...

uwegw
05.05.2006, 21:57
gibt es einemöglichkeit den pin anstatt auf 5v einfach hochohmig zu machen, sodass mein restknopf trotzdem noch geht.
mfg jeffrey

ja, einfach als Eingang schalten und Pullup aus...

Pascal
06.05.2006, 12:00
Man kann doch auch die Zeit für einen Watchdogreset ändern. Im "Watchdog Timer Control Register - WDTCR" kann man diese Zeit einstellen.
Wenn es sich schon um einen Softwarereset handelt, wäre das doch die eleganteste Lösung.

SprinterSB
06.05.2006, 13:03
Allerdings kann ich nicht den Watchdog verwenden, da ich den zur Programmüberwachung verwende, oder ist es möglich die Zeit für den Reset durch den Watchdog im Programm zu ändern.

Die Zeit kann man wie gasagt ändern. Das Minimum liegt AFAIK bei 15ms.


Hallo,
reicht es nicht, einfach wieder an Adresse $0 zu Springen ?
Das wäre der Reset-Vector, hier gehts auch los, wenn man Reset zB. gedrückt hatte.

Das ist keine gute Idee, weil dadurch die Hardware NICHT resettet wird! Es wird dann nur der Software-Teil der Applikation zurückgesetzt (Variablen, Stack, etc.) IdR befindet sich das System dann aber nicht in einem legalen Zustand -- eben weil die Hardware nicht resettet wurde.


------

Übrigens kann man auch die Reset-Ursache rausfinden. Früh im Programm liest man MCUSCR, setzt es auf 0 und wertet es aus. Zudem kannst du die Informationen über einen Watchdog-Reset hinaus merken, indem du sie in einen Bereich legst, der vom StartUp-Code nicht initialisiert wird. Bei GCC ist das die Section ".noinit".