Forum: Mikrocontroller und Digitale Elektronik MSP430 PC Kommunikation usart


von Rolf Merz (Gast)


Lesenswert?

Hallo,

ich versuche gerade ine Kommunikation zwischen meinem MSP430 und dem PC
herzustellen. Ich habe mich da erst einmal an die Anleitung von
mathar.com gehalten.

Leider bekomme ich das ganze nicht ans Laufen. Die Verdrahrung dürfte
richtig sein, mehrfach überprüft.

Als Terminalprogramm hab ich mal ZOC installiert. IC denke oder hoffe,
dass es nur an der Einsellung von ZOC liegt. Kann mir da mal jemand
weiterhelfen und sagen, wie ich das Programm konfigurieren muss?


Vielen Dank schonmal.

Gruß Rolf

von SupaChris (Gast)


Lesenswert?

Poste doch mal dein Programmcode, speziell die Initialisierung der UART.
Hast du einen Quarz dran, oder benutzt du den DCO mit eingebautem
oszillator? Wenn letzteres, dann ist es Glückssache, dass das Timing
stimmt....

von Rolf Merz (Gast)


Angehängte Dateien:

Lesenswert?

So, hier mal mein Programmcode.

von szimmi (Gast)


Lesenswert?

Hmmm,
sieht alles ganz gut aus. Hast Du es mal mit dem Hyperterminal
probiert? Kannst ja auch erstmal vom MSP aus ein Zeichen senden, um
erst mal diesen Zweig zu prüfen.

von Rolf Merz (Gast)


Lesenswert?

habs mal mit dem hyperterminal probiert, aber weiß irgendwie nicht,
welche einstellungen uch da vornehmen muss. habs auch schon mit zoc
probiert, aber irgendwie bekomme ich es nicht ans laufen.

von Karl H. (kbuchegg)


Lesenswert?

Na ja das Gegenstück zu de´m, was du in deinen µC
gebrannt hast:

          // 8 Data Bits, 1 Stop Bit, no parity (8N1)
          // 9600 baud aus 32.768 kHz erzeugen

Wenn die Kommentare stimmen: 9600 Baud, 8 Bits, 1 Stop Bit,
keine Parität.

Hast du schon mal deine Hardware überprüft? Wenn du den
Prozessor mal abklemmst und den Tx Pin mit dem Rx Pin
verbindest, dann müsste jeder Tastendruck am PC ein entsprechendes
Echo erzeugen. Damit hast du die ganze Verbindungskette vom
PC über das Kabel über die RS232 Umsetzer und zurück
geprüft.

von szimmi (Gast)


Angehängte Dateien:

Lesenswert?

Hmmm,
mit den im Anhang gezeigten Einstellungen beim Hyperterminal muesste es
gehen (ich habe nur noch COM3 frei, bei Dir isses wahrscheinlich COM1).

von SupaChris (Gast)


Lesenswert?

P3DIR muss noch gesetzt werden, sonst kann der MSP nix senden. Die
Richtung muss auch bei der Zweitfunktion des Ports richtig gesetzt
werden.

(MSP430-Praxisbuch, S. 178) Irgendwie fehlt das meist in den
Demoprogrammen bei TI. Einzige Ausnahme ist meines Wissens die SPI
Schnittstelle.

von Rolf Merz (Gast)


Lesenswert?

hallo,

ich habe die pins 2 und 3 vom com1 einfach mal gebrückt. dann
funktioniert alles mit dem hyperterminal. meine schaltung funktioniert
aber noch nicht.

kann man irgendwie messen, ob der max232 defekt ist. ich habe ihn schon
getauscht, aber könnte ja sein.

P3DIR habe ich jetzt auf P3DIR = 0x10; gesetzt.

von szimmi (Gast)


Lesenswert?

Hiho,
nun ist die Zeit für einen Oszi gekommen, denke ich. Wenn Du einen Dein
Eigen nennst, würde ich wie folgt vorgehen:
1. Überprüfung des Pfades PC-RS232-MSP
Hyperterminal mit den genannten Parametern öffen, Tasten
betätigen,Pegel am MSP-RxD messen
2. Überprüfung des Pfades MSP-RS232-PC
Programm dahingehen ändern, dass der MSP ständig Zeichen schickt, z.B.
im main TXBUF0 befüllen und in der ISR weiter senden.
Hier insbesonder mal die Bitzeit ausmessen.
Wenn beides o.k. erscheint und trotzdem nix läuft, dann erstmal ein
Bier trinken, schlafen gehen und morgen nochmal probieren.

von Karl H. (kbuchegg)


Lesenswert?

> ich habe die pins 2 und 3 vom com1 einfach mal gebrückt. dann
> funktioniert alles mit dem hyperterminal. meine schaltung
> funktioniert
> aber noch nicht.
>
> kann man irgendwie messen, ob der max232 defekt ist. ich habe ihn
> schon getauscht, aber könnte ja sein.

Nein ich meinte, du setzt die Brücke direkt am µC!
Damit muss das Signal vom PC durch das Kabel, durch den MAX232,
wird dann dort von deiner Brücke wieder durch den MAX232
und das Kabel zurückgeschickt.

von SupaChris (Gast)


