El USB necesita si o si 6Mhz o 48Mhz para funcionar.
Por lo tanto si usas el USB vas a necesitar una de esas dos frecuencias. La primera es con un cristal directo, y la segunda usando el PLL.
La mejor forma de entender el oscilador es viendo el diagrama del mismo. El diagrama lo tenes en la parte de "oscilador" en el datasheet. Y necesitas seguir la "linea" desde la entrada del oscilador hacia donde quieras ir.
El PLL necesita si o si una frecuencia de 4Mhz. Si pones un cristal mas grande entones tenes que dividirlo para eso esta el PLLDIV
quiero manejar una frecuencia de 4mhz, usando un oscilador externo de cristal, sin preescaler ni postacaler de ningun tipo :
Suponiendo que tenes un cristal de 4Mhz y necesitas 4Mhz, entonces no vas a poder usar el USB:
#pragma config FOSC = XT_XT // Oscillator Selection bits (XT oscillator (XT))
#pragma config CPUDIV = OSC1_PLL2// System Clock Postscaler Selection bits ([Primary Oscillator Src: /1][96 MHz PLL Src: /2])
Y lo demas no importa, Estamos seleccionado XT sin el PLL, y sin preescaler (1:1)
Si necesitas si o si USB, Entonces no vas a lograr tener tus 4Mhz, solo vas a lograr un minimo de 16Mhz (maximo 48Mhz) y quedaria así para el minimo:
// CONFIG1L
#pragma config PLLDIV = 1 // PLL Prescaler Selection bits (No prescale (4 MHz oscillator input drives PLL directly))
#pragma config CPUDIV = OSC4_PLL6// System Clock Postscaler Selection bits ([Primary Oscillator Src: /4][96 MHz PLL Src: /6])
#pragma config USBDIV = 2 // USB Clock Selection bit (used in Full-Speed USB mode only; UCFG:FSEN = 1) (USB clock source comes from the 96 MHz PLL divided by 2)
// CONFIG1H
#pragma config FOSC = XTPLL_XT // Oscillator Selection bits (XT oscillator, PLL enabled (XTPLL))
Una duda mas , este bit : #pragma config PBADEN = OFF, segun la descripcion, los bits, RB4-rb0 son configurados como analogicos en el reset, pero haciendo pruebas no he encontrado ninguna diferencia entre dejarlo en 1 o en 0, alguien sabe que utilidad tiene este bit?
Un saludo a todos
Usualmente siempre pero siempre modificas el TRIS, el ADCON1 para ponerlos en digital... si es que lo necesitas como digital.
Y SI, apenas ocurre el reset estan como analogicos, si vos desactivas este bit, inician como digitales. Esto te ahorraría el modificar el registro ADCON1 para pasarlos a digitales.
O basicamente esto es lo que ocurre...
Si PBADEN es OFF (entradas en digital) el ADCON1 tiene los bits asi PCFG<3:0> = 0111. (todos los RB como digitales) , si lo tenes en ON el ADCON1 tiene los bits asi PCFG<3:0> = 0000; (Todos analogicos), pensalo como un pre-set del registro ADCON1.
Por si no queda claro:
Todo esta en el datasheet :3