Forum: Mikrocontroller und Digitale Elektronik MSP430F5438 mit Watchdog


von Lars (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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.

von Lars (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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."

von Lars (Gast)


Lesenswert?

also, würdeste es zuerst mit den Timern raten....

na gut, dann versuche ich das mal, Stelle gleich mal das Programm hier 
rein...

von Lars (Gast)


Lesenswert?

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
}

von ti experience (Gast)


Lesenswert?

Als MSP430 Anfänger solltest vielleicht die in slac166r.zip enthaltenen 
Beispiele durcharbeiten.

von Lars (Gast)


Lesenswert?

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

von Lars (Gast)


Lesenswert?

Danke für den Tipp mit den Beispielprogrammen, die hatte ic hgar nicht 
gesehen...


habe meinen Fehler auch schon erkannt

von Wolfgang-G (Gast)


Lesenswert?

in den Beispielen steht in der ersten Zeile zumeist:
WDTCTL = WDTPW+WDTHOLD;                   // Stop watchdog timer

von DS aus W (Gast)


Lesenswert?

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

von Lars (Gast)


Lesenswert?

ich muss leider zugeben, es ist aufjedenfall eine andere welt als mit 
den atmegas oder pics =)

von Peter D. (peda)


Lesenswert?

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.

von Wilhelm F. (Gast)


Lesenswert?

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!

von DS aus W (Gast)


Lesenswert?

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!

von Peter D. (peda)


Lesenswert?

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.

von Wilhelm F. (Gast)


Lesenswert?

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.

von DS aus W (Gast)


Lesenswert?

>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
Noch kein Account? Hier anmelden.