Ich versuche, meinen Namen ( Ziga ) über die UART-Peripherie meines Mikrocontrollers an meinen PC zu senden. GND-, Tx- und Rx-Leitungen vom Mikrocontroller werden direkt an den UART-USB-Konverter CP2102 angeschlossen, der an meinen PC angeschlossen ist.
Auf meinem PC wird Linux ausgeführt, und ich bin es Verwenden Sie die Anwendung minicom, um nach übertragenen Informationen zu suchen. Während der Übertragung druckt mein Minicom-Terminal einige seltsame Symbole (zum Vergrößern klicken):
und wenn ich die HEX-Anzeige aktiviere "Option Ich erhalte diese Werte (zum Vergrößern anklicken):
Die Werte sind 0x5C = 92
ist in ASCII \
, dann 0xFC = 252
, das in altem ASCII kein Vorzeichen hat, also wird es zu ?
Es gibt 0x40 = 64
gleich @
in ASCII und schließlich 0x81 = 129
, was wiederum in altem ASCII nicht definiert ist, sodass es zu ?
.
während ich das richtige Bild auf meinem Oszilloskop erhalte (zum Vergrößern klicken):
Warum nicht? t Ich erhalte ZigaZigaZigaZiga ... in der Minicom-Konsole? Die Werte für einzelne Buchstaben sind gemäß der Tabelle ASCII korrekt.
ADD 1 :
Ich habe ein Oszilloskopbild aufgenommen des Buchstabens a von Ziga . Ich hoffe, dies kann helfen, festzustellen, ob die Baudrate des Mikrocontrollers korrekt ist.
ADD 2 :
Ich habe versucht, 2 Stoppbits sowohl auf dem Minicom als auch auf dem Mikrocontroller zu verwenden, und ich erhalte ein anderes Ergebnis, das noch schlimmer ist - es überträgt nur 3 statt vier Zeichen ( Ziga stark> hat vier). Schauen Sie sich Folgendes an:
ADD 3 :
Ich habe gefunden diese Info über externe Oszillatoren. Bedeutet dies, dass die im Benutzerhandbuch für Mikrocontroller erwähnte PCLK-Uhr 12 MHz ?
ist?4 HINZUFÜGEN :
Also haben wir herausgefunden, dass es sich um ein Baudratenproblem handeln muss, also habe ich angefangen, das Benutzerhandbuch zu lesen und auf Seite 21 herausgefunden, dass mein PCLK = 3MHz
standardmäßig ist. Dann habe ich auf Seite 509 einen Algorithmus ausgewählt, um Werte zu berechnen:
DLL = 0DLM = 13DIVADDVAL = 1MULVAL = 2
Diese Werte sollten mir eine Baudrate von 9600 geben zu der Gleichung (4) auf Seite 508. Nun, es gibt 9615.384615, was 0,16% genau sein sollte. Dann habe ich mit dem Programmieren begonnen und die obigen Werte wie folgt eingestellt:
DLL & = ~ (0xFF); // erstes Byte auf 0 setzen (Divisor Latch Byte mit der geringsten Signifikanz) DLL | = 13; // erstes Byte auf 13 setzen (Divisor Latch Byte mit der geringsten Signifikanz) DLM & = ~ (0xFF); // erstes Byte auf 0 setzen (Divisor Latch das wichtigste Byte) - nicht wirklich benötigtDLM | = 0; // erstes Byte auf 0 setzen (Divisor Latch Byte mit der geringsten Signifikanz) - nicht wirklich benötigtFDR | = (1<<5); FDR & = ~ (1<<4); // Einstellwert MULVALFDR | = 0x1; // Einstellwert DIVADDVAL
Aber ich bekomme immer noch nicht die richtige Baudrate ...