mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430F20xx UART


Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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

Bewertung
0 lesenswert
nicht 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.

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du das etwas ausführlicher erklären ?

>>> das Beispiel vergewaltigt den Timer <<<

Wie meinst du das ?

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Etwas ausführlicher ist das hier beschrieben
http://focus.ti.com/mcu/docs/mcusupporttechdocsc.t...

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: szimmi (Gast)
Datum:

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

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.