RS232 mit MSP430FG4618

Gast #719422
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
Angehängte Dateien:
Gast #719631
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.
Gast #719830
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
Angehängte Dateien:
Gast #719985
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.
Gast #720070
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.
#720078
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
Gast #721331
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
#721539
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.
Gast #721558
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.
Gast #721631
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!)
#721728
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.
Gast #722133
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
Angehängte Dateien:
#722220
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.
Gast #722685
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! ;-)
#722891
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.
Gast #726728
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren