Hi Leute,
ich verzweifle gerade an dem MSP, ich wollte mich langsam einarbeiten
und deshalb via Watch dog einen PORT jede Sekunde High und LOw schalten.
Ich sitze da schon den ganzen Tag dran und die anderen Thread hier im
Forum haben mir leider auch nicht weitergeholfen.
Kann mir vlt jemand ein kleines Beispielprogramm mal zeigen, in dem der
PORTX z.b. ein und ausgeschaltet wird einmal Pro Sekunde?
Meine ÜBerlegungen, initialisiere den WD mit dem Passwort und setze
dabei den Counter auf 0. wenn der WD einen Überlauf hat, Überprüfe das
BIT WDTIFG, ob dieses gesetzt ist. Wenn ja, dann PORTX High schalten und
WDTIFG zurücksetzen, andernfalls Warte... und später dann das gleiche
mit PORTX, low geschaltet.
LG
Lars
Lars schrieb:> und deshalb via Watch dog einen PORT jede Sekunde High und LOw schalten.
Was soll der Unsinn?
Dazu ist der Watchdog nicht da.
Du nimmst ja auch nicht die Axt zum Tür öffnen, sondern die Schlüssel.
Für reguläre Timersachen sind nämlich die Timer da, wer hätte das
gedacht.
ich wollte mit dem Watchdog zunächst einmal anfangen um mich in den µC
einzuarbeiten. Ichweiß das man es normalerweise nicht dafür verwenden
sollte.
WEnn ich das mit dem WD geschafft habe, würd eich zum nächsten Schritt
gehen und dasselbe mit den TImern machen.
Lars schrieb:> WEnn ich das mit dem WD geschafft habe, würd eich zum nächsten Schritt> gehen und dasselbe mit den TImern machen.
Das klingt wie: "Ich decke zuerst das Dach und als nächsten Schritt
gieße ich das Fundament."
danke erst einmal, aber ist denn der Fehler oben so groß ?
ich dachtre ich hätte alles richtig eingestellt... bin mir nur unsicher
bei der abfrage, wenn der TImer einen bestimmten wert erreicht hat
Moin,
erst einmal ist gängige Praxis beim MSP,
den WDT (WatchDogTimer) als normalen timer
zu verwenden. Haue tur da nicht not ;-)!
Anschauen:
MSP430FG54x Demo - WDT, Toggle P1.0, Interval Overflow ISR, DCO SMCLK
MSP430x54x_wdt_01.c in den code-examples
family-handbook ist als Anfänger lästig wird später aber lustig,
nur Geduld
Gruss
Dietmar
DS aus W schrieb:> erst einmal ist gängige Praxis beim MSP,> den WDT (WatchDogTimer) als normalen timer> zu verwenden.
Gängige Praxis heißt aber noch lange nicht gute Praxis. Es gibt keinen
Grund, die Timer nicht zu benutzen.
Man muß sich mal in einen Applikationsingenieur hineinversetzen. Es ist
doch langweilig, übliche Probleme mit den üblichen Methoden zu lösen.
Daher probieren die gerne dirty Tricks, die in der Praxis Pferdefüße
haben können.
Leider kann das ein Anfänger aber nicht einschätzen, was eine gute und
zuverlässige Lösung ist. Er vertraut dem Applikationsingeneur, der aber
nur seinen Spieltrieb ausleben wollte.
Ein bekannt berüchtigtes Beispiel ist, mechanische Kontakte mit externen
Interrupts einzulesen. Und daher sieht man in der Praxis oft Geräte mit
unzuverlässiger Tasten-, Drehgeberentprellung.
Auch für den 8051 fand ich in alter Literatur Beispiele, in denen der
Watchdog das Hauptprogramm macht, einiges tut, und dann wartet, bis der
Watchdog anschlägt. Das ist also nicht immer völlig abwegig. Die
8051-Derivate mit nicht mehr abschaltbarem Watchdog heißen z.B. 80C515,
80C517, C515, C517, von Siemens/Infineon.
Aktuell mache ich gerade einen Bootloader (Monitor) watchdogfest, den
ich für Testprogramme nutze. Sowas in der Art des bekannten EMON52 von
Elektor. Denn das Programm blieb bei Watchdogbetrieb natürlich darin
hängen.
Man kann sich im RAM ein Byte oder Bit fest legen, welches vom µC bzw.
vom Programm nicht initialisiert wird. Dann toggelt man dort nach jeder
Watchdog-Auslösung ein Bit, oder benutzt es gar direkt als Zähler, der
die Auslösungen zählt, das ist gar nicht soooo kompliziert.
Um eine LED blinken zu lassen, macht man es aber gewöhnlich anders, und
verwendet den Watchdog dafür nicht. Um den Watchdog als Anfänger mal
auszuprobieren, ist eine blinkende LED per Watchdog aber eine gute Idee.
Einige Debugger spinnen allerdings nach Watchdog-Auslösung rum. Damals
bei mir die LPC2000 mit dem ULINK-Tool von Keil, es gab nach
Watchdogauslösung keine Kommunikation mit dem PC mehr. Dann mußte man
die RS232 auspacken, und ein neues Programm ohne Watchdog mit einem
anderen Tool über den Bootloader flashen. Wehe, man hat da in seinen
Geräten später keine RS232 drauf, wenigstens zwei auf der Platine
angebrachte Stifte, und nur die ISP-Schnittstelle alleine!
Lars hat nicht gesagt, lieber Peter, das er
einen Herzschrittmacher für seinen Opa bauen
möchte. Er wollte, gaz unverfänglich, eine LED
blinken lassen.
Dafür gibt es Beispielcode von TI, auch mit dem
WDT. Ntürlich auch für den Timer_A.
Erste Zeile im family handbook- chapter10:
>>
The watchdog timer+ (WDT+) is a 16-bit timer that
can be used as a watchdog or as an interval timer.
<<
Dieter Nuhr hat manchmal doch Recht ;-)
Nicht böse gemeint!
Wilhelm Ferkes schrieb:> Um den Watchdog als Anfänger mal> auszuprobieren, ist eine blinkende LED per Watchdog aber eine gute Idee.
Vermutlich hat dann der MSP-Watchdog aber einen extra Spezialmodus.
Ein üblicher Watchdog, z.B. im 8051 (Atmel) oder in älteren AVRs führt
bei Überlauf immer ein Reset aus. Damit läßt sich daher keine Blink-LED
realisieren.
Wilhelm Ferkes schrieb:> Man kann sich im RAM ein Byte oder Bit fest legen, welches vom µC bzw.> vom Programm nicht initialisiert wird.
Das ist schon extrem von hinten durch die Brust ins Auge. Warum einfach,
wenn es auch kompliziert geht.
Und nach einem Power-On Reset ist der Zustand unbestimmt.
Peter Dannegger schrieb:> Ein üblicher Watchdog, z.B. im 8051 (Atmel) oder in älteren AVRs führt> bei Überlauf immer ein Reset aus. Damit läßt sich daher keine Blink-LED> realisieren.
Ja doch. Watchdog und Oszillator-Watchdog setzen in SFR Flags, die nach
Reset eben genau zur Auswertung erhalten bleiben, auch vom Programm
wieder gelöscht werden können. Sonst hätte ich meinen Bootloader bzw.
Monitor nicht überarbeiten können.
Der popelige Standard-8051 hat natürlich nichts.
>Vermutlich hat dann der MSP-Watchdog aber einen extra Spezialmodus.
Genau- das bit im Control-Register WDTTMSEL gibt an:
0 Watchdog mode
1 Interval timer mode
-wie vermutet