Forum: Mikrocontroller und Digitale Elektronik MSP430F20xx UART


von Joe (Gast)


Lesenswert?

Hallo zusammen,

hab schon wieder ne Frage. Bezüglich der Erzeugung einer stabilen und
korrekten Baudrate beim MSP ist es wohl notwendig einen externen 32-kHz
Quarz zu verwenden ? Ist das so ? Ist dies mit dem internen Oszillator
nicht zu machen ? So jedenfalls habe ich die Beiträge die ich hier
gelesen habe verstanden.

Ich benötige eine Baudrate von 9600 Baud und diese sollte auch stabil
zur Verfügung stehen. In den TI App. Notes sieht man auch immer einen
Quarz, würde aber gerne ohne auskommen.

Danke im vorraus,

Gruß

Joe

von szimmi (Gast)


Lesenswert?

Hiho,mit den neuen F2xxx braucht man nicht zwingend einen Quarz, da
reicht der interne DCO mit den abgelegten Kalibrierwerten. Die sollen
lt. Spec für eine Toleranz von max. 3% sorgen. Reicht fuer eine UART
aus. Allerdings haben die von Dir genannten F20xx meines Wissens noch
keinen UART.

von Joe (Gast)


Angehängte Dateien:

Lesenswert?

Hallo szimmi,

habe den folgenden Sample Code für den F2013 gefunden, oder sehe ich da
was falsch (siehe Anhang). Hier wird ein externer Quarz verwendet.
Welche I/O Pins ich verwende ist doch egal, oder ? Auch die Möglichkeit
das jeder PIN alles kann ist zunächst verwirrend aber auch irgendwie
genial.

Also, geht beliebiger I/O, und brauche ich den Quarz ? Ich denke ja,
aber bin mir eben nicht sicher.

von szimmi (Gast)


Lesenswert?

Hiho,
das Beispiel vergewaltigt den Timer für die UART.Musst also auch die
Pins nehmen, an denen CCI0A bzw. CCIOB konfigurierbar sind.
Du kannst auch den DCO nehmen (mit den im Info-Flash abgelegten
Kalibrierwerten), mußt allerdings dann die Timings neu berechnen.
Pionieraufgabe :-)

von Joe (Gast)


Lesenswert?

Kannst du das etwas ausführlicher erklären ?

>>> das Beispiel vergewaltigt den Timer <<<

Wie meinst du das ?

von szimmi (Gast)


Lesenswert?

Also, in aller Kuerze:
Empfangsrichtung (RX):
1. CCR0 als Capture konfigurieren
2. Nach der ersten 1->0 Flanke wird dies in der ISR erkannt und in den
Compare-Modus umgeschaltet. Dies führt dazu, dass nach der
eingestellten Bit-Zeit die ISR erneut angesprungen und nun Bit fuer Bit
des zu empfangenden Bytes eingesammelt wird.
Senderichtung (TX):
1. CCR0 als Compare konfigurieren
2. Bit-Zeit definiert die Zeit, nach welcher die ISR immer angesprungen
wird. Bei jedem ISR wird ein Bit ausgegeben, bis das Byte durch ist.

Das beschriebene Verfahren hat allerdings einen Nachteil, das  Empfang
und Senden nicht gleichzeitig (Full-Duplex) erfolgen kann. Muesste man
noch CCR1 einbeziehen (ohne dass ich da jetzt intensiver drueber
nachdenke).
Ein F1xxx mit "richtiger" UART kommt bei Deinem Projekt nicht in
Frage? Die Emulation ueber den Timer ist immer ziemlicher Krampf.

von Joe (Gast)


Lesenswert?

Nein, leider nicht. Danke zunächst für deine Erklärung, Full Duplex ist
nicht gar so wichtig aber 9600 Baud wären schon wichtig. Eignet sich
dieses Verfahren denn dafür ? Und wie bestimme ich das Timing ?

Ich weiß, viel auf einmal aber bin dankbar für jede Hilfe.

von arc (Gast)


Lesenswert?


von Joe (Gast)


Lesenswert?

Ich denke das Verfahren hab ich kapiert, deinem Link folgend sieht man
dann wieder ein Beispiel das auf anhieb für meinen Typ ungeignet ist.

Also, für mich ist aber auch jeder kleine Schritt auf den MSP's
jedesmal ein Kampf. Weniger ist manchmal mehr. Gibt es kein brauchbares
Konzept mit dem man "mein Beispiel", angehängtes TI sample mittels
Werteänderung oder anderem Quarz auf 9600 Baud bekommt ?

Im Moment fehlt mir wieder einmal der "zündende Gedanke" ;-(
Wie rechnet man das aus ?

von szimmi (Gast)


Lesenswert?

Hiho,
also in dem Beispiel ergibt sich die Bitzeit von 2400Baud bei 32768 wie
folgt: Bitzeit in Timer-Ticks = 32768 / 2400 = 13,65 (daher kommt
"#define Bitime    0x0E". Wenn Du z.B. die 16MHz des DCO nimmst und
auf 9600 kommen willst, musst Du als Bitzeit in Timer-Ticks
entsprechend 16000000/9600 = 1667 nehmen. Kannst natuerlich auch
kleinere Frequenzen nehmen und entsprechend anpassen.

von Joe (Gast)


Lesenswert?

Super Erklärung, danke. Dann komm ich aber wieder auf die ürsprüngliche
Frage, ist der interne Generator genau genug ? Sind die 9600 Baud dann
stabil ? oder bau ich mir nen Zufallsgenerator ?

Das muß ich alles erst ein mal sortieren ;-() Im Moment blick ich noch
nicht ganz durch.

von szimmi (Gast)


Lesenswert?

Nochmal, der interne kalibrierte DCO liefert 3% Toleranz. Eine serielle
Kommunikation a la UART vertraegt meines Wissens 5%. Sollte also
funzen.

von Joe (Gast)


Lesenswert?

OK, dann wie üblich learning by doing, werde es ausprobieren. Ich frage
mich nur warum es bei TI dann kein einziges Sample ohne externen Quarz
gibt ??? Mißtrauen die Ihren eigenen Bausteinen ?

Jedesmal diese kuriosen Nummern, so etwas kenne ich bei anderen MC's
nicht.

Irgendwie tue ich mich beim MSP immer wieder schwer, wie geht es euch
dabei ? Ich bin eh Anfänger und wundere mich nur (:-()

Wie sagt man, der Fachmann staunt und der Laie wundert sich ;-))

Nochmals danke, < 5% wäre ok.

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.