mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Watchdog-Reset per UART auf ATmega8535


Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte, wenn ich zb 0x00 per USART sende, den watchdog starten um 
den Atm. zu resetten.
Leider funtkioniert das nicht:
int main (void)
{
//initialisierung etc hab ich hier natürlich auch gemacht

USART_Transmit('S'); //zum zeichen daß er startet/resettet hat
for (;;)
 {
 }

}
ISR(USART_RX_vect)
   {char puffer=UDR;
    if (puffer==0xff)
     {USART_Transmit('R');  //zum zeichen daß 0xff erkannt wird
      reset();
     }
   }


int reset(void)
   {USART_Transmit('E');  //zum zeichen daß er auch resettet
    wdt_enable(WDTO_15MS);
   }


wenn ich jetzt 0xff sende, dann kriege ich nur das 'R' zurück, er 
erkennt die 0xff also.
Allerdingt kommt danach weder ein 'E' daß er wenigstens in die reset() 
funktion einsteigt, noch ein 'S' daß er neu gestartet hat.

Auch
if (puffer==0xff) wdt_enable(WDTO_15MS);
fürht zu keinem reset, das 'S' für Programstart wird nicht gesendet.
Was läuft schief?
(ich simuliere nicht, sondern hab es auf nem breadboard laufen)

Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, stimmt nicht ganz, wenn ich das so mache wies oden steht dann 
klappts auch. Wollte den text nur weitestmöglich zum posten 
vereinfachen.
Das Problem schient in der switch-Abfrage zu stecken.
int main (void)
{
//initialisierung etc hab ich hier natürlich auch gemacht

USART_Transmit('S'); //zum zeichen daß er startet/resettet hat
for (;;)
 {
 }

}
ISR(USART_RX_vect)
   {char puffer=UDR;
    switch (puffer)
     case 0x00 : break;
     case 0xff : USART_Transmit('R'); reset(); 
     }
   }


int reset(void)
   {USART_Transmit('E');  //zum zeichen daß er auch resettet
    wdt_enable(WDTO_15MS);
   }

Das lustige ist: wenn ich den reset mit case 0x00 machen lasse, dann 
gehts.
setze ich den reset() in case 0xff ein, dann sendet er.
Habe jetzt auch mal folgendes versucht:
switch(puffer)
{
case 0x00 : USART_Transmit('0');
case 0xff : USART_Transmit('R');
default : USART_Transmit('d')
}

Hier wird jetzt bei 0x00 '0' 'R' und 'd' gesendet, bei 0xff 'R' und 'd' 
und sond nur 'd'...
Sollte switch nicht eigentlich nur die jeweilige Zeile ausspucken?
Wenn nicht, wie mach ich das dann?
lg

Autor: M. Kriegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach mal die break's wieder rein und definier puffer als unsigned char 
....

switch(puffer)
{
  case 0x00:
    USART_Transmit('0');
  break;

  case 0xff:
    USART_Transmit('R');
  break;

  default:
    USART_Transmit('d');
  break;
}

Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich habs weiter eingeschränkt.
Die breaks hatte ich natürlich Uhrzeitbedingt vergessen.
Das lustige ist:
case : 0x00 reset(); //geht
case : 0x01 reset(); //geht auch

case : 0xfe reset(); USART_Transmit(puffer) //resettet nicht, schickt 
aber 0xfe
case : 0xff reset(); //das gleiche
?????????

Autor: M. Kriegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char puffer = UDR;

oder

unsigned char puffer = UDR;

??

Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
inzwischen unsigned, und siehe da: es geht... danke ;)

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.