Forum: Mikrocontroller und Digitale Elektronik Erfahrungen UART TI Launchpad


von MT (Gast)


Lesenswert?

Hallo,

Ich versuche nun schon seit geraumer Zeit den UART von meinem Launchpad 
zum laufen zu bringen.

Als Programm nutze ich das Temperatursensor Beispiel von TI:

http://processors.wiki.ti.com/index.php/MSP430_LaunchPad_(MSP-EXP430G2)?DCMP=launchpad&HQS=Other+OT+launchpadwiki#Complete_Projects

Als Entwicklungsumgebung nutze ich IAR Kickstart.
Compiler Optimierung ist auf "Low" gestellt.

Die virtuelle COM Schnittstelle lese ich via HTerm aus.
Einstellungen 2400,N,8,1

Das Problem ist das ich immer wenn ich ein Byte übertrage Rechnerseitig 
nur Nullen ankommen.
Ich hab auch mal eine Schleife durchlaufen lasse in denen ich TX Byte 
von 0-255 alle Werte übertragen lassen hab.
Aber auch dort bekomme ich immer nur Nullen.
Auch wenn ich eine LED zwischen TX und GND anhänge kann ich ein blinken 
erkennen. Ein Scope habe ich leider nicht da.

Außerdem hab ich festegestellt as wenn ich meine Compiler Optimierung 
auf "None" stelle, gar keine Bytes mehr bekomme auch keine Nullen mehr.

Auch habe ich versucht den COM Port zu wechseln also mal von COM3 auf 
COM9 umgestellt usw.
Dies brachte allerdings ebenso wenig Erfolg wie das Neuinstallieren der 
Treiber oder Neustarten des Rechners.

Nun hat hier schon jemand ähnliche Erfahrungen mit dem Application UART 
des Launchpad gemacht, oder weiß woran es liegen könnte. Oder ist 
eventuell TI's Beispielcode fehlerhaft?

von Bernd N (Gast)


Lesenswert?

Das Beispiel von TI sendet Zeichenfolgen, keine Ziffern und es 
funktioniert auch... wenn auch eher schlecht als recht. Die Beispiele 
sind insgesamt eher mau.

Du weißt aber schon das es auch ein entsprechendes Programm braucht um 
die Temperatur zu messen ? ist ebenso auf der TI WebSite. HTerm bringt 
dir da nicht viel.

von MT (Gast)


Lesenswert?

Tag,

Ja es sendet immer einen Byte Hterm bringt mir da schon was ,da ich mir 
die Bytes auch als Hex bzw. Dezimalzahl anzeigen lassen kann.

Bzw würde es mir erstmal schon reichen wenn ich sehe das was anderes 
ankommt als Null.

Die TI GUI funktiniert bei mir gar nicht ab den Punkt wo ich den COM 
Port wählen muss ignoriert er meine Tastatureingaben.

von Bernd N (Gast)


Lesenswert?

Leg halt deinen Finger auf den MC und heiz den ein bischen auf... dann 
sollte auch ein anderer Buchstabe zu sehen sein. Ist ja schließlich ne 
Temperaturmessung :-)

Ansonsten baust du das Beispiel ein bischen um, Meßwert itoa z.B.

von MT (Gast)


Lesenswert?

Es ist egal was ich sende(Wie gesagt hab schon ne While Schleife mit 
allen möglichen Werten durchlafuen lassen) es kommen nur Nullen an.
Auch das mit dem Reiben hab ich schon ausprobiert.

von Bernd N (Gast)


Angehängte Dateien:

Lesenswert?

Dauerhaftes Senden mag keine clevere Idee sein, wie gesagt, der Code ist 
etwas schräg :-)

Anbei mal ein simples "Hello World" aber es funktioniert. Achtung, ist 
auch eher nur hingemurxt.

Ich kann dir gerne heute abend eine Temperaturmessung von mir 
bereitstellen, habe den Code leider nicht hier auf meinem Rechner.

von MT (Gast)


Lesenswert?

Hey,

