Forum: Mikrocontroller und Digitale Elektronik MSP430F1611 I/O unklar


von Florian (Gast)


Lesenswert?

Hallo,
ich bin totaler µC-Programmieranfänger und brauche eine kleine 
Starthilfe. Wäre schön, wenn mir jemand zu folgendem Problem etwas auf 
die Sprünge helfen könnte.

Ich besitze einen TelosB (Rev. B) Sensornetzknoten von Crossbow 
Technology (http://www.xbow.com/Products/productdetails.aspx?sid=252), 
auf dem ein MSP430F1611 verbaut ist. Gemäß Datenblatt befindet sich an 
I/O-Pin 48 (Port 5.4 auf dem µC) eine LED. Diese möchte ich zum Leuchten 
bringen und verwende unter Zuhilfenahme des MSPGCC dafür folgenden Code:

#include <io.h>

int main(void) {
  P5DIR |= (1<<5);   // Output pin
  P5OUT |= (1<<5);   // Pin hochziehen
}

Dummerweise leuchtet die LED aber nicht, was wohl bedeutet, dass ich 
irgendetwas Grundlegendes falsch mache.

Schon mal vielen Dank für die Zeit, die Ihr Euch fürs Lesen genommen 
habt :)

Grüße, Florian

von Florian (Gast)


Lesenswert?

Oh, den Schaltplan des TelosB hatte ich noch vergessen. Hier ist er: 
http://webs.cs.berkeley.edu/tos/hardware/telos/telos-revb-2004-09-27.pdf

von S. Z. (szimmi)


Lesenswert?

Probiere es mal damit (man beachte insbesondere den Shift um 4, nicht um 
5)

int main(void) {
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
  P5DIR |= (1<<4);   // Output pin
  P5OUT |= (1<<4);   // Pin hochziehen
  for (;;)
  {
  }

}

von Flo (Gast)


Lesenswert?

Nach Schaltplan musst Du den Port 5.4 auch runterziehen, damit die LED 
(die ja bereits an Vcc hängt) leuchtet.

Also:

1. P5.4 als Output definieren
2. P5.4 LOW setzen

Weiterhin wäre es gut, nach dieser Anweisung den Controller in einer 
Dauerschleife zu halten "while(1)", sonst versucht der über das 
Programmende alles ausm Flash auszuführen, was danach kommt (unter 
Umständen halt Müll oder sonst was)

Viele Grüße,
Flo

von Flo (Gast)


Lesenswert?

Ah, sorry, hab die for(;;) übersehen, damit vergiss das mit der 
"while(1)", kommt aufs gleiche raus

Flo

von S. Z. (szimmi)


Lesenswert?

Jo, auf Low setzen is besser, hab mir den Schaltplan erst hinterher 
angesehen :-)

von Florian (Gast)


Lesenswert?

So, erstmal vielen Dank für Eure Antworten! Dass ich für die erste LED 
nur 4 mal shiften muss, stimmt natürlich. Habe nun Eure Tipps beherzigt 
und den folgenden Code ausprobiert:

#include <io.h>

int main(void) {
  WDTCTL = WDTPW + WDTHOLD;  // Stop watchdog timer

  P5DIR |= (1<<4);    // Output pin
  P5OUT &= ~(1<<4);    // Low setzen

  while(1);
}

Nun hatte ich immerhin den Erfolg, dass die LED nach dem Flashen für ca. 
eine halbe Sekunde geleuchtet hat und dann sofort wieder ausgegangen ist 
;) Was hat das zu bedeuten? Die Stromversorgung bekommt der TelosB 
übrigens via USB-Port von meinem Notebook mit dem ich das Ding auch 
flashe.

von MSP (Gast)


Lesenswert?

Ging sie danach wieder an ?

von MSP (Gast)


Lesenswert?

Ein paar Fragen habe ich noch zu Telos. Dort ist doch ein SHT11 drauf !?

Telos hat keinen DC/DC mehr, wie wird der SHT11 versorgt wenn die 
Batteriespannung unter 2.4V fällt ??? Ich kenne kaum ordentliche 
Sensoren die mit diesen niedrigen Spannungen laufen ...

von Florian (Gast)


Lesenswert?

Hallo an alle,
wie's aussieht war das Problem kein Quellcode-Fehler, sondern eins des 
MSPGCC bzw. des Flashing-Tools (tos-bsl, Abwandlung von msp430-bsl für 
telosb-Support aus der TinyOS Toolchain), das ich benutze. Nachdem das 
Flashing-Tool häufig unvorhersehbar mit der Fehlermeldung abbrach, dass 
ein unbekannter Header (0x00) gefunden wurde, habe ich zwecks 
Fehlereingrenzung mal versucht, das Programm auf Windows zu kompilieren 
und zu flashen, was problemlos möglich war. Auch die LEDs zeigen nun die 
gewünschte Funktion. Man gab mir den Hinweis, dass die Ursache für die 
Fehlfunktionen falsche Linker-Description Files sein könnten. Leider 
weiß ich an dieser Stelle nicht weiter. Wäre es möglich, die LD-Files 
aus der Windows-Installation einfach an die entsprechende Stelle meiner 
Linux-Konfiguration zu kopieren oder sind die betriebssystemabhängig?

Viele Grüße und danke für Eure Hilfe,
Florian

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.