Problemas de velocidad en una placa de conversión RS232 a TTL hecha en casa

1

Todavía estoy intentando depurar esta placa de conversión de RS232 a TTL que he creado, se muestra a continuación.

Ahoracreoquehereducidoelproblemaavelocidad:

  • funcionabiena57.600baudios;
  • peroinsertaalgunoserroresdurantelacomunicacióna115.200baudios.

Estavezprobélaplacaconunsimplefirmwaredeecoacontinuación,quebásicamenterespondealoquevieneenelpuertoserie.

voidsetup(){Serial.begin(57600);}voidloop(){if(Serial.available()>0){Serial.write(Serial.read());}}

A57,600baudios,devuelveunaseriedeBcharssinerrores,comosemuestraacontinuación.

BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

A115.200baudios,seproducenalgunoserroresenlasalida.

BBÂBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBBBBBBB

Latasadeerrorpareceserbastanteconstanteysiempreeslamisma.TengaencuentaqueladiferenciaentreloscódigosdecarácterByÂASCIIessolounbitnegadoyotrocambiadounaposiciónalaizquierda.

B-01000001Â-11000010^^

LahojadedatosMAX232dicequefuncionahasta120kbps,porloquecreoquemiplacaestácausandoelproblema.

Entonces,esaeslanuevaevidenciaquetengohastaahora.Mipreguntaes:¿Cuálseríalacausaprobabledelosproblemasconmiconvertidor?

Aquíhayunafotodeldiseñodemitablero,siesoayuda.NotomeencuentalosLEDsdeTXyRX,loshedesconectado.

    
pregunta Ricardo

2 respuestas

3

Probablemente sea el cristal en tu tablero objetivo.

Una roca de 16 MHz probablemente no pueda generar un reloj para 115200 baudios exactamente lo suficiente. A lo largo de un flujo continuo de caracteres lo suficientemente largo, los relojes de los dos dispositivos se desincronizarán. Eventualmente, obtendrá un error de encuadre y un mal carácter, y los dispositivos se volverán a sincronizar en el siguiente borde descendente (bit de INICIO).

El hecho de que sus errores sean más o menos periódicos tiende a respaldar esta hipótesis. Vi un problema similar (a una velocidad mucho menor) en una línea de módem a una minicomputadora hace muchos, muchos años.

Si puede alimentar su UART con un reloj que es exactamente correcto para 115200, haga eso y vea qué sucede. (Si tiene acceso a un generador de señales EXPENSIVO realmente bueno, úselo).

    
respondido por el John R. Strohm
2

Supongo que es un problema de cristal de 16 MHz como se menciona en el comentario. Debe obtener 3.7%@115200, no 4.5%. Por lo tanto, tal vez el 0% a 57600 en lugar del 2.1% de la hoja de datos puede ser una falta de cristal. De todos modos, tampoco puedo usar 115200 @ 16MHz contra ningún dispositivo serial "preciso". No hay ningún problema en la placa Arduino 2560 con 2560 < - > 16u2 < - > cadena USB, ya que 2560 y 16u2 tienen el mismo cristal (es decir, error de baudios) y la velocidad serial USB es solo una tasa virtual.

Intente hacer eco de char con más de un bit e inspeccione qué cambio de bit ocurre en respuesta.

El error revela muy bien si conecta el analizador lógico con el decodificador UART ;-)

    
respondido por el TMa

Lea otras preguntas en las etiquetas