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).
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
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.