Forum: Mikrocontroller und Digitale Elektronik msp430xG46x_usart1_19200.c "tested"?


von Stefan M. (stefan_m)


Angehängte Dateien:

Lesenswert?

Hey,

hat schonmal jemand das "msp430xG46x_usart1_19200.c" Codeexsample von TI 
getestet? Das gibt doch eigentlich den empfangen Char zurück?

Jetzt ist die Frage, ob ich meinen H-Term falsch eingestellt habe oder 
was sonst noch falsch sein kann, bei dem Verbindungsaufbau mit dem PC?!
Denn bei mir kommt nix zurück :(
Ein gekreuztes Serialkabel muss man da auch nicht nehmen?

von erik (Gast)


Lesenswert?

Hast du denn auch nen Pegelwandler mit dabei für rs232 ?

mfg Erik

von Stefan M. (stefan_m)


Lesenswert?

Pegelwandler?

von erik (Gast)


Lesenswert?

wenn an RS232 dann entspricht logisch 1 -10Volt
und Logisch 0 +10Volt
also nie direkt anschließen / Pegelwandlung über AD232 bzw Max232

wenn an USB dann braucht du auch nen Adapter. zb If-USB2

mfg Erik

von Stefan M. (stefan_m)


Lesenswert?

Ja, das hab ich schon mal gelesen. Hm. Aber ich hab meinen MSP430FG4618 
auf dem Experimenter Board :) Meint ihr nicht, dass der µC dort 
abgesichert wurde? Ich hab das nun schon angesteckt :( Nicht die 
entsprechenden Teile abgeraucht sind.

Also auch mit so einem Board einen Pegelwandler benutzen. Bzw. hab ich 
gelesen das man die Pegel auch Softwaretechnisch umdrehen kann.
Hat da jemand ein Beispielcode? :)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefan M. schrieb:
> Aber ich hab meinen MSP430FG4618
> auf dem Experimenter Board

Und was exakt mag das sein?

von Stefan M. (stefan_m)



Lesenswert?

Meinst du das ironisch, Rufus? :)

Dann würde ich sagen, ein "verlängerter Arm" mit einer RS232 ohne 
Pegelwandler, wahrscheinlich.
Nein, also im Ernst ... ist es ein Board auf dem man alle Funktionen des 
µC's testen kann ;)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Frage war durchaus ernstgemeint, denn es gibt von ziemlich vielen 
Herstellern ziemlich viele Boards, die irgendwas tun. "Das Experimenters 
Board" ist zu ungenau.

Das von Dir verwendete Board nutzt eine durch Optokoppler galvanisch 
isolierte serielle Schnittstelle.

Diese Schnittstelle nutzt den Signalpegel der Signalleitungen des PCs 
zur Speisung der dem PC zugewandten Seite, das bedeutet, sie 
funktioniert nur dann, wenn die Leitungen 3 (TxD) und 4 (DTR) sinnvollen 
Pegel aufweisen. TxD ist im Ruhezustand 1 (-10V), DTR muss daher auf 0 
(+10V) gesetzt werden.

Das muss Dein PC-Programm erledigen, d.h. Du musst bei H-Term dafür 
sorgen, daß auf DTR dieser Pegel ausgegeben wird.

von Stefan M. (stefan_m)


Lesenswert?

Ok, das hilft mir schon um einiges weiter :)
In H-Term kann man DTR ja direkt anklicken. In dem moment wo ich DTR 
aktiviere, erhalte ich auch ein 0x00 zurück. Dieses wird allerdings als 
Fehler markiert, wenn man sich die Fehler anzeigen lässt.

Ist das normal? Weil es ja im Grunde kein gewolltes Zeichen ist, was ich 
da erhalten habe.

