Hallo Mikrokontrollerfreunde Wir (Schüler eines Gymnasiums) haben vor einen Digital-Voltmeter zu bauen. Um ein Digital-Voltmeter zu realisieren wird der Mikrokontroller MSP430F194 auf einem Header-Board von Olimex verwendet. Inspiriert von einigen Tutorials (mikrokontroller.net, Artikel in der c't 24/2003 , http://mathar.com/msp430.html) machten wir uns an die Arbeit! Doch schon bald mussten wir feststellen, dass das Starten (vielleicht auch schon das Kompilieren oder Linken) eines kleinen Testprogramms das zunächst einmal eine LED einschalten soll, nicht funktioniert. Trotz langer, intensiver Suche fanden wir keine Problemlösung. Und so sind wir vorgegangen: Unser Testprogramm: Code: #include <io.h> int main(void) { P2OUT |= 0x01; //Port 20 //Endlosschleife for(;;) { ; } } So haben wir es übersetzt: msp430-gcc -Os -mmcu=msp430x149 -o leds.elf main.c Und so über den JTAG-Adapter übertragen: msp430-jtag.exe -eE leds.elf Ausgabe des Linkers MSP430 JTAG programmer Version: 2.2 Mass Erase... Erase Check by file... Program... 114 bytes programmed. Reset and release device... Probleme: Keine LED leuchtet (LED-Schaltung ist jedoch in Ordnung). Was hat es mit dem Reset auf sich? Muss man den µC "resetten" um das Programm zu starten (dies haben wir zumindest in einigen Fora schon gelesen). Wie startet man das Programm? Eigentlich wird ja ein Reset, wenn er denn zum Starten dient durch den Linker ausgeführt oder durch das anlegen einer Spannung an den µC. Wir sind für jede brauchbare Antwort dankbar. Vielleicht ist es ja was ganz banales. Mfg
Sowas hätte ich als Schüler auch gerne gemacht. Erst mal checken, ob der Quartz schwingt. Zum anderen muss man, um eine LED einzuschalten mindestens zwei Befehle ausführen: 1. Port auf Ausgang schalten. 2. LED einschalten.
Wir haben nun den Code geändert und mussten mit Freude feststellen, dass es nun endlich geht! Das Problem scheint nun erst einmal gelöst zu sein. Dadurch konnten wir einen großen Schritt vorankommen! Wir möchten uns daher bei Christian Rötzer bedanken vorallem auch für seine schnelle Antwort, die es auf den Punkt brachte! Weil wir anderen Anfängern auch die Chance geben wollen, solch ein Projekt erfolgreich zu verwirklichen gibt es nun den geänderte und funktionierende Code: #include <io.h> int main(void) { P2DIR = 0xFF; P2OUT = 0x01; P2OUT |= 0x02; P2OUT |= 0x04; for(;;) { ; } } mfg BeJo
Hallo, schön, dass es funktioniert ! Ich möchte nur der Vollständigkeit halber was ergänzen, was mich bei meinen ersten Versuchen mit den MSPs auch viel Lehrgeld gekostet hat. Der Watchdog der MSP430 ist standardmäßig aktiviert und muss im Programm manuell abgeschaltet werden, wenn man ihn nicht verwendet - sonst kommt irgendwann der Reset: WDTCTL = WDTPW + WDTHOLD; Das war bei deinem Programm auch das erste, woran ich gedacht hatte. (Eigentlich komisch, dass es trotzdem funktioniert ?!?) Grüße, Mario
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.