Hola,
llevo varias horas dandome de cabeza contra esto, a ver si soy capaz de explicar bien el problema y a alguien le suena alguna posible solución...
el tema es que tengo un PIC que se comunica con un dispositivo a 115200 bauds, tanto en recepción como en transmisión. Hace ya tiempo que terminé el programa de comunicaciones en ensamblador, y con un cristal HS @16Mhz todo funciona a las mil maravillas.
Por diversas razones ahora necesito usar un cristal XT <=4Mhz, y aquí viene la sorpresa. El mismo, exactamente el mismo programa que antes funcionaba perfectamente a 16Mhz, se "cuelga" en el primer intento de transmisión cuando está funcionando a 4Mhz. Es algo muy extraño, nunca lo había visto antes. El procedimiento que sigo es muy sencillo :
para empezar inicializo la usart ,
- establecer SBPRG y SPBRGH (valores distintos según vayamos a probar con XT=4Mhz o HS=16Mhz)
- SPEN = 1, SYNC= 0, BRGH = 1, BRG16 = 1
- TXEN = 1, CREN = 1
y luego según tengo que recibir o transmitir, voy activando TXIE o RCIE, para que me vaya pidiendo o entregando caracteres respectivamente. Cuando termino mi transmisión desactivo TXIE, y así sucesivamente.
Pues bien, a 4Mhz, cuando llego a mi primera transmisión y activo TXIE, el pic se queda como "esperando" algo, algo que por supuesto sea lo que sea no llega, y me resetea el pic por watchdog (???). Mientras que a 16Mhz, funciona perfectamente. Sinceramente, no lo entiendo.
La única diferencia que yo vea, es que, para 115k2 bauds, a 16Mhz la tasa de error del generador de baudios alcanzada con el par SPBRG:SPBRGH es muy baja, casi cero (0,2% si mal no recuerdo). A 4 Mhz, la tasa de error sube a 3,6%.
A menos que una tasa del 3,6% sea demasiado alta para hacer funcionar correctamente la usart a 115k2, francamente, no puedo ver por qué un código transmite perfectamente a 16Mhz, y se queda colgado a 4Mhz.
Lamento no ser demasiado claro en mi explicación, ahora mismo llevo un día y medio intentando resolver esto y estoy un poco "espeso". Si tuvierais alguna pista o dirección en la que investigar, os lo agradecería enormemente.
un saludo,