Dankeschön werde ich heute Abend einfach mal ausprobieren und über 
Erfolg oder Misserfolg hier berichten.

von MT (Gast)


Lesenswert?

Tag,

Habe es mit deinem Code versucht.

Meine Einstellungen bei HTerm sind 9600,8,N,1

Ich bekomme jedesmal wenn ich den Button drücke ein Zeichen dieses ist 
aber Müll hab mal ne 7 bekomme mal das Zeichen für 1/2 aber jedes mal 
wenn ich drücke halt nur 1 Zeichen.

Ich glaube mittlerweile es ist entweder ein Treiberproblem werde das 
programm morgne mal an einem anderen Rechner ausprobieren, oder der TUSB 
Chip ist defekt oder etwas in der Richtung werde auch mal versuchen mir 
ein anderes Board auszuleihen und es damit auch nochmals zu probieren

von Bernd N (Gast)


Angehängte Dateien:

Lesenswert?

So, habe noch ein bischen Zeit. Ich habe mir mal HTerm angeschaut und 
ich finde es nicht sehr praktisch... ist aber nett anzusehen.

http://www.heise.de/software/download/teraterm_pro/51776

Ich verwende für solche Tests TeraTerm und das funktioniert klaglos 
obwohl es durchaus weniger Optionen zu bieten hat. Ich würde an deiner 
Stelle mal ein anderes Terminal Programm verwenden.

Im Anhang findest du einen Screenshot mit beiden Programmen. Hier siehst 
du die Ausgabe einer ADC Messung welche ebenfalls auf dem Launchpad 
läuft.

Für die Temperaturmessung habe ich dir einen TestCode beigefügt. Der 
Code unterscheidet sich deutlich von dem TI Beispiel. Die Ausgabe 
erfolgt Terminal gerecht... will sagen, mit der TI Software hat das 
nichts mehr zu tun sondern die Ausgabe erfolgt direkt im Klartext auf 
das Terminal.

von MT (Gast)


Lesenswert?

Habe deinen Hallo Welt code auf HTerm und TeraTerm probiert.
Kein Erfolg.

Finde HTerm persönlich schöner weil ich mir die Daten in Hex anzeigen 
lassen kann.

von Bernd N (Gast)


Lesenswert?

Dann scheint deine Hardware defekt zu sein. Der 2te Code liefert auch 
keine Ausgabe ?

von MT (Gast)


Lesenswert?

Tag,

leider hab ich erst heute Abend Zeit eventuell sogar leider erst morgen 
den zweiten Code auszuprobieren.

Gruß Tobias

von MT (Gast)


Lesenswert?

Hey,

Bin jetzt dazu gekommen es wieder auzuprobieren bin jetzt allerdings 
noch mehr am verzweifeln.

Und zwar hat das Beispiel von TI was Standartmäßig auf dem Launchpad 
geflasht ist funktioniert hab ein noch verpacktes Launchpad bekommen und 
dieses getestet.

Anschließend hab ich selber ein Programm draufgespielt und nix 
funktioniert mehr auch nicht mit dem obigen Testprogramm.

Es ist also kein Treiberproblem, kein Hardwareproblem und an der 
Software kann es auch nicht liegen. Es kann also nur an den Compiler 
Einstellungen liegen und am Downloaden des Programms.

Ich benutze IAR Embedded Workbench und downloade das Programm mittels 
download and debug. Anschließen lass ich den Controller "rennen".
Auch nach ausstecken des Launchpads und anschließendem einstecken ist 
das Programm noch drauf kann es sein das hier schon ein Fehler ist?

Welche Entwicklungsumgebung nutzt du ?

Gruß Tobias

von Bernd N (Gast)


Lesenswert?

Hast du auch das richtige Target ausgewählt ? Welche Einstellungen hast 
du denn vorgenommen ?

von MT (Gast)


Lesenswert?

Tag,

Einstellungen sind:

Target Einstellungen:
Device MSP430G2231
Size of double 32 bits

Language Einstellugen:
Language: C
C dialect: C99
Language conformance: Standard with IAR extensions

