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."
also, würdeste es zuerst mit den Timern raten.... na gut, dann versuche ich das mal, Stelle gleich mal das Programm hier rein...
warum funktioniert folgendes TImerprogramm denn auch nicht ?
1 | int main( void ) |
2 | {
|
3 | //--------------------- Init
|
4 | P4DIR = 0xFF; //POrt 4 = Output |
5 | P4OUT=0x00; |
6 | int i =0; |
7 | //--------------------- Init end
|
8 | // --------------------- Main Loop
|
9 | TA1CTL = 0x1A4; |
10 | TA1R =0x00; |
11 | while(1) |
12 | {
|
13 | if(TA1R=0xFFFF && i==0) |
14 | {
|
15 | P4OUT = 0x9C; |
16 | i++; |
17 | }
|
18 | if(TA1R==0xFFFF && i==1) |
19 | {
|
20 | P4OUT = 0x00; |
21 | i--; |
22 | }
|
23 | }
|
24 | }
|
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
Danke für den Tipp mit den Beispielprogrammen, die hatte ic hgar nicht gesehen... habe meinen Fehler auch schon erkannt
in den Beispielen steht in der ersten Zeile zumeist: WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
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
ich muss leider zugeben, es ist aufjedenfall eine andere welt als mit den atmegas oder pics =)
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
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.