Hola, estoy trabajando con un PIC18F4550 y hasta ahora había utilizado un cristal de 4Mhz(XT) con PLL desactivado. Ahora necesito cambiar a 32Mhz y para esto he cambiado mis rutinas de retrasos(para segundos, milisegundos y microsegundos) pero no se porque no me funcionan, por eso os pido ayuda; ah! bueno programo en C18. Esta es mi rutina para conseguir multiplos de 1 segundos(uso como base las rutinas de delays que proporcina microchip):
void delaySegundos(int8 segundos){
int8 i,j;
for(i=0;i<segundos;i++)
for(j=0;j<4;j++)
Delay10KTCYx(200); // Delay10KTCYx(x) = x * 10000 ciclos de intrucción...
}
Mis cuentas son las siguientes:
Tciclo_de_instrucción = 4/frecuencia = 4/32Mhz = 125nSeg
DelaySegundos(x) = x * 4 * 200 * 10000 * 125nSeg = x Seg.
El caso es que obtengo el triple del retraso esperado y no explico por qué? Ejemplo: en vez de 10 segundos, obtengo 30....
Tengo el oscillador definido como HS y el PLL desactivado(PLL = 1). Lo único que podría ser problemático es que no tengo puestos los condensadores del cristal, pero hasta ahora con 4Mhz no tuve ningun problema por esto: además ¿una desviación de frecuencia del 200%, puede darse debibo a no poner los condensadores? Realmente no lo se...
Espero algo de ayuda o consejos! Pues tampoco se si estoy obviando algún detalle que me pueda "fastidiar el invento"
Saludos y gracias de antemano!