www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS232 mit MSP430FG4618


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin gerade dabei eine Kommunikation zwischen PC und MSP430FG4618 
über RS232 mit IAR Programmierungsumgebung zu erstellen.
Ich habe Source Code von http://www.mathar.com/msp_usart1.html benutzt 
und an meinem MSP entsprechend angepasst, aber es läuft einfach nicht. 
Ich benutze ACLK= 6MHz, baudrate = 9600, Pin 4.0=TxXD und Pin4.1=RxD. 
Für MAX232 benutze ich pin9=R1out und Pin10=T1out. Wenn ich das Programm 
über JTAG (von olimex mit LPT1 ) debugge, wird ersten das Interrupt 
nicht aufgerufen und zweiten es kommt zum Fehler „could not get target 
status“. Was habe ich falsch gemacht?

Gruss,
Rinny

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für den aller ersten Test empfehle ich erst mal einfach Zeichen vom MSP 
rauszusenden (Ohne Interrupt). Dann sieht man wenigstens ob die DAten 
ordentlich zum PC kommen oder ob da schon ein Problem ist.
while(1)
{
  while (!(IFG2 & UTXIFG1));  // Warten bis TX Buffer leer
  TXBUF1 = '5';               // Testzeichen senden
}

> es kommt zum Fehler „could not get target status“.
Wenn das erste Zeichen einteffen sollte? Hört sich nach Hardwarefehler 
(Kurzschluss) an.

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

Bewertung
0 lesenswert
nicht lesenswert
Hi Jörg,
Ich konnte ohne Interrupt auch kein einziges Zeichen empfangen. Ich 
benutze Hyperterminal mit folgede Einstellung, 8N1, 9600 und keine 
Flusssteuerung. Die Meldung „could not get target status“ kommt immer 
bei Dubugging nach ca. 10 sec. Ich denke auch, dass es ein 
Hardwarefehler ist. Nur ich weiss es nicht, wie ich es rausfinden kann? 
Im Anhang habe ich die Beschlatung vom JTAG und RS232 mitgesendet.
Danke & Gruss
Rinny

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Kombination MAX232, 5V und MSP430 lässt mich übles ahnen.

Autor: Rinny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Christian,
Hast Du bitte einen Lösungsvorschlag? Sollte ich den MAX232 gegen ein 
anderen austauschen?
Danke

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn der mSP noch lebt nimm einen MAX3232

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der MSP430 verträgt nur 3,3V, seine Eingänge sind nicht mal 5V-tolerant. 
Also die 5V weg, und wie gesagt einen MAX3232 nehmen. Eventuell ist der 
MSP aber hinüber....

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Außerdem ist der Code oben für den USART. Der MSP430FG4618 verfügt aber 
über eine USCI Schnittstelle anstatt über eine USART. Am Besten du 
schaust dir auch mal die Code Examples auf der Homepage von TI an.

Autor: Rinny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für die Hinweise.