Andere Zeichen ließen sich allerdings nicht senden :(

hach ist das kompliziert mit dieser Schnittstelle . . .

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du könntest ein Oszilloskop verwenden, und Dir die vom MSP430 gesandten 
Daten auf der Seite vor dem Optokoppler ansehen. Auch könntest Du die 
Spannung an den beiden Elkos messen, die auf der PC-Seite der 
Optokoppler zu finden sind.

von Stefan M. (stefan_m)


Angehängte Dateien:

Lesenswert?

Ach ja, das Oszi :)

Irgendwie denke ich da nie dran, wenn ich es verwenden könnte.

Also ich hab jetzt an 3 Punkten gemessen. (siehe Bild rote Punkte)

Vor der Diode D2 bzw. auch dahinter, habe ich -10 V wenn DTR deaktiviert 
und + V wenn DTR aktiviert ist.

Wenn ich aber per Tastatur in H-Term irgend ein Zeichen sende, ist meine 
Spannnung vor bzw. nach R9 immer 0V.
Sporadisch erschien mal ein peak. Aber das könnte wohl auch sonst was 
gewesen sein.

Vor der Diode D3 erhalte ich auch solche Peaks. Allerdings auch nicht 
immer, aber schon häufiger beim Senden eines Zeichens. Kann es sein, 
dass ich nicht zu schnell hintereinander Zeichen senden darf. Aber das 
müsste die Schnittstelle ja alleine regeln können, wie ich gelesen habe.

 Wo genau könnte man noch messen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Miss mal die Spannung am Punkt zwischen C4 und D3, die sollte die 
umgekehrte Polarität der Spannung am Punkt zwischen C3 und D2 haben.

Nur wenn das so ist, bewirkt ein Ausgeben von Daten über UCA0TXD 
(R9-Q1), daß der Ausgang des Optokopplers U2 (Pin6) mit dem richtigen 
Pegel (umgekehrte Polarität zum Signal UCA0TXD) "herumwackeln" kann.

von Stefan M. (stefan_m)


Lesenswert?

Also ... die Spannung zwischen C4 und D3 ist -7V und zwischen C3 und D2 
+ 10V.

Vom PC gesendete Zeichen scheinen doch anzukommen, da ich nach einem 
ENTER an U1 PIN6 und PIN2 einen Peak erhalte.

Ist nur fraglich, wieso das Zeichen nicht als Echo wiedergegeben wird. 
So sollte es ja der Code machen.

Vielleicht schreib ich den Code einfach mal um, dass der µC permanent 
ein Zeichen sendet. Was hälst du davon?

Wäre doch auch ein guter Schritt in die Richtung, wenn man Daten an den 
PC übertragen will, oder? :)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefan M. schrieb:
> Vom PC gesendete Zeichen scheinen doch anzukommen, da ich nach einem
> ENTER an U1 PIN6 und PIN2 einen Peak erhalte.

Für den Empfang durch den MSP430 sind die von mir angesprochenen 
Spannungspegel auch nicht relevant, die sind nur wichtig, damit der 
MSP430 an den PC senden kann.

Damit der PC Daten empfangen kann, müssen diese mit (halbwegs) korrektem 
RS232-Signalpegel an der RxD-Leitung des PCs anliegen. Also muss die 
Optokoppler-Mimik irgendwie diese Pegel erzeugen können, da sie aber 
keine dedizierte Versorgungsspannungsquelle hat, werden hier Signalpegel 
genutzt, die der PC liefert, um diese Versorgungsspannungsquelle 
nachzubilden. Und also müssen die "missbrauchten" PC-Leitungen den 
jeweils richtigen Pegel haben, damit das funktionieren kann.

Wesentlich einfacher wäre die Angelegenheit für Dich, wenn Deine 
Testplatine statt einer galvanischen Trennung mit Optokopplern einen 
normalen RS232-Leitungstreiber mit integrierten Pegelwandlern à la 
MAX232 verwenden würde, denn dann würde die Testplatine auch dann 
korrekte Pegel senden können, wenn gar keine Gegenstelle angeschlossen 
ist.

Stefan M. schrieb:
> Vielleicht schreib ich den Code einfach mal um, dass der µC permanent
> ein Zeichen sendet. Was hälst du davon?

