mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F1611 I/O unklar


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, den Schaltplan des TelosB hatte ich noch vergessen. Hier ist er: 
http://webs.cs.berkeley.edu/tos/hardware/telos/tel...

Autor: S. Z. (szimmi)
Datum:

Bewertung
0 lesenswert
nicht 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 (;;)
  {
  }

}

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Flo (Gast)
Datum:

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

Flo

Autor: S. Z. (szimmi)
Datum:

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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: MSP (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ging sie danach wieder an ?

Autor: MSP (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.