serie de inundación pic18f con ceros cuando se reinicia

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.BytesAvailableen 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?

Publicar el código para leer la entrada en Matlab y enviar la salida desde el PIC nos permitiría responder a su pregunta en lugar de simplemente especular sobre las posibles causas del problema.

Respuestas (2)

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.

Plataforma improvisada:

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.

 

Tranquilo tigre. Dale una oportunidad.
@Rocket: Ha tenido una oportunidad durante casi un mes. No ha regresado desde 7 horas después de publicar la pregunta, por lo que no parece que vaya a suceder nunca. Aparentemente, otro cartel de un auto en movimiento.
Extraño, entonces, ¿por qué esta pregunta ha resurgido de repente?
@Rocket: Creo que las preguntas sin una respuesta aceptada ocasionalmente son rechazadas por un bot. Tenga en cuenta que la nueva actividad era de "comunidad", que es el nombre del bot. Supongo que es para tratar de resolver los problemas abiertos, pero no funciona con los carteles que ya no existen.
Sí, probablemente debería cerrarse.
@Rocket: no veo una razón para cerrarlo, especialmente porque recibió 2 respuestas. Sin embargo, golpearlo cuando el OP no ha regresado durante casi un mes también es un poco tonto.
@OlinLathrop su comentario de tribuna es exactamente la razón por la que me resulta tan difícil encontrar personas jóvenes para impulsar y hacer crecer mi negocio. Las personas (especialmente las más jóvenes) parecen demasiado ansiosas por darse por vencidas y culpar en lugar de preguntarse sobre el problema y PROBAR cosas para ver si al menos pueden aislar la causa, y mucho menos encontrar una solución. Les digo a mis hijos que los ayudaré sin problemas, sin importar cuánto tiempo tome, siempre y cuando realmente lo intenten. Una vez que se rindan, no voy a tratar de llevarlos a una solución.

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.