Optimizations:

Low

Debugger
FET Debugger

FET Debugger:
Texas Instruments USB-IF
Spy-Bi-Wire

Das sind so die Hauptsächlen Einstellungen.

Gruß Tobias

von Bernd N (Gast)


Lesenswert?

Stell mal optimize auf Speed.

von Bernd N (Gast)


Lesenswert?

Oder Size.

von MT (Gast)


Lesenswert?

Hmm funktinoiert auch nicht.
Du benutzt aber auch IAR oder Code Composer?
Wie spielst du das Programm auf den Controller?
Irgendwo muss ja ein Unterschied sein.

Gruß Tobias

von Bernd N (Gast)


Lesenswert?

Download and Debug und dann auf Go, mehr mache ich auch nicht. Pack mal 
dein gesamtes Projekt und dann kann ichs hier ausprobieren.

von MT (Gast)


Angehängte Dateien:

Lesenswert?

Hier einmal mein Projektordner

Danke für deine Hilfe

von Bernd N (Gast)


Lesenswert?

Also... wenn ich dein Projektfile verwende bekomme ich die Fehlermeldung 
"broken Options" und der Optimizer steht immer noch auf low.

Also mal Schritt für Schritt:
- Im Workspacefenster ganz oben links dein Prokekt anklicken.
- Ist das Projekt eingefärbt dann Projekt / Options klicken
- General Options Targe ...G2231
- C Compiler Optimization High, Pulldown Size wählen

Der Rest sollte passen.

von MT (Gast)


Lesenswert?

Habe ich funktioniert leider immer noch nicht.

von Bernd N (Gast)


Lesenswert?

Kann ich dir nur noch TeamViewer anbieten :-) mehr fällt mir nicht ein.

von MT (Gast)


Lesenswert?

oder du schickst mir mal deinen Projektordner und ich versuche es damit 
mal.

Gruß Tobias

von Bernd N (Gast)


Angehängte Dateien:

Lesenswert?

Anbei mal der LED blinky code, versuch mal ob das Projekt geht... wenn 
das schon nicht geht dann weiß ich es nicht.

Sollte es funktionieren dann per cut & paste den anderen Code 
hineinwerfen.

von MT (Gast)


Lesenswert?

das Blink LED Programm funktioniert.
Habe anschließend das UART Programm von dir reingeladen und das 
funktinoniert wieder nicht.

Komisch...

kann man irgendwie ne .hex oder .bin file erzeugen und diese aufspielen.
Dann könnte man den Fehler weiter einkreisen ?

Gruß Tobias

von Bernd N (Gast)


Lesenswert?

Ich kann dir leider so nicht sagen was dein Problem ist, sorry.

Ich kann dir nur anbieten mal mit dem TeamViewer ne Session zu machen, 
du kannst mich einladen. Kanns dir dann vorführen und versuchen dahinter 
zu kommen.

http://www.teamviewer.com/de/download/index.aspx

Du brauchst die Software nicht mal installieren, nur die .exe ausführen 
und mich einladen. Dazu bräuchte ich dann deine Nummer.

von MT (Gast)


Lesenswert?

Hmm muss jetzt grade los.
Also vllt ein ander mal hoffe du hast eventuell auch noch wann anders 
mal Zeit und Lust.

Gruß Tobias

von Stefan (Gast)


Lesenswert?

Tobias,
für TXByte ist der Datentyp char nicht ausreichend, du willst ja 
inclusive Start- und Stopbit 10 Bit übertragen.

von Bernd N (Gast)


Angehängte Dateien:

Lesenswert?

@ Stefan, das funktioniert, keine Sorge, siehe Screenshot.

TXByte = (c |= 0x100);

Bei den TI Blogs steht ne Menge falsches Zeug. Hast du ein Launchpad 
dann häng ich dir meine Variante gerne hier herein.

von Bernd N (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Stefan,

du bringst mich immer wieder zum nachdenken :-) eigentlich hast du recht 
aber... anbei mal der original Code von TI mit Quarz. Mein Beispiel 
läuft nur mit dem internen DCO.

