mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 PC Kommunikation usart


Autor: Rolf Merz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: SupaChris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Rolf Merz (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So, hier mal mein Programmcode.

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Merz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: szimmi (Gast)
Datum:
Angehängte Dateien:

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

Autor: SupaChris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Merz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: SupaChris (Gast)
Datum:

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

Autor: Rolf Merz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Merz (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Thorsten Hehn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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(...);

Autor: ehde76 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einspruch! __bis_SR() funzt in der IAR...

Autor: Thorsten Hehn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ehde76 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thorsten Hehn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles klar, damit wäre das auch geklärt ;-)

Autor: ehde76 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
  while (!(IFG1 & UTXIFG0));  // wait until Transmit Buffer is ready
  TXBUF0 = RXBUF0;            // copy Receive to Transmit Buffer
  P1OUT ^= 0x01;              // Toggle Port 1.0
}

@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ß

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.