MSP430F149 - Starthilfe

Gast #330772
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
Gast #330773
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.
Gast #330774
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
Persönliche Seite #330775
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.