Forum: Mikrocontroller und Digitale Elektronik MSP430F149 - Starthilfe


von BeJO (Gast)


Lesenswert?

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

von Christian Rötzer (Gast)


Lesenswert?

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.

von BeJO (Gast)


Lesenswert?

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

von Mario R. (mario001) Benutzerseite


Lesenswert?

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