Ich habe in den Datenblättern RS232 nachgeschaut, die Eingangsspannung 
am Pin Tin und Rout darf max. -0,3V bis Vcc(+5v) +0,3V sein.  Aber die 
erlaubte Eingangsspannung am Pin von µC darf zwischen -0,3V bis 
Vcc(+3,3v) +0,3V sein! Es ist tatsächlich möglich, dass der µC schon 
kaputt ist :(

Wie kriege ich es raus, dass der µC wirklich defekt ist?
Ich habe die anderen Teile wie DAC und ADC getestet, die funktionieren 
noch.

Ich werde noch den MAX232 gegen MAX3232 auswechseln, und nochmal in 
Betrieb nehmen.

@Michael: wie ich verstanden haben, kann ich USCI (p4.6/4.7) und USART 
(p4.0/4.1) für RS232-Schnittstelle auswählen, richtig? Ich habe beide 
ausprobieren, aber beide auch keinen Erfolg. Hyperterminal empfängt kein 
Zeichen.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, tausch erst mal den MAX aus, und dann kannst du erst mit 
Sicherheit sagen, ob der RXD Eingang geschrottet ist oder nicht. Mit 
Glück geht er noch.
Achja, den MAX3232 musst du natürlich dann mit 3,3V versorgen. Sonst hat 
die ganze Sache keinen Sinn.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Rinny (Gast)

>Vcc(+3,3v) +0,3V sein! Es ist tatsächlich möglich, dass der µC schon
>kaputt ist :(

Möglich, aber unwahrscheinlich.

>Ich habe die anderen Teile wie DAC und ADC getestet, die funktionieren
>noch.

Na dann lebt er noch, und aller Wahrscheinlichkeit nach auch der Rest.
Ein einfacher 4,7 kOhm Widerstand zwischen dem RX-Pin des MAX232 und dem 
RX deines MSP reicht als Pegelwandler.

MFG
Falk

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja, Entschuldigung.
Ich hatte vergessen, dass im MSP430FG4618 beide Schnittstellen 
implementiert sind.

Autor: Rinny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt MAX3232 eingetauscht und es klappt immer nocht nicht. Ich 
benutzt ein USB To RS232 als Kabel für serielle DÜ, da mein Labtop kein 
RS232 Anschluss hat. Hat jemand eine Erfahrung damit? Könnte der Fehler 
an den Kabel liegen? Hier sind paar Werte von MAX3232:
T2OUT 3,827 V, Rechteck Signal
T2IN  0
R2OUT 3,3 V,   Konstant
R2IN  6,5 V, Sägelzahn Signal

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal deinen Code nochmal an, und sag mir, was deiner Meinung 
nach passiert, nachdem du das erste Zeichen empfangen hast und aus der 
ISR zurückkehrst.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahrscheinlich ist das Problem viel einfacher. Hast du diesen Satz im 
User Guide gelesen?:

"Each bit in each PxDIR register selects the direction of the 
corresponding I/O
pin, regardless of the selected function for the pin. PxDIR bits for I/O 
pins that
are selected for other module functions must be set as required by the 
other
function."

Du musst also den TXD Ausgang erst mal mit P4DIR auf Ausgang schalten.

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn ich selber auch immer die SEL Register passend zum UART Pin 
stelle, ist das glaub ich bei den F1xx und F2xx Typen nicht notwendig, 
kann bei den "FG" Spezialtypen natürlich anders sein.
Ein Blick ins Datenblatt sollte da klarheit verschaffen.

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Edit: Meine natürlich die DIR Register :)

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, beim F1611 ist es eigentlich auch nicht notwendig. Laut 
Anleitung aber schon.

@Rinny: Klappt denn nicht mal das Echo-Demo von TI?
Kommt immer noch der Fehler vom Debugger? Das könnte am LPM3 liegen, 
probier mal ohne LPM.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das DIR Bit ist wichtig, wenn ein Portpin zwei Special Functions hat. 
Über das Richtungsbit kann man dann hier auswählen.

Autor: Rinny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe alles probiert und es klappt immer noch nicht. :_(
Es fürchte, dass das Problem an extern Clock(ACLK) liege. Ich habe in 
den Code zwar gesagt, dass MSP den ACLK benutzten soll, aber ich habe 
vorher sie nicht aktiviert. Muss man per JTAG sie erstmal aktivieren 
oder nicht? Und wie?
Danke euch & Gruss
@Christian R. : hab in User Guide nachgelesen, braucht man nicht extra 
den PxDIR register für Tx setzen. (hab trotzdem doch gesetzt und 
ausprobiert!)

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also standardmäßig läuft der MSP immer erst mal auf dem DCO-Takt für die 
CPU. Wenn du einen hochfrequenten Quarz an den ACLK dran baust, musst du 
den Oszillator erst ma auf HF-Modus umschalten.
Das geht per Programmcode. Mit JTAG hat das nix zu tun.
Bei den alten MSPs war´s zumindest so, dass der X1 Oszillator 
standardmäßig für einen Uhrenquarz ist. Ist sicher bei den aktuellen 
auch noch.
Gib den ACLK doch mal an dem entsprechenden Pin aus, und schau mit dem 
Oszi.

Und in meinem user Guide steht es so drin, dass man das DIR Register 
setzen muss, auch wenn man die Zweitfunktion benutzt. Kann aber sein, 
dass es wie bei den alten MSPs schlussendlich doch egal ist. Ich setze 
es immer mit, um auf Nummer sicher zu gehn.

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

Bewertung
0 lesenswert
nicht lesenswert
Lieber Christian,
Ich bin jetzt am Ende und bin so verzwifelt. Ich habe jetzt mit dem TI 
Code probiert, aber wieder erfolgslos. Ich poste mal den Code. Viellicht 
weißt Du oder jemand, was ich falsch gemacht habe.
Hier sind meine Anschlüsse:

MSP430                    MAX3232                 Sub-D9(female)
4.1   4.0              10    9     8     7            2      3
Rx    Tx               Tin  Rout  Rin  Tout           Tx     Rx
|      |                |    |     |     |             |      |
|      ------------------    |     |     ---------------      |
------------------------------     ----------------------------

Ich benutze Hyperterminal und COM9 mit 8N1, 9600 und ohne 
Flusssteuerung. Noch eine Frage, was bedeutet es?
do
  {
  IFG1 &= ~OFIFG;                           // Clear OSCFault flag
  for (i = 0x47FF; i > 0; i--);             // Time for flag to set
  }
Grussssss

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ja nicht klappen, wenn du du TX (Ausgang) vom MSP auf TX (Ausgang) 
vom PC legst. Bei RX demzufolge genauso.

Desweiteren musst du den XT1-Oszillator auf HF-Quarz einstellen, wie das 
bei den neuen MSPs geht, weiß ich nicht, schau mal in den User Guide. Du 
solltest auch die zu deinem Quarz passenden Last-Kapazitäten 
einschalten, bzw wenn die internen nicht reichen, externe noch ran 
löten. Jeder Last-Kondensator muss doppelt so groß sein, wie die im 
Datenblatt deines Quarzes angegebene Lastkapazität. Erst dann schwingt 
der richtig.
Bei dem Beispiel stimmen auch die Teilerfaktoren nicht, ich denke du 
hast einen 6MHz Quarz dran?

Dieses Programmstück da aktiviert den Quarzoszillator und wartet 
solange, bis der 32Khz Quarz stabil schwingt, das kann nämlich eine 
weile dauern.

Autor: Rinny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kann ja nicht klappen, wenn du du TX (Ausgang) vom MSP auf TX (Ausgang)
vom PC legst. Bei RX demzufolge genauso.

Meine Zeichnung is etwa verwirrt. Das ist eine Sub-D-Buche, die sich auf 
der Delevope Board befindet. An der Buche wird mit einer Sub-D-Stecker 
(RS232 Kabel) mit dem PC verbindet.


>Bei dem Beispiel stimmen auch die Teilerfaktoren nicht, ich denke du
hast einen 6MHz Quarz dran?

Also U1BR0 = 0x71; U1BR1 = 0x02;  U1MCTL = 0x4A;
Richtig? für 9600 Bit/s


>Desweiteren musst du den XT1-Oszillator auf HF-Quarz einstellen

hab ich gemacht:
1. U1TCTL |= SSEL0;    // UCLK = ACLK
2. FLL_CTL0 |= XTS_FLL (User Guide sagt: für Register FLL_CTL0 muss 
XTS_FLL gleich 1 setzen, damit High frequency mode eingeschlatet werden 
kann.


>Du solltest auch die zu deinem Quarz passenden Last-Kapazitäten
einschalten, bzw wenn die internen nicht reichen, externe noch ran 
löten.

Das werde ich noch machen.

Vielen Dank! ;-)

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rinny wrote:
>>Kann ja nicht klappen, wenn du du TX (Ausgang) vom MSP auf TX (Ausgang)
> vom PC legst. Bei RX demzufolge genauso.
>
> Meine Zeichnung is etwa verwirrt. Das ist eine Sub-D-Buche, die sich auf
> der Delevope Board befindet. An der Buche wird mit einer Sub-D-Stecker
> (RS232 Kabel) mit dem PC verbindet.

Dann musst du aber ein Nullmodem-Kabel benutzen, mit gekreuzten 
RX/TX-Leitungen

>
>>Bei dem Beispiel stimmen auch die Teilerfaktoren nicht, ich denke du
> hast einen 6MHz Quarz dran?
>
> Also U1BR0 = 0x71; U1BR1 = 0x02;  U1MCTL = 0x4A;
> Richtig? für 9600 Bit/s
>
Ja.

>>Desweiteren musst du den XT1-Oszillator auf HF-Quarz einstellen
>
> hab ich gemacht:
> 1. U1TCTL |= SSEL0;    // UCLK = ACLK
> 2. FLL_CTL0 |= XTS_FLL (User Guide sagt: für Register FLL_CTL0 muss
> XTS_FLL gleich 1 setzen, damit High frequency mode eingeschlatet werden
> kann.
>

Das stand aber nicht im Code des letzten Postings. Ob das eine Register 
ausreicht, weiß ich nicht.

>>Du solltest auch die zu deinem Quarz passenden Last-Kapazitäten
> einschalten, bzw wenn die internen nicht reichen, externe noch ran
> löten.
>
> Das werde ich noch machen.

Bitte richtig ausrechnen, Formel im User-Guide.

> Vielen Dank! ;-)

Bitte.

Autor: Rinny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Christian,

Vielen Dank für Deine Hilfe.

Aus Frust habe ich einfach mal die Quarz ausgewechselt wie im Quellcode 
von TI steht, also 32,768 kHz.

Und es läuft! Leider weiss ich nicht genau, wo ran das Fehler lag?
Ob die Quarz zu hoch war 6 MHz?

Auf jedenfalls freue ich mich riesig.
Nun kann ich endlich weiter damit arbeiten.

@ Alle

Es kommt allerdings ca. 10-20 Sek. nach Debuggen in IAR noch diese 
Fehlermeldung :

"Could not get target status".

Hat jemand Erfahrung damit? Ist das die Einstellungsprobleme in IAR? 
Oder eher Hardwareproblem?

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.