Assembler ATtiny814 USART Baudrate berechnen

stinakovits

Mitglied
22 Apr 2013
88
6
8
Kottingbrunn
Sprachen
  1. Assembler
Hallo zusammen,

nach langer Zeit hab ich wieder ein Projekt mit einem ATtiny. Diesmal der 814. Irgendwie stehe ich auf der Leitung was die Berechnung der Baudrate für den USART betrifft. Und den Eintrag in die Register.
Bei den "alten" Tinys, wenn ich mich recht erinnere, gab es immer eine Tabelle in der Doku in welcher man die benötigten Werte ablesen konnte. Das ist bei dem "neuen" Tiny nicht mehr so.
Hat eventuell jemand Erfahrung mit der Baudrate beim ATtiny 814?

Der ATtiny814 soll mit 20Mhz laufen.
Der USART soll im asynchronen Modus mit 9.600 Baud seinen Dienst versehen. Es werden Daten empfangen und auch gesendet werden.

In der Doku steht die Berechnungsformel:
BAUD = 64 * fCLK_PER / (S * fBAUD)

BAUD ist der Wert welcher in die Register USART.BAUD H-Byte und USART.BAUD L-Byte eingetragen werden muss.
fCLK_PER ist die Taktfrequenz = 20MHz
S = 16 (asynchroner Modus)
fBAUD = gewünschte Baudrate -> 9.600

BAUD = 64 * 20.000.000 / (16 * 9.600) = 8.333,3 (periodisch)

Laut Doku stehen mir von den 16 vorhandenen Bits nur Bit 15 bis 6 für den Ganzzahligen Wert zur Verfügung. Bit 5 bis 0 sind für die Nachkommastellen.
"The 10 MSBs (BAUD[15:6]) hold the integer part, while the 6 LSBs (BAUD[5:0]) hold the fractional part."

8.333 kann ich aber mit 10 Bit nicht darstellen … 0010 0000 1000 1101

Meine Verständnisfragen:
Hab ich irgendwas falsch verstanden, irre ich mich irgendwie?
Falls ich mich nicht irre, kann es sein, dass ich mit der Baudrate wesentlich höher gehen muss oder die Taktfrequenz wesentlich niedriger einstellen muss um die Kommunikation zu realisieren? (Beides für das Projekt unideal) :confused:
Unsicher bin ich auch wie ich die Nachkommastellen in binär umrechnen soll?
 

LotadaC

Sehr aktives Mitglied
22 Jan 2009
3,497
65
48
Marwitz
Sprachen
  1. BascomAVR
  2. Assembler
Also für mch sieht das nach einem Vergleich von konventionellen und X-Core-Datenblättern eher so aus, als wenn der Faktor "64" im Zähler genau mit den sechs Nachkomma-Bits korelliert.
(8 bzw 16fach-Oversampling -> "S" usw)
Meiner Meinung nach sollten also bei 9600Baud@20MHz genau Deine 8333dez ins Baudratenregister einzutragen sein.

Zu binären Nachkommastellen:
Wie war das denn beim Dezimalsystem - oder besser: Wie ist es bei jeder Basis zu verstehen?

Die letzte Ziffer der Ganzzahl (=LSB) entspricht Faktor*Basis^0
Die Ziffer links davon Faktor*Basis^1
...Basis^2
usw
Beim Dezimalsystem werden das Einer, Zehner, Hunderter usw
Beim Binärsystem ... äh... doppler, vierer, achter usw

Und rechts vom LSB, also rechts vom Komma?
Da wärens dann (von links nach rechts gelesen)
Faktor*Basis^(-1)
Faktor*Basis^(-2)
usw

beim Dezimalsystem also zehntel, hundertstel, tausendstel usw
beim Binärsystem also halbe, viertel, achtel usw

Dein Drittel wäre also im Binärsystem:
,01010101 (periodisch, also etwa 1/4+1/16+1/64+1/256+...)
 

Dirk

Administrator
Teammitglied
28 Jan 2007
4,323
159
63
Mittelhessen, Giessen
Sprachen
  1. ANSI C
  2. C++
  3. C#
  4. Java
  5. Kotlin
  6. Pascal
  7. Assembler
  8. PHP
Hallo zusammen,

Also für mch sieht das nach einem Vergleich von konventionellen und X-Core-Datenblättern eher so aus, als wenn der Faktor "64" im Zähler genau mit den sechs Nachkomma-Bits korelliert.
(8 bzw 16fach-Oversampling -> "S" usw)
Meiner Meinung nach sollten also bei 9600Baud@20MHz genau Deine 8333dez ins Baudratenregister einzutragen sein.

das denke ich auch. Im Datenblatt ist es nicht so gut erläutert, eigentlich irreführend erklärt.

Der Faktor 64 schiebt bereits um 6 Bits nach links. Also wie LotadaC bemerkt hat, das Ergebnis dann einfach in das 16 Bit BAUD Register kopieren.

Dirk :ciao:
 

stinakovits

Mitglied
22 Apr 2013
88
6
8
Kottingbrunn
Sprachen
  1. Assembler
Schönen Abend LotadaC und Dirk,

danke für eure Ausführungen. Ich habe das tatsächlich anders verstanden :oops:

Das Oszi zeigt 9600 Baud :) (Alle 1,042ms wird ein Byte gesendet - perfekt)

Das Terminal-Programm am PC empfängt auch korrekt. Was will man mehr.

@LotadaC
Deine Erklärung zu den Nachkommastellen ist bestechend logisch. :yes4:

Viele Grüße aus Österreich
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)