Forum: Mikrocontroller und Digitale Elektronik MSP 430: Beide USARTs nutzen


von Max (Gast)


Angehängte Dateien:

Lesenswert?

Hallo.

Ich habe einen MSP 430 per Max 232 an die COM1 Schnittstelle des PCs
angeschlossen. Dafür nutze ich die USART0 (also die erste USART
Schnittstelle). An der zweiten USART-Schnittstelle (USART1) hängt ein
Funkmodul. Die wesentliche Aufgabe des ängehängten Programms soll die
sein, dass der MSP den ankommenden Buchstaben (einen Character) vom PC
(über den MAX232) von der RX Leitung des USART0 auf die Transmitleitung
des USART1 bringt.Also einfach weiterreicht. Das klappt.
Auf der RX-Leitung des USART1 kommt hingegen ein String mit vier
Stellen an. (Kommt von einem anderen Funkmodul+MSP430) Dieser String
soll auf die RX-Leitung des USART0 gechoben werden. Von da aus geht es
dann wieder per MAX 232 zum PC. Nur leider kommt vom String nur die
letzte Stelle an. Die ersten drei sind futsch. Was kann ich dagegen
machen?


PC-MAX232-USART0-USART1-Funkmodul <> Funkmodul-MSP430

von Sebastian (Gast)


Lesenswert?

In der while(1)-Hauptschleife hast du die TX-Flag-Abfrage zwei mal drin.
Die habe ich ja schon in der SendUSARTc() eingebaut, die brauchst du
nicht noch mal. Und wieso ein wait(5000)? Das ist überflüssig, da die
USART-Synchronisation auch ohne Delays funktioniert (RS232 geht ja
alles in Hardware beim MSP430).

von Max (Gast)


Lesenswert?

Du meinst so:

 while (1)
  {                                     // Hauptroutine
    while (!(IFG1 & URXIFG0));          // warten, bis zeichen vom PC
ankommt
    SendUSART1c(RXBUF0);
    wait (5000);               // warten, bis zweites Funkmodul den 
String
gesendet hat
    //while (!(IFG1 & UTXIFG0));          // warten, bis USART0
TX-buffer sendebereit
    SendUSART0c(RXBUF1);
   }

Das bringt aber auch nicht den ganzen vierstelligen String zum
Vorschein. Es erscheint nur die letzte Stelle.

wait (5000) muss sein, denn vorher ist der RXBUF1 noch leer.

von Max (Gast)


Angehängte Dateien:

Lesenswert?

Um das Problem etwas einzugrenzen, will ich erstmal auf den
USART1,Funnkmodul,zweiter MSP usw. verzichten.
Wie gesagt, um die Sache überschaubar zu halten, möchte ich einen
String (zB: 3456) per Terminal an den MSP430 weitergeben. Dieser String
landet dann im Buffer RX0.Und dieser Inhalt (also 3456) soll direkt
wieder an den Rechner zurück gegeben werden.
Ich habe mir überlegt, dafür eine Variable 'string' anzulegen, in
welche  der Inhalt vom RX0 Buffer geschrieben werden soll.Diese läßt
sich dann mit SendUSART0 zum PC schicke.Das würde dann so aussehen:

  while (1)
  {
    while (!(IFG1 & URXIFG0));
  //SendUSART1c(RXBUF0);
  //string = RXBUF0;
  SendUSART0("Inhalt von RXBUF0: ");
  SendUSART0(string);
  SendUSART0c(13);
  }

Klappt aber nicht, da ich den Inhalt von RXBUF0 nicht in 'string'
bekomme....Wer weiß Rat??

von Max (Gast)


Lesenswert?

Das mit dem String in dieser Form war natürlich grober Unfung. Habe ich
nun selber gemerkt. Wenn ich die Eingabe vom PC direkt wieder auf dem
Bildschirm zurückhaben will, ist das sehr simpel zu lösen:

  while (1)
  {
    while (!(IFG1 & URXIFG0));
  {
  TXBUF1 = RXBUF0;  //zum usart1 bzw.funkmdul schicken

  }
    while (!(IFG1 & UTXIFG0));
  {
    TXBUF0 = RXBUF0;      //beliebiger string geht zurück zum  pc
  }
   }


Ändere ich aber die Zeile 'TXBUF0 = RXBUF0;' in'TXBUF0 = RXBUF1;',
um den ankommenden vierstelligen String anzuzeigen, so sind die ersten
drei Stellen abgeschnitten.

Ich verstehe einfach nicht, warum das so ist!

von can (Gast)


Lesenswert?

Hallo Max,
Kannst du mir die Schamatic der Schaltung herschicken, ich bin sehr
neugierig.
MFG
Can.

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.