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
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
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 (;;) { } }
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
Ah, sorry, hab die for(;;) übersehen, damit vergiss das mit der "while(1)", kommt aufs gleiche raus Flo
Jo, auf Low setzen is besser, hab mir den Schaltplan erst hinterher angesehen :-)
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.
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 ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.