Estoy intentando enviar mi nombre ( Ziga ) a través de la periferia UART de mi microcontrolador a mi PC. Las líneas GND, Tx, Rx del micro-controlador están directamente conectadas al convertidor UART-USB CP2102 que está conectado a mi PC.
Mi PC funciona con el sistema operativo Linux y estoy utilizando la aplicación minicom para comprobar la información transferida. Durante la transmisión, mi terminal minicom imprime unos símbolos extraños (haz clic para ampliar):
y si activo " Visualización HEX " obtengo estos valores (haga clic para ampliar):
Los valores son 0x5C = 92
que es \
en ASCII entonces 0xFC = 252
que no tiene ningún signo en ASCII antiguo por lo que se convierte en ?
entonces hay 0x40 = 64
igual a @
en ASCII y, por último 0x81 = 129
que tampoco está definido en el antiguo ASCII, por lo que se convierte en ?
.
mientras que estoy recibiendo imagen correcta en mi osciloscopio (haga clic para ampliar):
¿Por qué no consigo ZigaZigaZigaZiga ... en la consola minicom? Los valores de las letras individuales son correctos según ASCII mesa.
ADD 1 :
Tomé una imagen de osciloscopio de la letra a de Ziga . Espero que esto pueda ayudar a determinar si la tasa de baudios del microcontrolador es correcta.
ADD 2 :
He probado a utilizar 2 bits de parada tanto en el minicom como en el microcontrolador y obtengo un resultado diferente que es incluso peor - sólo transfiere 3 caracteres en lugar de cuatro ( Ziga tiene cuatro). Echa un vistazo:
ADD 3 :
He encontrado esta información sobre osciladores externos. ¿Significa esto que el reloj PCLK mencionado en el micro-controlador manual del usuario es 12Mhz ?
ADD 4 :
Así que nos dimos cuenta de que debe ser un problema de velocidad de transmisión, así que empecé a leer manual del usuario y descubrí en la página 21 que mi PCLK = 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 deberían darme 9600 baudios según la ecuación (4) de la página 508. Bueno, da 9615.384615 que debería ser 0.16% exacto. Entonces empecé a programar y puse los valores de arriba así:
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 aún no consigo la velocidad de transmisión correcta...
1 votos
¿Tasa de baudios incorrecta?
0 votos
Lo tengo configurado 9600 8N1 en ambos lados. Esto significa 9600 baudios, 8 bits de datos, sin paridad y 1 bit de parada.
0 votos
¿Has programado tu uC para que haga eco de lo que escribas? Si no lo has hecho, no deberías ver nada. ¿Qué se supone que debe devolver tu uC?
0 votos
De momento no estoy tan lejos. Actualmente sólo estoy intentando enviar algunas cadenas de caracteres a mi PC e interceptarlas. ¿Cómo puedo comprobar si mis velocidades de transmisión coinciden? Esto es lo que @Armandas sugirió.
1 votos
¿Cuál es el ajuste de tiempo/div en su 'scope? Si es 250uSec/div entonces su velocidad de transmisión parece correcta.
1 votos
¿Qué microcontrolador utilizas?
0 votos
@whatsisname Estoy usando LPC4088 (interfaz UART3): nxp.com/documents/manual_de_usuario/UM10562.pdf
0 votos
@brhans Voy a publicar imagen osciloscopio adicional para usted y usted puede comprobar maybee.
0 votos
En el CP2102, ¿es posible que Tx y Rx estén intercambiados (entrada/salida)? este es un error común en las conexiones de puertos serie RS232. Usualmente ambos dispositivos nombran sus salidas como Tx, entonces el usuario debe conectar uc-Tx-out a FT232-Rx-in... Supongo que cp2102 sigue la misma convención.
0 votos
Entiendo que el firmware ignorará los datos, pero ayudaría a verificar la velocidad en baudios y los ajustes de datos de minicom son los esperados.
0 votos
He añadido una foto más desde la que se puede comprobar mi velocidad de transmisión. No estoy seguro de si sé caliente para calcular correctamente.
0 votos
@MarkU No es posible que esos dos estén conmutados, porque mi osciloscopio está conectadodirectamente a MCU Tx que va a CP2102 Rx. El CP2102 no está programado de ninguna manera para transmitir nada. Pero lo he vuelto a comprobar y está bien.
2 votos
Intenta trabajar con 2 bits de parada. Tal vez esté mal sincronizado.
1 votos
De todos modos, si su longitud de bits es 300/8usec = 40uSec, entonces su velocidad en baudios es 1/40uSec=26.67k, no 9600
0 votos
@Eugene Sh entonces, ¿es posible conseguir que algo transmita por la línea si las velocidades en baudios no coinciden?
1 votos
Claro, ¿por qué no? Especialmente si viene del micro-controlador.. Sólo que no para recibir. Los cables no se preocupan por lo que transmitir ..
0 votos
Ahora tengo que comprobar dónde la he cagado. @Armandas probablemente tenía razón en el primer lugar. =)
0 votos
Se trata de la parte de inicialización de la UART. Mira allí..
0 votos
El código de inicio de la UART se escribirá asumiendo una cierta frecuencia de reloj y debe indicar sus suposiciones. ¿Lo estás ejecutando a esa frecuencia de reloj? Si no es así, tendrás que ajustar los valores del divisor y del preescalador para adaptarlos a la nueva frecuencia de reloj.
0 votos
He estado buscando el PCLK por defecto en la documentación de abajo y no lo he encontrado. En las páginas 508 - 510 hay un procedimiento para calcular el baudrate, pero si no puedo encontrar el reloj por defecto PCLK en la documentación estoy jodido... Aquí está la documentación: nxp.com/documents/manual_de_usuario/UM10562.pdf Comprueba "ADD 3" - He descubierto que mi sistema embebido utiliza un oscilador externo de 12MHz. ¿Significa esto que
PCLK = 12MHz
?1 votos
En la página 21 se describe la generación del reloj. Parece que hay un divisor por defecto por 2.
1 votos
Muchas gracias. Parece que este microcontrolador utiliza 12MHz internall oscilador dividido por 4 para producir 3MHz PCLK. Y yo que pensaba que era de 12MHz =)
0 votos
@71GA Probablemente deberías publicar esto como respuesta, de lo contrario la pregunta aparecerá sin resolver.
0 votos
Aún no está resuelto. Todavía estoy buscando la solución. Estoy haciendo algunos cálculos actualmente. =)