Todavía estoy tratando de depurar esta placa convertidora de RS232 a TTL que hice, que se muestra a continuación.
Ahora creo que he reducido el problema a la velocidad :
Esta vez probé la placa con un firmware de eco simple a continuación, que básicamente repite todo lo que ingresa al puerto serie.
void setup() {
Serial.begin(57600);
}
void loop() {
if (Serial.available() > 0) {
Serial.write(Serial.read());
}
}
A 57.600 baudios, devuelve una serie de B
caracteres sin errores, como se muestra a continuación.
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
A 115.200 baudios, se producen algunos errores en la salida.
BBÂBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBÂBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBBBBBBBB
BBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBB
BBBBBBBBÂBBBBBBBBBBBBBBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBÂBBBBBBBBBBBBBBBBBBBBBB
La tasa de error parece ser bastante constante y siempre es la misma. Tenga en cuenta que la diferencia entre los códigos char B
y Â
ASCII es solo un bit negado y otro desplazado una posición a la izquierda.
B - 01000001
 - 11000010
^ ^
La hoja de datos de MAX232 dice que funciona hasta 120 kbps, así que creo que mi placa está causando el problema.
Entonces, esa es la nueva evidencia que tengo hasta ahora. Mi pregunta es: ¿ Cuál sería la razón probable de los problemas con mi convertidor?
Aquí hay una foto del diseño de mi tablero, si eso ayuda. Ignore los LED TX y RX, los he desconectado.
Probablemente sea el cristal en tu tablero objetivo.
Una roca de 16 MHz probablemente no pueda generar un reloj de 115200 baudios exactamente lo suficiente. Durante un flujo continuo de caracteres lo suficientemente largo, los relojes de los dos dispositivos se desincronizarán. Eventualmente, obtendrá un error de trama y un carácter incorrecto, y los dispositivos se resincronizarán en el siguiente flanco descendente (bit de INICIO).
El hecho de que sus errores sean aproximadamente periódicos tiende a respaldar esta hipótesis. Vi un problema similar (a una velocidad mucho más baja) 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, hágalo y vea qué sucede. (Si tiene acceso a un generador de señales realmente bueno y CARO, utilícelo).
Supongo que es un problema de cristal de 16MHz como se menciona en el comentario. Debería obtener un 3,7 % a 115200, no un 4,5 %. Por lo tanto, tal vez 0% @ 57600 en lugar del 2.1% de la hoja de datos puede ser una inexactitud del cristal. De todos modos, tampoco puedo usar 115200@16MHz contra ningún dispositivo serie "preciso". No hay problema en la placa Arduino 2560 usando 2560<->16u2<->cadena USB porque 2560 y 16u2 tienen el mismo cristal (es decir, error de baudios) y la velocidad de serie del USB es solo una velocidad virtual.
Intente hacer eco de char con más bits e inspeccione qué cambio de bit ocurre en respuesta.
El error se revela muy bien si conecta el analizador lógico con el decodificador UART ;-)
PedroJ
ricardo
ricardo