Hallo, wenn ich bei dem ATtiny3216 für den UART (RS232) die Baudrate einstellen möchte, dann kann ich nicht irgendeine Frequenz für den CPU Takte nehmen, weil dann die Abweichen vom UART abweicht. Wenn meine Gegenstelle eine Baudrate von 19200 verlangt, so kann ich für meinen ATtiny einen CPU Takt von 18.432MHz wählen und bekomme für das Register BAUD = 18432000 / (16*19200) - 1 = 59 Nun steht aber im Datenblatt (Table 24-2. Equations for Calculating Baud Rate Register Setting) dass dieses Register BAUD größer als 64 sein muss. Ok, dann kann ich noch das Register CLK2X auf 1 setzen und muss in meiner Formel der Wert von S = 16 auf S = 8 setzen und bekomme dann: BAUD = 18432000 / (8*X) - 1 = Y Wenn ich jetzt aber S=8 setze, wie sieht die Formel dann mit Werten aus?
:
Bearbeitet durch User
Ich habe den 3216 noch nicht in den Fingern gehabt, aber ich lese das Datenblatt völlig anders als du. Erstens: selbstverständlich kann man für eine UART-Kommunikation auch mit "baudratenunfreundlichen" Taktfrequenzen arbeiten, solange man die Bedingung einhält, dass der Betrag des resultierenden Taktfehlers kleiner als etwa 2 % bleibt. Da es sich um eine asynchrone Übertragung handelt (und bei heute üblichen UARTs der Empfänger stets eine Überabtastung macht), synchronisiert sich das mit dem nächsten Startbit, sodass die Fehler sich nicht aufsummieren. Zweitens: da steht ausdrücklich drin, dass es sich um einen fractional baud rate generator handelt, du kommst also auch mit einer "baudratenunfreundlichen" Taktfrequenz noch viel näher an den gewünschten Takt heran, als das bei den älteren AVRs der Fall war. Drittens: eben wegen dieses fractional baud rate generators wird das Teilerverhältnis im Register mit 64 multipliziert abgelegt. Wenn du also einen Taktteiler von 1 haben willst, musst du eine 64 ins Register schreiben, für 2 eine 128 etc. Da 1 der kleinste mögliche Teiler ist (ein Teilerverhältnis kleiner 1 würde ja eine Erhöhung des Takts ergeben), ergibt sich daraus der minimale Registerwert von 64.
Okay! Wusste ich alles vorher nicht, dank! Habe "nur" gelesen das ich mir den Takt und auch die Baudrate selber aussuchen kann. Aber dass was du geschrieben hast bestätigt doch, dass ich mit der BAUD-Formel den minimalen Registerwert von 64 nicht unterschreiten darf. Welches mit dem CPU-Takt und der Baudrate von 19200 der Fall wäre: 59 Wenn ich nun aber nun das Register CLK2X auf 1 setze, steht im Datenblatt das ich dadurch die Baudrate hochschraube? Ich kann dadurch noch nicht ableiten wie ich die folgende Formel gestalten muss "BAUD = 18432000 / (8*X) - 1 = Y" Vielen Dank
Ah, jetzt habe ich es. Da durch CLK2X der Wert von S halbiert wird, verdoppelt sich der Registerwert. BAUD1X = 18432000 / (16*19200) - 1 = 59 BAUD2X = 18432000 / ( 8*19200) - 1 = 119
:
Bearbeitet durch User
Du willst 19200 Bd haben, ohne U2X hast du 16faches Oversampling (S = 16), d.h. du brauchst eine Haupt-Taktfrequenz von minimal 307200 (da wäre der Teilerfaktor 1, d.h. BAUD=64). Du hast viel mehr als das. :-) Du brauchst einen Teilerfaktor von 60 (= 18432000 : 16 : 19200).
Du hast
und
sowie
(mal ohne U2X). Das macht für mich BAUD = 3840. Es sollte dich jetzt nicht verwundern, dass dies 64 · 60 ist. :)
:
Bearbeitet durch Moderator
Nochmal: du bist weit davon entfernt, U2X zu brauchen.
Wie kommt man auf diese Formel > BAUD = 18432000 / (16*19200) - 1 = 59 nachdem man bis zu 24-2 > Nun steht aber im Datenblatt (Table 24-2. vorgedrungen war?
S. Landolt schrieb: > Wie kommt man auf diese Formel Vermutlich mit "haben wir doch schon immer so gemacht" :-) Das ist letztlich die Formel für die alten AVRs.
Hallo, ich frage mich gerade warum wir unterschiedliche Datenblätter haben. Ich kenne die alten AVR nicht. Die aktuellen AVR sind für mich gerade die neuen AVR - Vielen Dank für Eure Geduld! :)
> ich frage mich gerade warum wir unterschiedliche Datenblätter haben.
Ganz einfach: preliminary von 2018 vs. 2020. Im Prinzip steht da ja aber
dasselbe.
Droid E. schrieb: > Ich kenne die alten AVR nicht. Dafür ist es verwunderlich, wie du auf
1 | BAUD = 18432000 / (16*19200) - 1 = 59 |
kommst. Denn das steht auch in deinem Screenshot an keiner Stelle.
Jörg W. schrieb: > Droid E. schrieb: >> Ich kenne die alten AVR nicht. > > Dafür ist es verwunderlich, wie du auf > BAUD = 18432000 / (16*19200) - 1 = 59 > > kommst. Denn das steht auch in deinem Screenshot an keiner Stelle. BAUD = 18432000 / (16*19200) = 60 Die -1 hatte ich an vielen anderen Stellen gesehen und muss gestehen, dass ich das ebenfalls nicht verstanden hatte - sorry!
Droid E. schrieb: > BAUD = 18432000 / (16*19200) = 60 Stimmt eben halt nur fast: das ist zwar der Teilerfaktor, aber eben nicht die Zahl, die ins Register einzutragen ist. Diese muss noch mit 64 multipliziert werden (oder 2^6 in deinem Dokument). > Die -1 hatte ich an vielen anderen Stellen gesehen und muss gestehen, > dass ich das ebenfalls nicht verstanden hatte - sorry! Bei den alten AVRs musste man vom Teilerfaktor immer noch 1 subtrahieren, also ein Registerwert 0 entsprach einem Teilerfaktor 1, 59 entsprach 60 etc. Außerdem war das dort eben kein fractional divider, sodass man nur ganzzahlige Teilerfaktoren benutzen konnte und daher diesen auch nicht mit 64 multipliziert hat. Daher: deine Formel ist die für die herkömmlichen AVRs. Für den von dir verwendeten musst du ins (16-Bit-)Register BAUD die besagten 3840 eintragen, ohne U2X-Bit. Du kannst natürlich genauso gut mit 20 MHz Haupttakt arbeiten und ins BAUD-Register eine 4167 eintragen (round(65.104167 · 64)) und damit vom erwähnten fractional baud rate divider Gebrauch machen.
Wobei dieser 'Teilerfaktor' ja eigentlich nicht interessiert: der Fractional-Baudrate-Generator, dat is ene jroße schwarze Raum, der hat hinten un vorn e Loch. Vorn steckt man den nach der Formel berechneten Wert rein, hinten kommen die richtig empfangenen Daten raus.
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.