Forum: Mikrocontroller und Digitale Elektronik AVR Software-Reset


von Matze T. (gruetzwurschd)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich hab die Suche schon ausprobiert und nichts Sinnvolles zu meiner 
Frage zu Tage befördert.

Es geht darum, dass ich mir einen Software-Reset auslösen will.

Hintergrund ist: Ich habe am µC ein Gerät hängen. Sobald sich das Gerät 
Resettet, wird eine Spannung von High nah low gezogen.
Diese Spannung möchte ich überprüfen und bei Bedarf meinen µC resetten.

Meine Idee war, dass ich mir einfach die Spannung auf den INT0 Pin lege 
und sobald das Gerät neu gestartet wird, löst es bei mir einen Interrupt 
aus. Das funktioniert auch soweit.

Anschließend wollte ich im MCUCSR - Register das EXTRF flag setzen. Das 
funktioniert nicht. Auch nicht wenn ich das Flag lösche.

Nun ist meine Frage: gibt es eine möglichkeit einen richtigen 
Software-Reset auszulösen, ohne den Watchdog dafür zu verwenden.

Wie zuverlässig funktioniert folgende Methode: Den INT0 zwar zu 
initialisieren, aber Garkeine ISR dazu zu schreiben. Weil das löst auch 
einen Reset aus. Nur stellt sich die Frage: Funktioniert das immer? Kann 
mir dabei der µC kaputt gehen? Gibt es dadurch andere Probleme?


Grüße Tarkan

von ... .. (docean) Benutzerseite


Lesenswert?

Tarkan D. schrieb:
> ohne den Watchdog dafür zu verwenden.

Warum das?

von Karl H. (kbuchegg)


Lesenswert?

Tarkan D. schrieb:
> Hallo Leute,
>
> ich hab die Suche schon ausprobiert und nichts Sinnvolles zu meiner
> Frage zu Tage befördert.
>
> Es geht darum, dass ich mir einen Software-Reset auslösen will.

Gut.
Du wirst schon wissen, warum deine Software auch einen Reset machen muss 
und warum es nicht reicht, einfach die Init Sequenz erneut zu 
durchlaufen.


> Hintergrund ist: Ich habe am µC ein Gerät hängen. Sobald sich das Gerät
> Resettet, wird eine Spannung von High nah low gezogen.

Passt doch perfekt.
Ab an den Reset Pin damit und dein µC wird ebenfalls resettet.

von Matze T. (gruetzwurschd)


Lesenswert?

Karl heinz Buchegger schrieb:
> Passt doch perfekt.
> Ab an den Reset Pin damit und dein µC wird ebenfalls resettet.

Stimmt, nur die Software wird momentan auf einem STK500 Board 
entwickelt. Da kann ich nicht mal schnell die Hardware umstricken(ich 
weiß dass das die Perfekte lösung wäre) :)

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Tarkan D. schrieb:
> Wie zuverlässig funktioniert folgende Methode: Den INT0 zwar zu
> initialisieren, aber Garkeine ISR dazu zu schreiben. Weil das löst auch
> einen Reset aus.

Falsch. Das löst keinen RESET aus sondern springt auf die RESET-Marke 
(oder halt auf die in dem Vektor angegebene Adresse). Die einzig 
sinnvolle und echte Auslösung eines RESET ist es, den Watchdog zu 
benutzen. Nur so werden alle I/O-Register korrekt von der Hardware 
initialisiert.

von Peter D. (peda)


Lesenswert?

Solange das Programm weiß, was es tut, besteht überhaupt kein Grund, ein 
Reset zu machen. Man kann jeden beliebigen Zustand erreichen ohne ein 
Reset.
Erst wenn ein Programm Amok läuft, weil der Programmierer einen Fehler 
gemacht hat, muß man ein Reset machen.

Deinen PC startest Du ja auch nicht ohne Not neu, z.B. wenn eine E-Mail 
eintrifft.
Solange die PC-Software ordnungsgemäß läuft, kannst Du alle gewünschten 
Anwendungen ausführen und wieder beenden ohne ein Reset.


Peter

von teta (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Solange das Programm weiß, was es tut, besteht überhaupt kein Grund, ein
> Reset zu machen. Man kann jeden beliebigen Zustand erreichen ohne ein
> Reset.
> Erst wenn ein Programm Amok läuft, weil der Programmierer einen Fehler
> gemacht hat, muß man ein Reset machen.

Nur als Vervollständigung: Es gibt auch diverse Controller die 
Hardwarefehler aufweisen. Eher die Ausnahme aber ist alles schon 
vorgekommen. Hier könnten Resets tatsächlich interessant werden. 
Allerdings gehören die AVRs eher nicht zu dieser Sorte da sie sehr 
ausgereift sind.

von Andy H. (vinculum) Benutzerseite


Lesenswert?

Peter Dannegger schrieb:
> Solange das Programm weiß, was es tut, besteht überhaupt kein Grund, ein
> Reset zu machen. Man kann jeden beliebigen Zustand erreichen ohne ein
> Reset

Ich brauche einen Reset z.B. nach Programmierung mittels eines 
Bootloaders! Springe ich nach 0000 kommt da nur murks bei raus,

von Purzel H. (hacky)


Lesenswert?

Im Bootloader schon alles zerkonfiguriert ? Wenn ein Watchdog nicht 
drinliegt, wuerd ich die relevanten Register vor Ende des Bootloaders 
neu beschreiben.

von holger (Gast)


Lesenswert?

>Ich brauche einen Reset z.B. nach Programmierung mittels eines
>Bootloaders! Springe ich nach 0000 kommt da nur murks bei raus,

Ein Sprung nach 0000 ist aber nun mal kein echter Reset.
Hast du die Interruptvektoren für den Bootloader umgebogen?
Dann musst du die zu Fuß auch wieder geradebiegen. Sauber
ist es per Watchdog oder du nimmst einen Pin der aus dem
Bootloader raus den Resetpin runterzieht.

von Peter D. (peda)


Lesenswert?

Andy H. schrieb:
> Ich brauche einen Reset z.B. nach Programmierung mittels eines
> Bootloaders! Springe ich nach 0000 kommt da nur murks bei raus,

Interessant.
Ich komme mit einem Reset nie aus dem Bootloader raus.
Das Reset ist ja dauerhaft zum Bootresetvektor umgeleitet.
Ich muß nach 0x0000 springen, um die Applikation zu starten.

Ich benutze daher das Reset, um in den Bootloader zu gelangen.
Ein Softwareupdate ist aber auch keine normale Betriebsart der 
Applikation, das erfordert auch beim PC oftmals ein Reset.


Peter

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Peter Dannegger schrieb:
> Interessant.
> Ich komme mit einem Reset nie aus dem Bootloader raus.
> Das Reset ist ja dauerhaft zum Bootresetvektor umgeleitet.
> Ich muß nach 0x0000 springen, um die Applikation zu starten.

Ich brauche da auch kein Reset für. Die eigentliche Applikation sollte 
nicht davon ausgehen, aus einem Controller zu starten, der alles 
initialisiert hat. Die Applikation sollte daher alle benutzte Peripherie 
und den RAM vor der Main erstmal sauber einrichten.

Peter Dannegger schrieb:
> Ich benutze daher das Reset, um in den Bootloader zu gelangen.

Ich auch.

Peter Dannegger schrieb:
> Ein Softwareupdate ist aber auch keine normale Betriebsart der
> Applikation, das erfordert auch beim PC oftmals ein Reset.

Najaaa, wenn alles sauber programmiert ist, braucht man den Reset 
wirklich nur, um den Bootloader aufzurufen. Dies kann man dann auch aus 
der Applikation heraus per Watchdog machen, wenn ein Programmupdate zur 
Laufzeit gewünscht wird.

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.