mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Neustart AVR


Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kann ich mit irgendeinem Befehl den AVR Neustarten, falls ein bestimmtes 
Ereignis eintritt?

Gruß

Autor: sdfsd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
musst du mal guggen ob du den watchdog dazu überreden kannst

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Bernd

>kann ich mit irgendeinem Befehl den AVR Neustarten, falls ein bestimmtes
>Ereignis eintritt?

rjmp 0

oder

jmp 0

Je nach Typ. Das ist aber KEIN vollständiger Reset!

MFG
Falk



Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bräuchte schon einen vollständigen Reset.

Hab im GCC Tutorial das hier gelesen:

>>Außerdem bietet der WD die einzige Möglichkeit einen beabsichtigten 
>>System-Reset auszulösen.....

Doch wie?

Autor: Snake (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einfach den watchdog aktivieren und dann in eine endlosschleife 
verfallen (natürlich ohne den watchdog zurückzusetzen!)

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>einfach den watchdog aktivieren und dann in eine endlosschleife
>verfallen (natürlich ohne den watchdog zurückzusetzen!)

Klappt ganz gut, nur es dauert ca. 10 Sekunden bis der AVR neu startet. 
Obwohl ich das hier eingestellt habe:

wdt_enable(WDTO_2S);

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Bernd

>Klappt ganz gut, nur es dauert ca. 10 Sekunden bis der AVR neu startet.

Mal ins Datenblatt geschaut? AFAIk sind die Timeoutwerte nicht bei allen 
Controlelrn identisch. Ausserdem ist bei niedriger Betriebsspannung die 
Zeit wesentlich grösser.

MFG
Falk

Autor: Marvin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen Portpin an den Reset-Eingang legen. Evtl. noch mit einem R und 
einem C den Impuls am Reset-Pin verlängern. Legt man nun den Portpin auf 
low, hat man einen sauberen Hardware-Reset.

Autor: Frank N. (betafrank)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du (in Deinem Fall) mit ~75ms leben kannst:
#include <avr/wdt.h>
#include <avr/interrupt.h>
void restart(void){
   cli();   //optional
   wdt_enable(WDTO_15MS);
   while(1);
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.