Hallo, kann ich mit irgendeinem Befehl den AVR Neustarten, falls ein bestimmtes Ereignis eintritt? Gruß
@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
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?
einfach den watchdog aktivieren und dann in eine endlosschleife verfallen (natürlich ohne den watchdog zurückzusetzen!)
>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);
@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
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.
Wenn Du (in Deinem Fall) mit ~75ms leben kannst:
1 | #include <avr/wdt.h> |
2 | #include <avr/interrupt.h> |
3 | void restart(void){ |
4 | cli(); //optional |
5 | wdt_enable(WDTO_15MS); |
6 | while(1); |
7 | }
|
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.