Forum: Mikrocontroller und Digitale Elektronik MSP430G2231 USART letztes Zeichen kaputt


von Dieter B. (barth)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen.
Ich möchte mit dem MSP430G2231 Analoge werte Wandeln und dann am Rechner 
über die RS232 empfangen.

Funktioniert auch fast.
Bei dem String den ich sende, ist das letze Zeichen immer kaputt.
Egal wie lang oder sonst was.

So sieht das aus was ich empfange. Das letze Zeichen sieht wie ein
Steuerzeichen aus oder so. Ein Viereckiges Kästchen halt.
Kennt von euch jemand den Fehler?
Code ist angehängt.
Danke schon mal für eure Hifle


817,265145  COM4: 339 strin
817,281668  COM4: 341 strin
817,301254  COM4: 344 strin
817,315144  COM4: 341 strin
817,331014  COM4: 343 strin
817,348599  COM4: 346 strin
817,365916  COM4: 346 strin
817,380860  COM4: 347 strin
817,398742  COM4: 346 strin
817,415290  COM4: 346 strin
817,433160  COM4: 342 strin
817,448573  COM4: 347 strin
817,465580  COM4: 344 strin
817,482698  COM4: 345 strin
817,499913  COM4: 340 strin
817,519638  COM4: 346 strin
817,532327  COM4: 350 strin
817,550665  COM4: 344 strin
817,566552  COM4: 346 strin

von Bernd N. (Gast)


Lesenswert?

Setzt die Zeilen mal vor main und nehm sie dort wo sie stehen heraus.

CCTL0 = OUT;                              // TXD Idle as Mark
TACTL = TASSEL_2 + MC_2;                  // SMCLK, continuous mode

von Dieter B. (barth)


Lesenswert?

Danke für die schnelle Antwort.
Also wenn ich sie vor main setze bekomme ich folgenden Fehler

Severity and Description  Path  Resource  Location  Creation Time  Id
declaration is incompatible with "volatile unsigned int TACCTL0" 
(declared at line 389 of "C:/Programme/Texas 
Instruments/ccsv4/msp430/include/msp430g2231.h")  USART  USART_ADC.c 
line 25  1304700681906  1391
declaration is incompatible with "volatile unsigned int TACTL" (declared 
at line 388 of "C:/Programme/Texas 
Instruments/ccsv4/msp430/include/msp430g2231.h")  USART  USART_ADC.c 
line 26  1304700681906  1393
this declaration has no storage class or type specifier  USART 
USART_ADC.c  line 25  1304700681906  1390
this declaration has no storage class or type specifier  USART 
USART_ADC.c  line 26  1304700681906  1392



Wenn ich sie nur bei main rein setze macht er nichts mehr.

Es funzt nur wenn sie des im Unterprogramm drin ist.
Hast du noch eine Idee, oder habe ich was falsch gemacht?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Zeilen können nicht außerhalb einer Funktion ausgeführt werden, 
also gehören sie sehr wohl in main().

Das Problem liegt vermutlich im Aufbau der gesendeten Strings - die 
fangen mit dem Steuerzeichen \n an, und das verwendete Terminalprogramm 
erwartet aber \r\n.

Üblich ist es außerdem, den Zeilenvorschub am Ende der Zeile anzufügen.

Ändere daher

  sprintf(string, "\n%d string", ADC10MEM);

zu

  sprintf(string, "%d string\r\n", ADC10MEM);

von Stefan (Gast)


Lesenswert?

Bei mir funktioniert das Programm. Ohne das "\r" gibt wegen des 
fehlenden Wagenrücklaufs Treppenstufen in der Ausgabe, aber das ist ja 
normal.
Ich vermute das Problem liegt auf der PC Seite.

von Bernd N. (Gast)


Lesenswert?

Sorry, was ich meinte war hinter:

BCSCTL1 = CALBC1_1MHZ;                   // Set range
DCOCTL = CALDCO_1MHZ;                    // SMCLK = DCO = 1MHz

von Dieter B. (barth)


Lesenswert?

@Rufus Τ. Firefly

es scheint wohl damit zusammen zu hängen.
Jetzt ist allerdings das kästchen vor dem ganzen Text.
erwartet er da noch irgendwas?

von Stefan (Gast)


Lesenswert?

Wie sieht es aus wenn du das \n Steuerzeichen weglässt?

von Michael (Gast)


Lesenswert?

Nimm ein vernünftiges Terminalprogramm, dass nicht nur Buchstaben und 
Zahlen anzeigt, sondern auch alle anderen übertragenen Zeichen. Dann 
erscheinen keine komischen Kästchen und es ist leichter zu verstehen, 
was du mit deinem Programm sendest (z.B. HTerm).
MfG

von Dieter B. (barth)


Lesenswert?

Dank für den Tipp hab jetzt HTerm benutzt.
Hier empfange ich
158<\r><\0>158<\r><\0>158<\r><\0>158<\r><\0>159<\r><\0>158<\r><\0>159<\r 
><\0>158<\r><\0>158<\r><\0>158<\r><\0>158<\r><\0>158<\r><\0>158<\r><\0>1 
58<\r><\0>158<\r><\0>158<\r><\0>159<\r><\0>158<\r><\0>159<\r><\0>158<\r> 
<\0>158<\r><\0>158<\r><\0>158<\r><\0>158

vergisster er hier /n oder wo ist das hin?
Kann sich jemand vorstellen wo bei dem anteren terminalprogramm der 
fehler liegen kann?
Das Programm ist von Michael Graphics RS232 Wizard. Hat mein Prof 
geschrieben kann gerne jeder kostenlos testen.

Dank für eure Hilfe

von Dieter B. (barth)


Lesenswert?

Jetzt habe ich noch was gefunden.
Ich habe den log jetzt als RAW gespeichert und bekam
1 5 9 "Kästchen" zu sehen.

Kann mir das jemand erklären?
Danke

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.