PLLDIV = 2 Divide by 2 (8 MHz oscillator input) PLLDIV = 3 Divide by 3 (12 MHz oscillator input) PLLDIV = 4 Divide by 4 (16 MHz oscillator input) PLLDIV = 5 Divide by 5 (20 MHz oscillator input) PLLDIV = 6 Divide by 6 (24 MHz oscillator input) PLLDIV = 10 Divide by 10 (40 MHz oscillator input) PLLDIV = 12 Divide by 12 (48 MHz oscillator input) System Clock Postscaler Selection bits: CPUDIV = OSC1_PLL2 [Primary Oscillator Src: /1][96 MHz PLL Src: /2] CPUDIV = OSC2_PLL3 [Primary Oscillator Src: /2][96 MHz PLL Src: /3] CPUDIV = OSC3_PLL4 [Primary Oscillator Src: /3][96 MHz PLL Src: /4] CPUDIV = OSC4_PLL6 [Primary Oscillator Src: /4][96 MHz PLL Src: /6] USB Clock Selection bit (used in Full-Speed USB mode only; UCFG:FSEN = 1): USBDIV = 1 USB clock source comes directly from the primary oscillator block with no postscale USBDIV = 2 USB clock source comes from the 96 MHz PLL divided by 2 Oscillator Selection bits: FOSC = XT_XT XT oscillator (XT) FOSC = XTPLL_XT XT oscillator, PLL enabled (XTPLL) FOSC = ECIO_EC EC oscillator, port function on RA6 (ECIO) FOSC = EC_EC EC oscillator, CLKO function on RA6 (EC) FOSC = ECPLLIO_EC EC oscillator, PLL enabled, port function on RA6 (ECPIO) FOSC = ECPLL_EC EC oscillator, PLL enabled, CLKO function on RA6 (ECPLL) FOSC = INTOSCIO_EC Internal oscillator, port function on RA6, EC used by USB (INTIO) FOSC = INTOSC_EC Internal oscillator, CLKO function on RA6, EC used by USB (INTCKO) FOSC = INTOSC_XT Internal oscillator, XT used by USB (INTXT) FOSC = INTOSC_HS Internal oscillator, HS oscillator used by USB (INTHS) FOSC = HS HS oscillator (HS) FOSC = HSPLL_HS HS oscillator, PLL enabled (HSPLL) Fail-Safe Clock Monitor Enable bit: FCMEN = OFF Fail-Safe Clock Monitor disabled FCMEN = ON Fail-Safe Clock Monitor enabled Internal/External Oscillator Switchover bit: IESO = OFF Oscillator Switchover mode disabled IESO = ON Oscillator Switchover mode enabled Power-up Timer Enable bit: PWRT = ON PWRT enabled PWRT = OFF PWRT disabled Brown-out Reset Enable bits: BOR = OFF Brown-out Reset disabled in hardware and software BOR = SOFT Brown-out Reset enabled and controlled by software (SBOREN is enabled) BOR = ON_ACTIVE Brown-out Reset enabled in hardware only and disabled in Sleep mode (SBOREN is disabled) BOR = ON Brown-out Reset enabled in hardware only (SBOREN is disabled) Brown-out Reset Voltage bits: BORV = 46 4.6V BORV = 43 4.3V BORV = 28 2.8V BORV = 21 2.1V USB Voltage Regulator Enable bit: VREGEN = OFF USB voltage regulator disabled VREGEN = ON USB voltage regulator enabled Watchdog Timer Enable bit: WDT = OFF WDT disabled (control is placed on the SWDTEN bit) WDT = ON WDT enabled Watchdog Timer Postscale Select bits: WDTPS = 1 1:1 WDTPS = 2 1:2 WDTPS = 4 1:4 WDTPS = 8 1:8 WDTPS = 16 1:16 WDTPS = 32 1:32 WDTPS = 64 1:64 WDTPS = 128 1:128 WDTPS = 256 1:256 WDTPS = 512 1:512 WDTPS = 1024 1:1024 WDTPS = 2048 1:2048 WDTPS = 4096 1:4096 WDTPS = 8192 1:8192 WDTPS = 16384 1:16384 WDTPS = 32768 1:32768 PORTB A/D Enable bit: PBADEN = PORTB<4:0> pins are configured as digital I/O on Reset OFF PBADEN = ON PORTB<4:0> pins are configured as analog input channels on Reset Low-Power Timer 1 Oscillator Enable bit: LPT1OSC = OFF Timer1 configured for higher power operation LPT1OSC = ON Timer1 configured for low-power operation MCLR Pin Enable bit: MCLRE = OFF RE3 input pin enabled; MCLR pin disabled MCLRE = ON MCLR pin enabled; RE3 input pin disabled Stack Full/Underflow Reset Enable bit: STVREN = OFF Stack full/underflow will not cause Reset STVREN = ON Stack full/underflow will cause Reset Single-Supply ICSP Enable bit: LVP = OFF Single-Supply ICSP disabled LVP = ON Single-Supply ICSP enabled Boot Block Size Select bit: BBSIZ = BB1K 1KW Boot block size BBSIZ = BB2K 2KW Boot block size Dedicated In-Circuit Debug/Programming Port (ICPORT) Enable bit: ICPRT = OFF ICPORT disabled ICPRT = ON ICPORT enabled Extended Instruction Set Enable bit: XINST = OFF Instruction set extension and Indexed Addressing mode disabled (Legacy mode) XINST = ON Instruction set extension and Indexed Addressing mode enabled Code Protection bit: CP0 = ON Block 0 (000800-001FFFh) or (001000-001FFFh) is code-protected CP0 = OFF Block 0 (000800-001FFFh) or (001000-001FFFh) is not code- protected Code Protection bit: CP1 = ON Block 1 (002000-003FFFh) is code-protected CP1 = OFF Block 1 (002000-003FFFh) is not code-protected Boot Block Code Protection bit: CPB = ON Boot block (000000-0007FFh) or (000000-000FFFh) is code- protected CPB = OFF Boot block (000000-0007FFh) or (000000-000FFFh) is not code- protected Write Protection bit: WRT0 = ON Block 0 (000800-001FFFh) or (001000-001FFFh) is write-protected WRT0 = OFF Block 0 (000800-001FFFh) or (001000-001FFFh) is not write- protected Write Protection bit: WRT1 = ON Block 1 (002000-003FFFh) is write-protected WRT1 = OFF Block 1 (002000-003FFFh) is not write-protected Configuration Register Write Protection bit: WRTC = ON Configuration registers (300000-3000FFh) are write-protected WRTC = OFF Configuration registers (300000-3000FFh) are not write-protected Boot Block Write Protection bit: WRTB = ON Boot block (000000-0007FFh) or (000000-000FFFh) is write- protected WRTB = OFF Boot block (000000-0007FFh) or (000000-000FFFh) is not write- protected Table Read Protection bit: EBTR0 = Block 0 (000800-001FFFh) or (001000-001FFFh) is protected from ON table reads executed in other blocks EBTR0 = OFF Block 0 (000800-001FFFh) or (001000-001FFFh) is not protected from table reads executed in other blocks Table Read Protection bit: EBTR1 = ON Block 1 (002000-003FFFh) is protected from table reads executed in other blocks EBTR1 = OFF Block 1 (002000-003FFFh) is not protected from table reads executed in other blocks Boot Block Table Read Protection bit: EBTRB = ON Boot block (000000-0007FFh) or (000000-000FFFh) is protected from table reads executed in other blocks EBTRB = OFF Boot block (000000-0007FFh) or (000000-000FFFh) is not protected from table reads executed in other blocks
PLL Prescaler Selection:
La funcin de este Fuse es dividir la frecuencia de entrada del Oscilador (OS1 y OS2) a las siguientes escalas: /No divide (1), /2, /3, /4, /5, /6, /10, /12. Esto mediante la configuracin de PLLDIV el cual funciona como un multiplexor, ejemplo si ponemos un cristal de 20MHz y configuramos Divide by 5 (20 MHz oscillator input) estaremos dividiendo FOSC entre 5 por lo que tendremos 4MHz a la salida del MUX.
En su caso si ponemos No prescaler (4 MHz oscillator input drives PLL directly) estamos en su momento desactivando la funcin de divisor, nuestro oscilador es de 4 MHz de estrada, darse cuenta que esto es un paso importante ya que dependiendo del oscilador que estemos conectando a nuestro microcontrolador ser la configuracin de este fuse.
La finalidad, es obtener siempre 4 Mhz de frecuencia que son necesarios para hacer funcionar el siguiente circuito que genera a partir de 4 MHz de frecuencia una salida de 96 MHz, esta seal entra alPLL Postcaler que con su divisin de /1,/2,/3,/4 podemos obtener frecuencias de 48,32,24,16 MHz. Aqu llegamos a un punto que puede ser muy til para nosotros, ya que a partir de un cristal de 4 MHz u otro valor podemos obtener una frecuencia de hasta 48 MHz de reloj de trabajo.
System Clock Postscaler Selection:
Este tienes dos funciones, uno ya tocamos en el fuse de arriba y es que este fuse es el encargado de hacer la divisin de frecuencia tanto de la seal de entrada de 96 MHz o del cristal u oscilador de entrada.
Veamos la configuracin con el 96 MHz PLL:
Dado que en la aparte de PLL Prescaler Selection tuvimos obligatoriamente que configurar la divisin de nuestra entrada de reloj, para as poder generar 4 Mhz siempre para poder luego convertirlos a 96 MHz de frecuencia, lamentablemente no podemos usar esta frecuencia como de trabajo, sin embargo podemos dividirla en /2,/3,/4,/6 para as obtener 48,32,24,16 MHz como frecuencias de reloj, esto es til por dos cosas, una ya que para poder usar en su momento el modulo USB que trae integrado el microcontrolador es necesario tener una seal de 48 MHz de reloj. La segunda podramos decir que es la misma solo que explicare mejor, en su momento si no deseamos usar el modulo USB pero deseamos que con nuestro oscilador de 4 MHz o diferente obtener una seal de hasta 48 MHz este es nuestro registro a configurar.
Configuracin para el Oscilador Source:
Este mismo Fuse tiene un efecto en su momento en nuestra Fuente de Oscilacin y es que podemos dividirla tambin, por ejemplo, tomaremos el ejemplo de un Cristal de 8 MHz como fuente de reloj, nos fijamos que el fuse trae las siguientes escalas /1,/2,/3,/4. Esto significa que si escogemos la configuracin;
[Primary Oscillator Src:/1][96 MHz PLL Src:/2]
Estamos diciendo que no habr divisin ya que 8 MHz entre /1 es 8. Caso diferente si nosotros escogemos la siguiente configuracin.
USB Clock Selection (used in Full-Speed USB mode only;UCFG):
Este fuse configura de donde proviene la velocidad de reloj para el Modulo USB. Si escoges:
USB clock source comes from the 96 MHz PLL divided by 2.
Configuras que los 48 MHz que se necesitan para el modulo USB sean proporcionados de la divisin de 96 MHz divididos por dos que son proporcionados por el Postcalador.
USB clock source comes directly from the primary oscillator block with no postcale.
En este caso los 48 MHz sern proporcionados desde el oscilador primario.
Oscillator Selection:
Aqu se escoge el tipo de oscilador que se usara, para mayor informacin leer la seccin 2.2 Oscillator Types del datasheet.
Sin embargo a causa de las explicacin de los 3 fuses anteriores me tomare el tiempo de explicar 2 opciones. Ntese que entre la lista de opciones que posee el Microcontrolador existen cuatro que a mi parecer juegan un papel importante y son:
HS oscillator, PLL enabled (HSPLL)
HS oscillator (HS)
XT oscillator, PLL enabled (XTPLL)
XT oscillator (XT)
Primero que nada recordar que;
Osciladores de 4 MHz o menores son del tipo XT as que debern escoger esa configuracin.
Osciladores a mayores frecuencias son del tipo HS.
Ntese que este fuse de seleccin del tipo de Oscilador esta ligado a los primeros 3, ya que al elegir la opcin HS oscillator, PLL enabled (HSPLL) estamos activando el uso del Postscaler dando la oportunidad de configurar el fuse System Clock Postscaler Selection donde dependiendo de la escala de divisin obtendremos 48,32,24,16 MHz. Caso contrario es que si solo seleccionamos HS oscillator (HS) estamos deshabilitando la opcin del Postscaler y el fuse System Clock Postscaler Selectionsolo nos da la opcin de dividir o no a nuestro reloj principal.
Estos mismo efectos son para el XT oscillator, PLL enabled (XTPLL) y XT oscillator (XT).
La fuente de reloj primaria y la del USB son independientes y es que podemos hacer que el microcontrolador funciones directamente con la fuente primaria y el USB con los 48 MHz proporcionados por el Postcaler o en su caso los dos a 48 MHz.
Fail - Safe Clock Monitor:
Como indica su nombre, el monitor para detectar un fallo de la fuente de reloj (Fail-Safe Clock Monitor - FSCM) monitorea el funcionamiento externo y permite al microcontrolador continuar con la ejecucin de programa en caso de que el oscilador falle por alguna razn. En tal caso, el oscilador interno toma su funcin.
El monitor detecta un fallo al comparar las fuentes de reloj interno y externo. Si los pulsos del oscilador externo tardan ms de 2mS en llegar, la fuente de reloj ser automticamente cambiada por la interna. As, el oscilador interno sigue funcionando controlado por los bits del registro OSCCON. Si el bit OSFIE del registro PIE2 est a uno, se producir una interrupcin.
El reloj interno sigue siendo la fuente del reloj del sistema hasta que el dispositivo reinicie con xito el oscilador externo que vuelve a ser la fuente de reloj del sistema. De manera similar a casos anteriores, este mdulo est habilitado al cambiar la palabra de configuracin justamente antes de que se inicie el proceso de programar el chip. Esta vez, esto se realiza al seleccionar la opcin Fail-Safe Clock Monitor.
Internal/External Oscillator Schitchover
El modo de cambio automtico de velocidad de reloj se utiliza para reducir el consumo de corriente cuando el microcontrolador funciona en modo de reposo. De qu se trata todo esto?.
Cuando se configura en modo LP, XT o HS, el oscilador externo se desactiva al pasar a modo de reposo para reducir el consumo de corriente total del dispositivo. Cuando se cumplen las condiciones de "despertamiento", el microcontrolador no se pone a funcionar inmediatamente puesto que tiene que esperar a que se estabilice la frecuencia de seal de reloj. Este tiempo muerto dura exactamente 1024 pulsos, despus de que el microcontrolador contina con la ejecucin del programa. El caso es que se ejecutan slo unas pocas instrucciones antes de que el microcontrolador vuelva al modo de reposo.
Eso significa que la mayora de tiempo as como la mayora de corriente de bateras se ha perdido en vano. El caso se soluciona utilizando el oscilador interno para ejecutar el programa durante la duracin de 1024 pulsos. Tan pronto como se estabilice la frecuencia del oscilador externo, l retoma automticamente "el papel principal". Todo el procedimiento se habilita al poner a uno el bit de palabra de configuracin. Para programar el microcontrolador, es necesario seleccionar la opcin Int-Ext Switchover (conmutacin interna/externa) por software.
Power-up Timer
Este temporizador emplea el oscilador INTRC como fuente de reloj. Proporciona un retardo fijo de 62 ms durante el encendido. Esta diseado para mantener al PIC en reset mientras la fuente de alimentacion se estabiliza y puede ser habilitado o deshabilitado (leer el registro necesario en la documentacion de cada MCU).
Para el 18F4550 leer 4.5.1 de la hoja de datos.
Brown-out Reset
El Brown-out Reset es un sistema muy simple que hace que el PIC entre en modo Reset, no hace nada, si la alimentacin VCC baja de un cierto valor que es configurable. Se configura activndolo en el registro correspondiente y seleccionando el nivel de voltaje por debajo del cual queremos que el PIC permanezca reseteado. Lo suyo es trabajar en conjuncin con el Power-up Timer que debidamente configurado lo que hace es "liberar" el Reset tras un tiempo programado despues de haberse estabilizado el PIC.
Esto es lo que hace; al caer la tensin de alimentacin nuestro PIC no est haciendo cosas errticas hasta quedarse sin alimentacin para funcionar, como por ejemplo lo que ocurrira si tu programa hace uso extensivo de la EEPROM, metiendo el PIC en un modo seguro mucho antes de que la caida de tensin provoque un malfuncionamiento. Al volver la tensin nominal y des-resetearse el PIC, el Power-up Timer espera an un poco para volver a poner en marcha el PIC, esto es as para asegurarnos que la tensin ha vuelto de forma estable y no se trata de picos que suben y bajan.
Los modos de configuracin de ambos y qu posibilidades tienen hay que mirarlos en el Datasheet de cada micro en particular.
Brown-out Reset Voltage
Este fuse es parte del Brown-out Reset, para saber mas sobre su configuracin ir al Register 23-3 y a la seccin 28.1 de la hoja de datos.
USB Voltege Regulator
Este habilita o deshabilita la utilizacion del regulador interno del Vbus para el USB. Ver 17.2.2.8 para mayor detalle.
Watchdog Timer
El "Watch Dog Timer" o "Temporizador Perro guardin" lo que hace fundamentalmente es resetear el micro tras un periodo de tiempo determinado. Su funcionamiento es similar a la Interrupcin por Desbordamiento de un Timer, que se produce cuando un Timer que es incrementado continuamente pasa de su valor mximo al mnimo para comenzar de nuevo a contar.
En el caso del WDT en lugar de saltar una interrupcin se genera un reset automtico en el momento de producirse dicho desbordamiento. Pero evidentemente en condiciones normales, nuestro micro funcionando correctamente, no debera producirse dicho reset automtico. Su aplicacin es muy util cuando se disea aplicaciones que dependen de recepcion de valores por comunicacin externa.
Watchdog Timer Postscale:
Seleccin de bits para la configuracion del Watchdog Timer y para ello debe de habilitar el uso de este. Mas informacion ir al apartado 25.2 de la hoja de datos.
CCP2 MUX bit:
Pertenece al modulo Capture/Compare/PWM. Mas informacion leer la seccin 15.1.2.
PORTB A/D:
Esta funcion habilita o no la conversion Analogica-Digital. Si uno requiere hacerlo manualmente debe de configurar los registros ADCON o ANSEL correspondientes en el MCU. Mas informacion leer laseccin 21.0 de la hoja de datos que trata de la conversion A/D.
Low-Power Timer 1 Oscillator:
El detalle de su funcionamiento esta en la Seccin 12.3.2.
MCLR Pin:
Este fuse es para habiltar o no la funcion de Reset Maestro Externo. En ocaciones y como es este el caso, la funcion de Reset esta en un bit de un puerto que puede ser de I/O funtion. En el 18FX550 esta ubicado en el RE3. En ocasiones por cuestiones de uso del puerto o por ahorro de espacio en placa se desactiva el MCLR y desde este fuse podemos hacerlo. Mas informacion seccin 4.2.
Stack Full/Underflow Reset:
Vea la seccin 4.0, 5.1.2.2 y 5.1.2.4.
Low Voltage Program:
Este fuse se habilita cuando nuestro MCU pertenece a la familia de los nanoWatt TECHNOLOGY, en su caso si usara un PIC18LF4550. sta familia necesita desde su programacin el uso de otros voltajes y consideraciones.
Dedicated In-Circuit Debug/Programming Port (ICPORT):
Mas informacion seccin 25.7.
Extended Instruction Set:
En el caso del C para PC s ha sido siempre un tema de discusin, una y otra vez escuchamos que los PIC no son aptos para ser programados en C, escuchamos muchas veces que lo mejor que existe para micros en general es assembler, y si, hace diez aos eso era verdad!!!! Por ejemplo la serie 16xx de PIC no es adecuada para ser programada en C, su CPU no est optimizada para eso y unas pocas lneas de cdigo agotar su memoria (nuevos MCU de la familia 16F empiezan a salir optimizados) sin embargo a partir de la serie 18 de PC s lo primero que leemos en su manual es:
C Compiler Optimized Architecture, Optional extended instruction set designed to optimize re-entrant code.
Su CPU est preparada para ser programada en C y es una opcin programarlos en assembler (lo cual me lleva a pensar como seria programar una aplicacin USB, o la simple accin de tomar cincuenta muestras en un canal analgico y promediarlas, un verdadero dolor de cabeza).
Recomiendo leer mas sobre este tema en la seccin 26.0, 26.2 y el siguiente link de la pagina de mikroElektronika. http://www.mikroe.com/forum/viewtopic.php?t=1859.
Background Debug:
Este fuse es dependiente si habilitamos o usaremos la funcion de In-Circuit Debug. Ver registro 25-6de la hoja de datos.
Los restantes fuses como el Code Protection (Block 0 -3) y los siguientes, tienen la finalidad de proteger nuestro codigo de lecturas o escrituras por medio de debugers, esto es util cuando no deseamos que alguien pueda obtener nuestro codigo fuente si es que estamos comercializando el circuito como ejemplo o por otras circunstancias. Ver registro 25-6 de la hoja de datos.