Lesenswert?

Ein normaler MAX232 wird am MSP430 nicht funktionieren, der arbeitet
nicht bei 3,3V. Da musst du schon einen MAX3232 o.ä. nehmen

von Rolf Merz (Gast)


Lesenswert?

Hallo,

ein Oszi habe ich nicht zur Hand. Das muss ausfallen. Ich habe jetyt
mal die Bruecke am MSP geschlagen und festgestellt, dass anscheinend
nix durch den max durchkommt. Entweder funktioniert das Ding nicht
richtig oder ich habe da einen Feher bei der Beschaltung des max
gemacht.

ICh w[rde sagen die Beschaltung ist richtig, wenn ich so in das
Datenblatt schaue. Werde mir dann wohl erst einmal einen anderen Max
besorgen muessen.

Gru-
Rolf

von Rolf Merz (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

leider habe ich mein Problem noch nicht gelöst. Hatte es erst einmal
beiseite gelegt und ruhen lassen und wollte mich jetzt nochmal damit
beschäftigen.

Ich habe direkt am Mikrocontroller die pins gebrückt. Nun müsste ja die
taste, die ich am Rechner drücke einfach wieder zurückgegeben und im
hyperterminal angezeigt werden. Es wird auch was angezeigt. Leider aber
nicht die gedrückte Taste. Es werden irgendwelche Zeichen angezeigt.


Hat jemand eine Idee, woran das liegen könnte?

Im Anhang ist nochmal mein Programm.

Gruß
Rolf

von Thorsten Hehn (Gast)


Lesenswert?

Hi Rolf,

dumme Frage vorneweg: Welchen MSP430 hast du? Ich verwende den
MSP430F437, dessen TxD-und RxD-Pins liegen an Port 2 und nicht an Port
3, wie im Mathar-Tutorial beschrieben.

Habe den MAX232 an meinem MSP430F437 laufen, in der Hinsicht muss ich
also SupaChris widersprechen. Natürlich musst du den MAX mit 5V
speisen, die Schaltpegel liegen aber unterhalb 3,3V, passt also.

Ich habe auch einige Zeit gebraucht, den UART zum Laufen zu bringen.
Ganz wichtig ist es, im Hyperterminal die Flusssteuerung auszuschalten,
also KEIN Xon/Xoff oder was auch immer, sonst geht mal garnix. Probier
doch testweise mal, den UART ohne Interrupt zu betreiben. Kommentier
also zunächst mal die Zeilen
IE1 |= URXIE0 + UTXIE0;
und
_BIS_SR(LPM3_bits + GIE);
aus.
Schreib dann irgendein Zeichen in TXBUF0 und frag das Interrupt-Flag
ab, bevor du weiteren Code ausführst:
TXBUF0 = 'H';
while ((IFG1 & UTXIFG0)==0);
...

Jetzt solltest du einfach das Zeichen "H" im Hyperterminal sehen.
Wenn das funktioniert, kannst das Programm schrittweise erweitern.

Viel Glück & Grüße
Thorsten

PS: Welchen Compiler verwendest du? Ich verwende den Compiler von IAR
Embedded Workbench, dort lautet der Status-Register-Befehl
__bis_SR_register(...) und nicht __bis_SR(...);

von ehde76 (Gast)


Lesenswert?

Einspruch! __bis_SR() funzt in der IAR...

von Thorsten Hehn (Gast)


Lesenswert?

Zumindest gibt es __bis_SR() in dem "MSP430 IAR C/C++ Compiler
Reference Guide" (März 2006) nicht. Das Kommando selbst hab ich nie
ausprobiert. Aber ist ja auch egal, daran wird es wohl nicht liegen...

Gruß
Thorsten

von ehde76 (Gast)


Lesenswert?

hallo,
meinte ja auch nicht das Problem daranliegen könnte, wollte nur darauf
hinweisen, das es funktioniert... __BIS_SR() ist noch eine Intrinsic
aus der IAR Version 1.x (nachzulesen im Migration Guide), und wird über
die in430.h mit eingebunden... BIS_SR_register ist das Äquivalent aus
der der IAR Version 2.x, beide ausdrücke bewirken das gleiche...

Gruß ehde76

von Thorsten Hehn (Gast)


Lesenswert?

Alles klar, damit wäre das auch geklärt ;-)

von ehde76 (Gast)


Lesenswert?

aber leider nicht das problem vom rolf... ich lasse zuerst ein ganz
simples echo vom uC senden und lasse zusätzlich noch eine led toggel,
um sehen das die verbindung auch wirklich i.o. ist und das der
interrupt auch ausgelöst wird...
1
#pragma vector=UART0RX_VECTOR
2
__interrupt void usart0_rx (void)
3
{
4
  while (!(IFG1 & UTXIFG0));  // wait until Transmit Buffer is ready
5
  TXBUF0 = RXBUF0;            // copy Receive to Transmit Buffer
6
  P1OUT ^= 0x01;              // Toggle Port 1.0
7
}

@SupaChris
da muss ich auch in einem punkt wiedersprechen P3DIR muss nicht gesetzt
werden, das wird automatisch durch die auswahl als peripheral geregelt,
probier es aus...

gruß

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.