mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Watchdog + LCD


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend!

Habe da ein folgendes Problem:

Ich möchte gerne den Reset-Grund zu Test Zwecken auf den LCD-Display 
anzeige.

Beschäftige mich zu Zeit mit dem Watchdog dabei bin ich auf das Register 
MCUCSR gekommen. Wie ich das verstanden habe wird dort der GRund für 
einen Rest gespeichert.

Jetzt mein Vorhaben: Den Grund für den Reset auf einem LCD-Display 
anzuzeigen.

Habe dazu den Watchdog eingerichtet/gestartet. Jetzt tritt aber 
folgendes Problem auf die daten in dem Register(MCUCSR) werden in binär 
gespeichert. diese übergebe ich in eine variable also so 
Reset_Grund=MCUCSR. Nun möchte ich mit dem Befehl sprintf diese binären 
daten auf das display bringen leider gibs bei sprintf keine möglichkeit 
dies in binär zu tun.

Frage wie mach ich das am besten?
oder muss ich sogar den wert vom Register in den EEPRom speichern damit 
der bei reseten nicht verschwindet oder ist das register MCUCSR nicht 
flüchtig nach dem reset?

arbeite mit CodeVIsion

danke für ideen und vorschläge

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat den keine mit dem Register MCUCSR erfahrung?

wie bekomme ich die daten auf ein lcd-diplay?

wenn das REgister z.b 00001000 ist dann war der Reset durch einen 
Watchdog ausgelöst worden aber wie bring ich diese info auf das diplay?

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if (MCUCSR&00001000)
{
  //...
}
else if (..)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe mir das so gedacht leider kommt nur ein wert von 564. was mach ich 
falsch?

if(MCUCSR=0xb00001000)
      {
      lcd_gotoxy(3,0);
      lcd_putsf("WD aktiv");
      }
      else
      {

      lcd_putsf("");
      };

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso beschreibst du denn in deiner 'if'-Anweisung das Register?

Und ob das mit dem '0xb' so in Ordnung ist? Das wird als Hex-Wert 
interpretiert. Und noch dazu einer, der nicht in das Register passt...

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

ein einfaches = ist eine Zuweisung, der Vergleich ist ==

Im MCUCSR sind es einzelne Bits die den Interrupt anzeigen.
Daher besser auf Bits testen

z.B. if(Reset_grund&0x08){     // Test Watchdog Mega8
               Ausgabe "Watchdog";
                }
else if(Reset_grund&0x04){     // Test BrownOut Mega8
               Ausgabe "BrownOut";
                }
else if(Reset_grund&0x02){     // Test Ext Mega8
               Ausgabe "Ext";
                }

else {     // Power on bleibt übrig Bit0 Mega8
               Ausgabe "Power";
                }

Nach dem Reset und dem sichern von MCUCSR in Reset_grund
MCUCSR leeren! (bei Mega8 Bits mit 0 beschreiben)

Gruß hans

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe das program so:
 leider wird bei auslösen des resets der text "Hardware Reset aktiv" 
nicht angezeiht wo ist der fehler?


Reset_Grund=MCUCSR;

      if(MCUCSR==0x02)
      {
      lcd_gotoxy(0,0);
      lcd_putsf("Hardware Reset aktiv");
      }
      else
      {

      lcd_putsf("kein Reset");
      };

      }

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zuerst kommt für jeden Prozessor mal ein Power On sonst läuft er nicht.

Da er normalerweise nachtragend ist merkt er sich das auch!

D.h. Bit0 in MCUCSR ist gesetzt und bleibt gesetzt wenn man das nicht 
ändert. Dann ist der Vergleich ==0x02 immer false!

Bit-Test  (MCUCSR&0x02) ist jedoch True.

gruß hans

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.