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
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?
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(""); };
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...
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
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"); }; }
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
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.