Estoy conectando un pic18f4520 a la PC vía serial (y luego uso Matlab). Usé el convertidor de nivel max232 y la prueba de eco funcionó bien. Sin embargo, cuando restablezco la imagen, inunda la conexión con ceros: lo uso s.BytesAvailable
en Matlab y es cero al principio hasta que restablezco la imagen y comienza a aumentar hasta que alcanza el tamaño máximo del búfer. ¿Alguna idea de por qué sucede esto?
Tienes un error de firmare.
Como dijo Spearson, el pin TX del PIC debe tener un pullup para evitar fallas en el encendido. Si inicializa los pines antes de encender el periférico UART, establezca el bit LAT en alto antes de establecer el bit TRIS en 0. Esto mantendrá la línea alta hasta que se habilite el UART, que debería tomar el control en ese punto.
Sin embargo, todo eso solo se ocupa de fallas breves al inicio. Si obtiene caracteres sostenidos después de la fase de inicialización, entonces tiene un error de firmware. Lo que es ese error, por supuesto, no podemos decir. Es posible que haya estropeado el controlador UART, o tal vez el código de nivel superior esté fallando y enviando constantemente algún byte.
Eche un vistazo a la línea TX que sale del PIC con un alcance y vea qué se envía exactamente. Eso podría dar una pista de dónde está fallando el código para causarlo. Por ejemplo, si parece un carácter enmarcado válido, entonces el controlador UART probablemente esté bien y el código de nivel superior sea incorrecto. Si parece una interrupción sostenida, entonces el controlador UART está estropeado o posiblemente todo el procesador se reinicia periódicamente. Esto último podría deberse a una serie de errores, incluida la falta de atención al temporizador de vigilancia.
En lugar de levantar las manos y decir "está roto", piensa en lo que debe estar pasando para que veas el síntoma que ves. Siga investigando cada capa para obtener más información. Poner un alcance en la línea TX debería haber sido algo obvio antes de pedir ayuda a alguien.
MATLAB no es una buena herramienta de depuración porque no sabe qué tipo de procesamiento de alto nivel podría realizar en el puerto serie. Quiere algo que le muestre información de puerto serie de bajo nivel. Una vez que esté funcionando, puede volver a MATLAB para verificar el paso de datos de nivel superior.
¿Qué has hecho para depurar tu firmware? Poner el RealIce o cualquiera de sus primos más pobres en el PIC y recorrer el código es otra cosa obvia que hacer. Nuevamente, esto debería haber sido una de las primeras cosas que hiciste antes de pedir ayuda a alguien.
Supongo que necesitas sesgar el pin Tx con una resistencia. Cuando se inicia el PIC, el pin está flotando, lo que provoca transiciones no deseadas.
Aquí hay una prueba para probar, mantenga el PIC en reinicio y conéctese con Matlab y vea si obtiene los ceros. Cierre Matlab e inicie el PIC y deje que inicialice los pines seriales. Después de eso, conéctese con Matlab nuevamente. Si no hay ceros, es un problema de hardware.
kevin vermeer