Forum: Mikrocontroller und Digitale Elektronik RS232 mit MSP430FG4618


von Rinny (Gast)


Angehängte Dateien:

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

von Jörg S. (Gast)


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.
1
while(1)
2
{
3
  while (!(IFG2 & UTXIFG1));  // Warten bis TX Buffer leer
4
  TXBUF1 = '5';               // Testzeichen senden
5
}

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

von Rinny (Gast)


Angehängte Dateien:

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

von Christian R. (supachris)


Lesenswert?

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

von Rinny (Gast)


Lesenswert?

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

von Berti (Gast)


Lesenswert?

Wenn der mSP noch lebt nimm einen MAX3232

von Christian R. (supachris)


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....

von Michael (Gast)


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.

von Rinny (Gast)


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.

von Christian R. (supachris)


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.

von Falk B. (falk)


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

von Michael (Gast)


Lesenswert?

Achja, Entschuldigung.
Ich hatte vergessen, dass im MSP430FG4618 beide Schnittstellen 
implementiert sind.

von Rinny (Gast)


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

von Christian R. (supachris)


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.

von Christian R. (supachris)


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.

von Jörg S. (Gast)


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.

von Jörg S. (Gast)


Lesenswert?

Edit: Meine natürlich die DIR Register :)

von Christian R. (supachris)


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.

von Michael (Gast)


Lesenswert?

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

von Rinny (Gast)


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!)

von Christian R. (supachris)


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.

von Rinny (Gast)


Angehängte Dateien:

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

von Christian R. (supachris)


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.

von Rinny (Gast)


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! ;-)

von Christian R. (supachris)


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.

von Rinny (Gast)


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?

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.