TODOPIC
FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: manwenwe en 27 de Enero de 2007, 15:56:50
-
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" :D :D :D :D
Saludos y gracias de antemano!
-
Hola de nuevo, he estado mirando por internet los rangos de frecuencia de los cristales HS y he visto que van de 4-20Mhz.... esto es algo que no sabía :( :( :(
Entonces ¿la única forma de que un PIC funcione a más de 20Mhz es utilizar el PLL?
Por último: yo pensaba que tenía algún error en la función de retardo, por eso postee en este subforo... como finalmente parece que el problema no tiene que ver con el lenguaje C, pido disculpas :-). Si algún moderador lo ve espero que lo cambie de subforo....
Saludos!
-
Efectivamente, sólo puedes poner cristales hasta 20MHz. A partir de ahí tienes que jugar con el PLL.
Y ponle los condensadores; aunque pueda funcionar sin ellos si falla no sabrás de quién es la culpa ;-)
-
hey, yo tengo un programa a 4 mhz, y lo queria a 20, organice el programa con los retardos y todo, en proteus me funciona bien con la nueva frecuencia (xtal de 20) como yo quiero, pero despues de quemar el pic y ensayarlo, no funciona y hace cosas que no son. mi pregunta es sera el micro es un 16f877a i/p, o sera mi quemador?? :x :x :x :( :(, gracias a todos y buenos dias
-
¿Cambiaste los fuses?
-
......... fuses? :shock: :shock: :shock: :shock: :shock: :shock: :shock:, que se supone que sea eso y perdoname la ignorancia.
-
Donde ponga XT cámbialo por HS y prueba.
-
epale nocturno :lol: :lol: :P :P :P :P :D :D :mrgreen: :mrgreen: :mrgreen:
ahora puedo disfrutar de los 20 mhz. gracias
-
Me alegro que te funcione. Si miras en el datasheet, hay una sección que explica cómo se configura el oscilador, y ahí verás XT, HS y el resto de opciones.
-
ok gracias :mrgreen: :mrgreen: :mrgreen:
-
Hola, solucioné en parte mi problema(con el que inicié el post) pero ahora me surge una duda relacionada con la frecuencia de xtal... espero que me podais aconsejar: ¿cúal es la máxima frecuencia a la que pueden operar los módulos LCD 2x16(con controlador hitachi)?
Comento esto porque yo trabajaba con mi Pic a 4Mhz y con la programación del módulo a través de la librería XLCD de C18. Esta librería te pide 3 rutinas de retardo para hacer funcionar el LCD: 15ms, 5ms y 18 ciclos de reloj. Bueno, hace poco subí la frecuencia de mi Pic hasta 10Mhz; tuve algunos problemas para poner a funcionar el LCD ya que no inicializaba con las "nuevas rutinas" de retardo: con las de 15ms y 5ms no tuve mucho problema en cambio tuve que subir la de 18 ciclos de reloj porque si no el LCD no visualizaba nada.
El caso es que ahora necesito subir,de nuevo, la frecuencia de operación de mi Pic hasta los 40Mhz(utilizando PLL). Cambíe de nuevo las rutinas de retardo pero en este caso por mucho que las aumente no consigo visualizar nada... Por esto me surge la duda de si existe una frecuencia máxima de operación del módulo, a la que este sea incapaz de distinguir las señales... o algo por el estilo.
Saludos y gracias!