Configurar frecuencia de PIC para trabajar a 64 Mhz

#1
Hola, estoy trabajando sobre una muestra que me llego de microchip, y resulta que era un encapsulado DIP, asi que me dedique a sacarle provecho a sus 64 Mhz y por consecuente a sus 12 MIPS, el tema es que haciendo un programa en CCS para el pic, recibo un mensaje diciendo:
"Option Invalid Internal Osc Freq Wrong"
Se supone que si selecciono la velocidad de reloj a 16 Mhz, con el FUSE H4 deberia de multiplicarla a 64 Mhz no?, entonces porque me saldra este error, alguna luz ?????

#include <18F46K20.h>
#device adc=8
#fuses H4,INTRC_IO, NOWDT, PUT ,BROWNOUT, NOLVP, NOMCLR
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#use delay(clock=16000000)
 
#2
Hola, estoy trabajando sobre una muestra que me llego de microchip, y resulta que era un encapsulado DIP, asi que me dedique a sacarle provecho a sus 64 Mhz y por consecuente a sus 12 MIPS, el tema es que haciendo un programa en CCS para el pic, recibo un mensaje diciendo:
"Option Invalid Internal Osc Freq Wrong"
Se supone que si selecciono la velocidad de reloj a 16 Mhz, con el FUSE H4 deberia de multiplicarla a 64 Mhz no?, entonces porque me saldra este error, alguna luz ?????

#include <18F46K20.h>
#device adc=8
#fuses H4,INTRC_IO, NOWDT, PUT ,BROWNOUT, NOLVP, NOMCLR
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#use delay(clock=16000000)
Amigo solucionaste tu problema , segun mi pic puede llegar a 48 Mhz ( pic18f4550) , se supone que si uso la directiva pll4 en los fuses la multipilca y ya alcanza los 48 mhz , pero no se como comprobar si logro eso , siempre si pudiste llevarlo a 64mhz?
 
#3
Amigo solucionaste tu problema , segun mi pic puede llegar a 48 Mhz ( pic18f4550) , se supone que si uso la directiva pll4 en los fuses la multipilca y ya alcanza los 48 mhz , pero no se como comprobar si logro eso , siempre si pudiste llevarlo a 64mhz?
Viendo las hojas de datos muy por arriba, me parece que a más de 48MHz no lo podés llevar.

Fijate en el diagrama en bloque del oscilador:



En algún punto a la salida del PLL llegás a 96MHz, para alimentar el reloj del uC y de los periféricos internos tenés que pasar si o si por un preescaler de 2 como mínimo, con lo cual tu máximo clock posible será de 48MHz y no tenés forma de llevarlo a 64MHz.
 
#4
ahhh sii ya vi ese preescaler ! pero entoncs mi duda es como saber si lo estoy llevando a 48Mhz , segun yo configuro asi mi PIC para llevarlo a 48Mhz. usando un cristal externo de 12 Mhz!

#include <18f4550.h>
#fuses hspll,mclr,nowdt,noprotect,nolvp,nodebug,pll4,novregen,nopbaden
#use delay (clock=48000000)
 
#5
Como el clock de los periféricos es el mismo que el del núcleo del uC, usá un timer y llevalo a un tiempo que te sea fácil comprobar, ej. 10 seg y encendé un led o algo.
 
#6
ahhh sii ya vi ese preescaler ! pero entoncs mi duda es como saber si lo estoy llevando a 48Mhz , segun yo configuro asi mi PIC para llevarlo a 48Mhz. usando un cristal externo de 12 Mhz!

#include <18f4550.h>
#fuses hspll,mclr,nowdt,noprotect,nolvp,nodebug,pll4,novregen,nopbaden
#use delay (clock=48000000)
Viendo la hoja de datos, en la sección 2.3 (Oscillator Settings for USB) Tabla 2-3
Para una frecuencia de reloj de 12MHz, así serían los fuses...
Código:
#include <18f4550.h>
#fuses   noieso,nofcmen,nopbaden,nobrownout,[B]cpudiv3,pll12[/B]
#use     delay(clock = 12MHz)
Se supone se debería seleccionar CPUDIV4, pero al compilar, no me queda establecido así.
Y tuve que seleccionar CPUDIV3 :unsure: para obener la división entre 4.
Ésto es leyendo la configuración con WinPic800. (Sería cuestión de ver con otro software)

Leyendo el PIC
18F4550_Reading.jpg

Viendo la configuración de fuses (Después de grabar el PIC)
18F4550_Fuses.jpg

Prueba con esos fuses usando el método que te menciona cosmefulanito04
Si puedes realizar una prueba de conexión USB rápida y sin problemas, ya está.
Como quiera mira la sección y la tabla que menciono.

Saludos.
 
#7
oooo probare , asi , pero quiero llegar a 48 mhz no a 12 Mhz , los 12 mhz son para multiplicarlos por 4 con el pll del micro ... otra cuestion :

#use delay (clock=48000000) , no tenia entendido que aqui iba la frecuencia a la que yo quiero que vaya el pic , para que el pic tenga entendido como hacer los calculos etc. o es para poner el valor de oscilacion de mi oscilador externo?
 
#8
#use delay (frecuencia del cristal) // o frecuencia de trabajo del oscilador interno.
También aplica en fuentes de reloj externas (RC/Etc.)

Sip, es para que el compilador haga las instrucciones de retardo basadas en esa frecuencia de reloj.
 
#9
entonces si quiero 48 Mhz en cpu , lo mas apropiado seria poner #use delay (48M) ?

hago alusion a esto por que acabo de leer esto y me confundi mas jeje :
NOTA:

Debo decir que no se vayan a confundir cuando declara en el CCS esto:

#use delay(clock=48000000)

Ya que mucho pueden pensar que deberia ir 20Mhz ( por el cristal real que estamos usando) pero no es asi, aca estamos declarando el clock de trabajo del pic, yaque con esto el CCS hara los calculos para poder manejar correctamente los tiempos y retardos y poder asi usar bien los delay y como nuestro clock resultante gracias al PLL es 48Mhz estamos poniendo eso .

http://www.icabots.com/foro/index.php?topic=120.0;wap2
 
Arriba