Forum: Mikrocontroller und Digitale Elektronik Software Reset AVR


von ... .. (docean) Benutzerseite


Lesenswert?

Moin,

ich möchte den AVR resetten wenn ich ein bestimmtes Zeichen über den 
USART empfange...

Nur irgendwie macht der dann Resets ohne Ende....

Hier mal ein bißchen Code...
1
void reset(void)
2
{
3
  wdt_enable(WDTO_250MS);
4
  while(1);  //warten das der Watchdog den AVR resettet
5
}
1
ISR(USART0_RX_vect)
2
{
3
  uint8_t temp=UDR0;
4
5
  if(temp=='R')
6
      reset();
7
}

Muss ich im main() noch was erledigen?

AVR: ATMega644p
Compiler: AVR-GCC

von Karl H. (kbuchegg)


Lesenswert?

Nix Nix wrote:

> Muss ich im main() noch was erledigen?

Den Watchdog wieder abschalten?

von ... .. (docean) Benutzerseite


Lesenswert?

also
1
wdt_disable();

vorne im main() oder wie...

von Karl H. (kbuchegg)


Lesenswert?


von ... .. (docean) Benutzerseite


Lesenswert?

Das beantwortet aber nicht die Frage ob das wdt_disable() reicht...

von ... .. (docean) Benutzerseite


Lesenswert?

hmm anscheined nicht...

weil
1
int main (void)
2
{
3
  //Wenn Reset per Uart Watchdog ausschalten
4
  wdt_disable();
hilft nicht...

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> Das beantwortet aber nicht die Frage ob das wdt_disable() reicht..

Häh? In dem Link steht doch, dass wdt_disable(); nur der zweite Hälfte 
vom Weg ist. Die erste Hälfte ist das WDRF-Bit im MCUSR Register zu 
löschen.

Und das als erstes in main() zu machen, kann ggf. schon zu spät sein.

Hier steht es nochmal:
http://www.nongnu.org/avr-libc/user-manual/group__avr__watchdog.html

von ... .. (docean) Benutzerseite


Lesenswert?

hmmm ein
1
void reset_wdt(void) __attribute__((naked)) __attribute__((section(".init3")));
2
3
...
4
5
void reset_wdt(void)
6
{
7
  MCUSR &= (1<<WDRF);
8
  wdt_disable();
9
}

hilft auch nicht...

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Nix Nix wrote:
>   MCUSR &=  (1<<WDRF);
             ^

Wie geht's mit:

    MCUSR &= ~(1<<WDRF);

Beim AVR löscht man manche Bits durch Setzen/Verodern. Ob das beim WDRF 
auch so ist, steht im Datenblatt. Das hat bestimmt technische Gründe, 
aber beim Lesen solcher Dinge, stelle ich mir Gelächter der Atmel-Ings. 
in der Bar vor, wo sie sich diesen Joke ausgedacht haben.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan "stefb" B. wrote:

> aber beim Lesen solcher Dinge, stelle ich mir Gelächter der Atmel-Ings.
> in der Bar vor, wo sie sich diesen Joke ausgedacht haben.

Das hat recht handfeste Gründe.

http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_intbits

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.