pic18f inundación serie con ceros cuando se reinicia

1

Estoy conectando una pic18f4520 a la PC a través de una serie (y luego uso Matlab). Utilicé el convertidor de nivel max232 y la prueba de eco funcionó mejorada. Sin embargo, cuando reinicio la imagen, se inunda la conexión con ceros: uso s.BytesAvailable en Matlab y al principio es cero hasta que reinicio la imagen y comienza a aumentar hasta que alcanza el tamaño máximo de búfer. ¿Alguna idea de por qué esto está sucediendo?

    
pregunta Rami

2 respuestas

5

Tienes un error de firmare.

Como dijo Spearson, el pin TX del PIC debe tener un pullup para evitar fallos en el encendido. Si inicializa los pines antes de encender el periférico UART, establezca el bit LAT 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 trata de fallos cortos en el inicio. Si obtiene caracteres sostenidos después de la fase de inicialización, entonces tiene un error de firmware. Lo que ese error es, por supuesto, no podemos decir. Es posible que haya arruinado el controlador UART, o tal vez un código de nivel superior está fallando y enviando constantemente algunos bytes.

Eche un vistazo a la línea de TX que sale del PIC con un alcance y vea qué se está enviando exactamente. Eso podría dar una pista de dónde se está desordenando 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 es malo. Si parece una interrupción sostenida, entonces el controlador UART se ha estropeado, o posiblemente todo el procesador se reinicie periódicamente. Esto último podría deberse a cualquier número de errores, incluida la falta de atención al temporizador de vigilancia.

Caja de jabón:

En lugar de levantar las manos y decir "está roto", piensa sobre lo que debe estar sucediendo para que puedas ver el síntoma que ves. Sigue cavando en cada capa para obtener más información. Poner un alcance en la línea de TX debería haber sido algo obvio que hacer 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. Quieres algo que te 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 pasar por el código es otra cosa obvia. Esto debería haber sido una de las primeras cosas que hiciste antes de pedir ayuda a alguien.

    
respondido por el Olin Lathrop
0

Mi conjetura es que necesitas sesgar el pin Tx con una resistencia. Cuando se inicia el PIC, el pin está flotando, lo que está causando 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, inicie el PIC y deje que inicialice los pines serie. Después de eso conectar nuevamente con Matlab. Si no hay ceros es un problema de hardware.

    
respondido por el spearson

Lea otras preguntas en las etiquetas