www.mikrocontroller.net

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


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

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

Autor: Sebastian (Gast)
Datum:

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

Autor: Max (Gast)
Datum:

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

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

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

Autor: Max (Gast)
Datum:

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

Autor: can (Gast)
Datum:

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

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.