Auf der Zeichnugn finde ich keinen UART - nur "Other Peripherals" und laut Text und Bild nehmen alle Teile außer NVM, RAM und CPU den Takt von CLK_PER. So stehts auch in Kapitel 24.3.2.1. Also, der UART müsste mit 3333333Hz laufen.
Variieren ist nicht das Thema, denn es kommt ja gar nichts an - wenns nur ein wenig verzerrt wäre, hätte ich wenigsens Buchstabensalat. Außerdem hat der 412 eine interne Kalibrierung, die wohl ab Werk eingemessen ist.
- - - Aktualisiert - - -
Laut Datenblatt sind für die Initialisierung Tx auf out high zu schalten, BAUD und Frame zu setzen, Operation mode zu setzen und Tx zu aktivieren.
Die meisten Register sind schon nach Initialisierung korrekt. Mode und Frame müsste man gar nicht setzen.
Ich hab im Simulator die Register geprüft - es wird alles so weit ich das beurteilen kann - korrekt gesetzt. CLK steht auf 20 MHz internal und Prescaler enabled und 0x8 (also Prescaler 6).
Oszi hab ich nicht. Aber irgendwas müsste ja rauskommen. Selbst wenn ich eine LED an den Ausgang hänge, hab ich keinerlei Flackern oder sowas.
- - - Aktualisiert - - -
- - - Aktualisiert - - -
Stimmt. Hab ich inzwischen auch korrigiert - die Formel war aus einem Codeteil eines Atmega328. Jetzt lautet es:
#define MYUBRR 4 * FOSC/BAUDX
Bringt aber auch nichts.
Laut Anleitung soll der BAUD-Wert in das 16-Bit-Register BAUD. Dabei wären die oberen 10 Bit der Ganzzahlteil und die unteren 6 Bit der Nachkommaamteil (Kap. 24.3.2.1). Versteht das jemand?
Wenn ich rechne, komme ich auf 4 * 3333333 / 9600 = 1388,88875.
1388 passt schon mal nicht in 10 Bit, da ist ja bekanntlich bei 1023 Schluss.
Und wie soll man den Nachkommaanteil in das Register bekommen?
Mein Code schreibt brav 0x56C in das 16-Bit Regsiter - das entspricht aber nicht der Teilung auf 10 und 6 Bit.
Das mit den Nachkommastellen versteh ich eh nicht. Da hätte man doch auch den Wert gleich mit 64 multiplizieren können um alles 6 Bit nach links zu shiften... Außerdem kommt mir ein Prescaler mit Nachkommastellen etwas komisch vor.
Kanns ich da jemand einen Reim drauf machen?
Lesezeichen