Estoy intentando enviar mi nombre ( Ziga ) a través de mi microcontrolador UART a mi PC. Las líneas GND, Tx, Rx del microcontrolador están conectadas directamente al convertidor UART-USB CP2102 que se enchufa en mi PC .
Mi PC está ejecutando el sistema operativo Linux y estoy usando la aplicación minicom para verificar la información transferida. Durante la transmisión, mi terminal minicom imprime algunos símbolos extraños (haga clic para ampliar):
ysihabilitolaopción" HEX display " obtengo estos valores (haga clic para ampliar):
Losvaloresson0x5C=92
,quees\
enASCII,luego0xFC=252
,quenotieneningúnsignoenASCIIantiguo,porloqueseconvierteen?
,entonceshay0x40=64
iguala@
enASCIIyfinalmente0x81=129
,quedenuevonoestádefinidoenelantiguoASCII,porloqueseconvierteen?
.
mientrasobtengolaimagencorrectaenmiosciloscopio(hagaclicparaampliar):
¿PorquénoobtengoZigaZigaZigaZiga...enlaconsolaminicom?Losvaloresparalasletrasindividualessoncorrectosdeacuerdoconlatabla
ADD 1 :
Tomé una imagen del osciloscopio de la letra a de Ziga . Espero que esto pueda ayudar a determinar si la velocidad en baudios del microcontrolador es correcta.
ADD2:
Intentéusar2bitsdeparadaenminicomasícomoenmicrocontroladoryobtengounresultadodiferentequeesaúnpeor:solotransfiere3caracteresenlugardecuatro(Zigatienecuatro).Echaunvistazo:
AGREGAR3:
Encontréestainformaciónsobreosciladoresexternos.¿SignificaestoqueelrelojPCLKmencionadoenelmicrocontrolador
ADD4:
Entonces,nosdimoscuentadequedebíaserunproblemadevelocidaddetransmisión,asíqueempecéaleerPCLK = 3MHz
por defecto. Luego elegí un algoritmo en la página 509 para calcular los valores:
DLL = 0
DLM = 13
DIVADDVAL = 1
MULVAL = 2
Estos valores me deberían dar 9600 baudrate según la ecuación (4) en la página 508. Bueno, da 9615.384615, que debe tener una precisión del 0.16%. Entonces comencé a programar y establecí los valores de arriba de esta manera:
DLL &= ~(0xFF); //setting first byte to 0 (divisor latch least signifficant byte)
DLL |= 13; //setting first byte to 13 (divisor latch least signifficant byte)
DLM &= ~(0xFF); //setting first byte to 0 (divisor latch most signifficant byte) -- not really needed
DLM |= 0; //setting first byte to 0 (divisor latch least signifficant byte) -- not really needed
FDR |= (1<<5); FDR &= ~(1<<4); //setting value MULVAL
FDR |= 0x1; //setting value DIVADDVAL
Pero todavía no tengo la velocidad correcta ...