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?
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.
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.
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.
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.
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.
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
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.
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.
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
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
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
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.
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.
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
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.
@ 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.
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 :-)
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.
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.
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 ?
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
> 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?
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.