Forum: Mikrocontroller und Digitale Elektronik MSP430 MM232R


von Daniel (Gast)


Lesenswert?

Hallo,
ich moechte von Matlab Daten zum Microcontroller (msp430) senden und 
habe dafuer an ein mm232r genommen. Leider scheint es, dass der uC 
nichts erhaelt im Rxbuffer. Ich weiss nicht ob ich moeglicherweise den 
mm232 falsch angeschlossen habe...ich habe nur die Rx und Tx pins an den 
uC angeschlossen nicht aber die handshaking pins...brauche ich die auch?
Wie es scheint hat mein uC diese pins ja nicht...bin dankbar fuer jede 
hilfe.

Danke,

Daniel

von Christian R. (supachris)


Lesenswert?

Mal die gesamte Schaltung und das Programm vom MSP430 posten, sonst kann 
dir keinder helfen.

von Jörg S. (joerg-s)


Lesenswert?

>ich habe nur die Rx und Tx pins an den uC angeschlossen
Und wie siehts mit Masse aus?

von Daniel (Gast)


Lesenswert?

GND habe ich angeschlossen.

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

Die beiden Geraete habe ich wie das Bild zeigt angeschlossen.
Habe auch versucht den uC wegzunehmen und nur mit dem Oszilloskop den TX 
des mm232 anzuschauen, aber leider ist dort keine Aenderung des Signals 
zu sehen wenn ich mit dem tmtool aus matlab was sende.

von Daniel (Gast)


Lesenswert?

Den MSP430 code den ich bis anhin benutzt habe:
#include "msp430x26x.h"

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;          // Stop Watchdog timer
  UCA0CTL1 = 0x1;      // USCI logic held in reset state
  UCA0CTL0 = 0x26;      // asynchronous mode, uart mode with
    // automatic baud rate, one stop bit, 8bit data, MSB, no parity


  P3SEL = 0x30;                      // P3.4 tx and P3.5 rx
  P3DIR = 0x10;
  UCA0CTL1 = 0x0;      // USCI logic released for operation
  IE2 |= UCA0RXIE;                   // Enable USCI_A0 RX interrupt

  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts 
enabled
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
  UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character
}

von Christian R. (supachris)


Lesenswert?

Hm, die VCCIO ist auf 5V geklemmt, das verträgt der MSP430 nicht, 
sondern quittiert das mit einem defekten Port-Pin. Du müsstest Pin 4 an 
Pin 3 anklemmen.

von Stefan (Gast)


Lesenswert?

>Du müsstest Pin 4 an Pin 3 anklemmen.
Um die Signale auf 3,3V zu bekommen, richtig!
Das erklärt aber noch nicht, warum der MM232R alleine ohne µC auch nicht 
funktioniert!
Möglicherweise erwartet das tmtool / matlab ein Hardware-Handshaking.
Probier mal RTS und CTS miteinander zuverbinden, um dem Host 
vorzugaukeln, er könne senden!?

von Daniel (Gast)


Lesenswert?

Habe das gemacht (macht auch Sinn) nur leider muss es noch ein anderes 
problem geben. Habe auch mit hyperterminal versucht was auf den port zu 
schicken, aber der Rxbuffer erhaelt nichts und Oszilloskop zeigt nichts 
an...

von Christian R. (supachris)


Lesenswert?

Miss mal die Spannung an der Verbindung der VCCIO da....vielleicht liegt 
da ja gar nix an?

von Daniel (Gast)


Lesenswert?

Spannung ist da. Habe pins 3 und 4 zusammengeklemmt und jetzt sehe ich 
mein Signal am Oszilloskop. Danke.
Versuche jetzt mit dem uC zu kommunizieren...

von Jörg S. (joerg-s)


Lesenswert?

>Habe auch mit hyperterminal versucht ...
Achtung, bei Hyperterminal ist Hardware Handshake standardmässig immer 
an!

von Daniel (Gast)


Lesenswert?

Ich kann jetzt zwar am Oszilloskop sehen, dass ein Signal gesendet wird, 
leider kann ich aber kein Echo (siehe code) sehen. Ich habe im tmtool 
das RequesttoSend auf off geschaltet und die pins RTS und CTS 
zusammengeklemmt, ebenso pins 3 und 4. Weiss jemand was ich noch falsch 
mache?

von Christian R. (supachris)


Lesenswert?

Hast du mal ein Code-Beispiel von TI direkt probiert? Da ist doch immer 
eins für ein einfaches Echo dabei. Das muss auf jeden Fall klappen.

von Daniel (Gast)


Lesenswert?

Vielen Dank, aber leider funktioniert auch jenes program nicht...liegt 
wohl eher an der Art mit der tmtool sendet und weniger an der software 
oder uC. Ideen?

von Christian R. (supachris)


Lesenswert?

Mit Hyperterminal klappts?

von Daniel (Gast)


Lesenswert?

Nein leider auch nicht...der uC zeigt an dass er UCRXERR auf 1 hat.

von Christian R. (supachris)


Lesenswert?

Nun ja, da heißt es Fehlersuche. Stimmt die Baudrate wirklich? Stimmen 
die sonstigen Einstellungen? 7/8 Bit, Parity usw.? Eventuell ist der 
Eingang auch kaputt, kannst du denn vom MSP430 an Hyperterminal was 
senden?

von Daniel (Gast)


Lesenswert?

Ich habe beim tmtool folgende Einstellungen:
baudrate 9600
LSB
8 data bits
no parity bit
1 stop bit

beim microcontroller verwende ich immer noch den oben angegebenen code.

von Christian R. (supachris)


Lesenswert?

Ok, nochmal von vorne. Nicht immer den 3. Schritt vor dem 1. machen.

1. Was für einen Quarz hast du wo am MSP430 angeschlossen? Ist da 
überhaupt einer dran? Wenn ja, funktioniert der richtig?

2. Probier doch bitte mal den Quelltext aus dem Code-Example Zip-File 
zusammen mit Hyperterminal.

3. Gewöhn dir bitte an, die Bits in den Registern so wie bei TI beim 
Namen zu nennen, mit einer 0x26 kann kein Mensch auf Anhieb was 
anfangen.

4. Was bedeutet die LSB Einstellung bei deinem Matlab Dingens? Etwa, 
dass das LSB zuerst gesendet wird?

von Daniel (Gast)


Lesenswert?

Haha...es scheint zu funktionieren wenn man oversampling benutzt!
Hat jemand eine Ahnung wieso? Sonst auch egal, Hauptsache es 
funktioniert!
Nochmals allen vielen Dank!

von Daniel (Gast)


Lesenswert?

1. nein habe keinen Quarz

2. das ist nicht gegangen

3. hast du recht, sorry

4. Ja LSB zuerst...habe aber bei beiden (matlab und uc) auf MSB 
umgestellt

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.