Auf jeden Fall!

von Stefan M. (stefan_m)



Lesenswert?

Hi,

ich habe jetzt mal den Beispiel Code "msp430xG46x_usart1_uart_2400.c" 
versucht umzuschreiben.

Aber irgendwie kommt bei meinem H-Term nichts an.
Die Einstellungen seht ihr im anghängten Bild. Die 3 Zeichen die 
empfangen wurden, sind durch das betätigen von dem DTR Button 
entstanden.

Hab ich irgendwas in meinem Code übersehen?

Das das TXBUF1 ready ist, sehe ich ja auch an meinem P5.1 Port an dem 
eine rote LED hängt, die leuchtet bzw. blinkt, nur eben so schnell das 
man es nicht sieht ^^

Dennoch sehe ich den Buchstaben der vorher eigentlich übermittelt werden 
soll nicht bei H-term.

Wo ist denn da mein Fehler?

von Erik (Gast)


Lesenswert?

Hallo Stefan,

ganz sicher bin ich mir nicht .
laut dem Experimentierhandbuch sind die Seriellen am Port 2 dran 
.Seite18
UCA0RDX  ist P2.5
du definierst sie am Port 4 .

mfg Erik

von Stefan M. (stefan_m)


Lesenswert?

Moin moin,

leider liegt es nicht daran.
Hab die Zeile mal Versuchsweise in  P2SEL |= 0x30; geändert, was aber 
keine Auswirkungen hat.
Im Datenblatt Datasheet.SLAS508H - msp430fg4618.pdf steht:

P2.4/UCA0TXD --> USCI_A0/UART or IrDA mode
P2.5/UCA0RXD --> USCI_A0/UART or IrDA mode

P4.1/URXD1 --> receive data in - USART1/UART mode
P4.2/UTXD1 --> transmit data out - USART1/UART mode

Diese Information deckt sich auch mit den Angaben aus dem Datenblatt des 
Experimentersboard auf Seite 18.

Es muss also woanders liegen.
Mein RS232 Kabel ist auf jedenfall das richtige, dass hab ich gestern 
nochmal druchgemessen. Und beim betätigen von dem DTR Button in H-Term 
erhalte ich ja auch ein undefinierbares Zeichen im Empfangsfenster von 
H-Term. Von daher besteht ja irgend eine Verbindung. Und die Baudrate 
von 2400 stimmt auch. Habe diese nochmal mit dem Userguide auf Seite 
17-16 überprüft.

Was könnte es noch sein?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Es wird nach wie vor der inkorrekte Pegel der Handshakeleitungen sein, 
der dafür sorgt, daß die Optokopplermimik nicht richtig funktioniert.

> Mein RS232 Kabel ist auf jedenfall das richtige, dass hab ich gestern
> nochmal druchgemessen.

Das machst Du jetzt woran fest? Das muss ein 1:1-Kabel sein, kein 
"Nullmodemkabel".


Hast Du denn zwischenzeitlich

> Vielleicht schreib ich den Code einfach mal um,
> dass der µC permanent ein Zeichen sendet.

mal umgesetzt?


Hast Du mal ein Oszilloskop an die schon vor längerer Zeit 
besprochenen Anschlüsse gehalten und dem dauernden Senden zugesehen?

von Stefan M. (stefan_m)


Angehängte Dateien:

Lesenswert?

>> Mein RS232 Kabel ist auf jedenfall das richtige, dass hab ich gestern
>> nochmal druchgemessen.
>
> Das machst Du jetzt woran fest? Das muss ein 1:1-Kabel sein, kein
> "Nullmodemkabel".

Hab das Kabel mit einem Durchgangsprüfer durchgemessen. Pin 2 kommt auch 
auf Buchsenloch 2 und Pin 3 kommt auf Buchsenloch 3 an.

Den umgesetzten Code, dass der µC nur ein Zeichen sendet, habe ich im 
Anhang vom Beitrag mit dem Datum 28.03.2011 17:03. (3 Beiträge weiter 
oben ;))


Mit diesem Code erhalte ich beim Senden über den PIN 4.0/UTXD1 ein 
Signal, welches man im Bild USART_permanent_Sending.jpg sehen kann.

Der Pegel an den Messpunkten zwischen C4 und D3 ist -6V. Zwischen C3 und 
D2 liegen nur -3,5V an. Vor D2, also zum RS232 Connector hin, habe ich 
-10V.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Stefan M. schrieb:
> Hab das Kabel mit einem Durchgangsprüfer durchgemessen. Pin 2 kommt auch
> auf Buchsenloch 2 und Pin 3 kommt auf Buchsenloch 3 an.

Gut. Und was ist mit Pin 4, gibt es den auch?

Wie sieht das Oszillogramm aus, wenn Du direkt an Pin 2 der DB-9-Buchse 
misst (bei Oszilloskop-Masse an Pin 5)?

von Stefan M. (stefan_m)


Lesenswert?

Pin 4 ist auch an der Buchse an 4. Stelle.

Pin 2 zur Masse Pin 5 hat -50mV DC ...

Hm, ist es vielleicht doch so, wie Erik sagte, dass UTXD1 nicht zu 
meiner RS232 Verbindung auf meinen Board führt. Je länger ich mir den 
plan betrachte aus dem Userguide des Experimenters Board, um so 
logischer erscheint es mir, dass UTXD1 nur ein offener PIN zum Senden 
ist, aber nicht an meine RS232 Schnittstelle führt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wie der von Dir in Beitrag "Re: msp430xG46x_usart1_19200.c "tested"?" 
gepostete Schaltplan zeigt, werden UCA0TXD und UCA0RXD genutzt.

von Stefan M. (stefan_m)


Angehängte Dateien:

Lesenswert?

Ja, korrekt.

Hab das Programm jetzt auch mal komplett auf UCA0TXD umgeschrieben und 
siehe da, ein Zeichen nach dem anderen kommt im Terminal an. Allerdings 
nicht das, welches eigentlich übertragen werden sollte.

Wer ahnt denn auch, dass TI Beispielprogramme für einen offenen Pin 
erstellt ^^ Aber wer lesen kann, ist klar im Vorteil.

Danke dir Rufus und auch ein Danke an Erik ;)

Wieso aber erhalte ich im H-Term nur "00" ? Wollte eigentlich ein "H" 
haben :D

Anbei mein umgeschriebender Code.

von Roland N. (eroli)


Lesenswert?

Hi Stefan,

sag mal, funktioniert der von dir gepostete Code eigentlich?
Kann man damit mit der RS232 Buchse am Experimenters Board und dem PC 
kommunizieren?

Sitze derzeit genau an dieser Stelle fest.

(sorry fürs ausgraben, aber ich wurde so nett von einigen 
Forenmitgliedern auf diesen Thread hingewiesen ;-) )

von Stefan M. (stefan_m)


Angehängte Dateien:

Lesenswert?

Hi,

also das Programm funktioniert so wie ich es in dem letzten Post 
beschrieben habe. Er sendet und empfängt, jedoch gibt mit H-Term immer 
eine 0 aus...sprich irgendwo in der Übertragung ist noch ein Fehler.

Hab das Programm auch schon erweitert, bei dem eine Übertragung von 
mehreren Zeichen gemacht wird. Das klappt so einigermaßen, bringt aber 
auch manchmal noch kauderwelsch beim übertragen hervor :)

Probier mal den Code im Anhang. Aber wie gesagt, manchmal haperts noch. 
Woran das liegt weiß ich nicht. Arbeite momentan auch nicht weiter dran.
Von daher, viel Erfolg ;)

von Roland N. (eroli)


Lesenswert?

Hi,

vielen Dank für die schnelle Antwort in diesem doch etwas älterem 
Thread.

Ich werde dein Snippet morgen mal testen und dann berichten :-)

Ciao,
Roland

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.