Bring mal ein bischen Licht in die Sache :-)

von Bernd N (Gast)


Lesenswert?

Ich habe gerade mal txData |= 0x100; rausgeschmissen und es geht immer 
noch fehlerfrei :-)

von Stefan (Gast)


Lesenswert?

Interessant, das funktioniert tatsächlich mit allen in diesem Thread 
angehängten Programmen.
Die Zeile
TXByte |= 0x100;
kann man dann aber auch noch weglassen und es funktioniert immer noch.

von Stefan (Gast)


Lesenswert?

Ups, viel zu lange selbst die verschiedenen Varianten ausprobiert und 
nicht gesehen, dass in der Zwischenzeit ein paar Beiträge dazugekommen 
sind.
Die Übertragung von 8-Bit Zeichen mit gesetztem höchsten Bit wird mit 
TXByte als char wohl nicht funktionieren.

von Bernd N (Gast)


Lesenswert?

Moin,

>> Die Übertragung von 8-Bit Zeichen mit gesetztem höchsten Bit wird mit
>> TXByte als char wohl nicht funktionieren.

Ja, funktioniert ebenso. Woher kommt das 9te BIT ?

von Stefan (Gast)


Lesenswert?

Bernd,
bei mir funktioniert die Übertragung von 8-Bit Zeichen mit gesetztem 
höchsten Bit nicht wenn TXByte als char definiert ist.
Ich habe es mit deinem HelloWorld Programm vom 17.11. ausprobiert und 
nur den zu übertragenden String geändert.
Wenn ich ASCII 171 (1/2 Zeichen) sende kommt ein + Zeichen an.

Mit dem Problem des Threadstarters hat das aber wohl nichts zu tun.
Ich denke er hat die DCO Kalibrierungswerte gelöscht.

Wenn ich sein Projekt öffne erhalte ich ebenso wie du eine 
Fehlermeldung.
Wenn ich dann das richtige main.c auswähle und das Programm übersetze 
und starte sind bei mir auch die Kalibrierungswerte gelöscht.
Bei den Optionen sollte der Haken bei Debuger - FET Debugger - Download 
- "Allow erase/write acces to locked flash memory" wohl besser nicht 
gesetzt sein wenn unter Flash erase "Erase main and Information memory" 
ausgewählt ist.

Mit einem Launchpad mit aufgelötetem Uhrenuarz hat kann man mit dem "DCO
Calibration Constants Programmer" aus der Beispielprogrammsammlung
http://www.ti.com/lit/zip/slac080 die 1 MHz Kalibrierwerte zusammen mit 
den bei der Value Line Serie im Auslieferungszustand fehlenden Werten 
für 8, 12 und 16 MHz berechnen und ins Information Memory programmieren 
lassen.

Wenn man den Uhrenquarz bestückt sollt man vorher die beiden 0R
Widerstände/Brücken zwischen Quarzanschlüssen und der Steckerleiste
entfernen um einen störungsfreien Betrieb sicherzustellen.

Stefan

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> bei mir funktioniert die Übertragung von 8-Bit Zeichen mit gesetztem
> höchsten Bit nicht wenn TXByte als char definiert ist.

Und was passiert, wenn es als "unsigned char" bzw. korrekt als uint8_t 
definiert ist?

von Stefan (Gast)


Lesenswert?

Mit TXByte als "unsigned char" oder uint8_t passiert genau das gleiche 
wie mit TXByte als char. Das ist aber auch so zu erwarten da die 
Optionen hier so gesetzt sind, dass plain 'char' unsigned ist.

Mit TXByte als "unsigned int" oder uint16_t werden 8-Bit Zeichen mit 
gesetztem höchsten Bit natürlich korrekt übertragen.

von Karl (Gast)


Lesenswert?

Hallo Bernd,

du hast in deinem Beispiel eine Möglichkeit zur Kalibrierung vorgesehen. 
Wie hast du kalibriert? den msp in eiswasser?

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.