www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [msp430] 9600 Baud mit 32kHz


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe ein Problem beim Einstellen der Baudrate. Im folgenden
Quelltext, der eigentlich nur einen minimalen Funktionsumfang (eine
Echofunktion) zur Verfügung stellt, sollen Zeichen, die ich über das
Terminal an den MSP schicke wieder zurückgesandt und ausgegeben werden.
Mit 4800 Baud funktioniert das problemlos. Wenn ich die Baudrate nun wie
in diesem Fall versuche auf 9600 zu erhöhen werden nur noch kryptische
Zeichen ausgegeben, also in jedem Fall nicht mehr das Zeichen, was ich
ursprünglich eingegeben habe. Die Frequenz meines Quartzes beträgt 32
kHz.

Beispielprogramm:

#include  <msp430x16x.h>
#include <signal.h>


int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;
  P3SEL = 0x30;

  ME1 |= UTXE0 + URXE0;
  UCTL0 |= CHAR;
  UTCTL0 |= SSEL0;
  UBR00 = 0x03;                           // 9600 Baud

  UBR10 = 0x00;
  UMCTL0 = 0x4A;
  UCTL0 &= ~SWRST;
  IE1 |= URXIE0;                          // Interrupts an
  IFG1 &= ~UTXIFG0;                       // Interruptflag loeschen
  _EINT();                                // Enable interrupts
}

interrupt(USART0RX_VECTOR) usart0_rx(void)
{
  TXBUF0 = RXBUF0;
}

Weiß jemand woran das liegen könnnte? Ich habe keine wirklich plausible
Erklärung dafür. Die Baudrate im Terminal ist natürlich auch
entsprechend angepasst (->9600).

Gruß,

Martin.

P.S.: Ich verwende das Headerboard von Olimex mit externer
Spannungsversorgung und erforderlicher Peripherie (MAX232).

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich kenne den MSP nicht. Aber wenn der keinen eigenen Oszillator für
die UART-Schnittstelle hat, Du also also mit deinem Sytemtakt arbeitest
wird das schon ein Problem. Schon die 4800 Baud aus 32768 Hz zu erzeugen
wird ein Problem: 32768:6 = 5459 baud, 32768:7 =  4679 Baud. letzteres
geht so gerade noch. 4679/4800= rund 2,5% Abweichung. 9600 Baud: (32768
: 3) =10918Baud, (32768:4) = 8189Baud. Fehler zu 1 = 13%, fehler zu 2:
14,6%.  Ohne das jetzt auszurechnen, ab welcher Taktabweichung die
Übertragung fehlschlägt, aber Pi * Daumen würd ich mal sagen bei 10 Bit
pro Zeichen nicht mehr als 10%.

Gerhard

Autor: frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Standardmäßig ist der interne Oszillator an. wird der verwendet ist bei
höheren Baudraten die Abweichung zu groß und dazu kommt noch die
Abhängigkeit der Frquenz von der Temperatur.
Lösung : am besten einen externen (höheren) Takt verwenden.

Frank

Autor: Mawe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe bereits Kommunikationen mit dem MSP430F149 über den UART zu
einem Funkmodul gemacht und alles hat bestens geklappt. Dabei habe ich
ein Codebeispiel an meine Applikation angepasst. Bin mir nicht ganz
sicher, aber ich meine, der C-Code aus der Fet140_uart04_9600.c aus TIs
Codesammlung sollte passen. Der Code sendet ein empfangenes Byte zwar in
einer ISR wieder zurück aber das kannste ja auf deine Wünsche anpassen.
Ach ja ein ein 100k Widerstand ist bei dem Beispielcode an Rosc nötig,
aber dass ist auch im Code nochmal ersichtlich. Damit hats bei mir
prächtig funktioniert. Also viel Glück und wenns nit klappt meldest
dich nochmal, dann such ich mal mein Programmcode von damals.

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

Bewertung
0 lesenswert
nicht lesenswert
UMCTL0= 0x29
könnte helfen.

UMCTL0 ist dafür da um mit kleinen Taktfrequenzen auf höhere Baudraten
zu kommen. Gibt irgendwo bei TI auch eine App-Note dazu.



Die Bitfehler kannst du dir hier ausrechnen lassen:

http://mspgcc.sourceforge.net/baudrate.html

hab die App mal angehängt da ich sie bei TI nicht mehr finden konnte

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.