Primero, veamos la conexión física. Esta serie de microcontroladores trabajan a 3.3v lo que los hace más susceptibles al ruido si no se hace un buen conexionado. Es estrictamente necesario colocar capacitores de 0.1 uF entre cada par de pines Vdd-Vss como se muestra en la Figura 2-1 de la datasheet (yo estaré usando en este ejemplo un PIC24FJ32GB002):
Si no se colocan estos capacitores el PIC tendrá un comportamiento errático debido al ruido. Usaré en este ejemplo un cristal de 8MHz con capacitores de 22pF. Una vez conectado el circuito podemos avanzar a la configuración del oscilador. Configuraremos el oscilador externo con PLL activado con la frecuencia de reloj FOSC máxima de 32 MHz (recordemos que FCY = FOSC/2). He marcado el camino que nos interesa sobre el diagrama de la Figura 8-1 de la página 107:
Si estamos usando un cristal de 8 MHz ¿Qué modo es el adecuado? Eso lo ponemos encontrar en la tabla 8-3 de la pag. 114, el cual dice que es XTPLL. En la misma tabla se indica que el divisor del PLL requerido es 2. Ahora solo necesitamos saber que bits de configuración necesitamos modificar. En la tabla 8-1 de la página 108 podemos ver que son POSCMD y FNOSC. Para encontrar los macros necesarios podemos ir a Compiler Help en el dashboard de MPLAB X:
Abrirá un archivo HTML donde debemos buscar Configuration Settings Reference. De ahí podrán copiar los pragmas requeridos. Ahora solo falta un ajuste más pero se hará escribiendo en un registro. Lo que falta es asegurarnos que FOSC tenga un frecuencia de 32 MHz. Para esto debemos revisar el registro CLKDIV (pág. 111) dónde podremos ver que el valor de división del último postcaler es de 0. Ahora tenemos toda la información necesaria para escribir nuestro programa:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//--- Bits de configuración --- | |
#pragma config POSCMOD = XT // Oscilador primario en modo XT | |
#pragma config FNOSC = PRIPLL // Oscilador primaro con PLL | |
#pragma config PLL96MHZ = ON // PLL activado | |
#pragma config PLLDIV = DIV2 // Entrada de 8MHz | |
#pragma config FWDTEN = OFF // Timmer de Watchdog desactivado | |
#pragma config JTAGEN = OFF // Puerto JTAG desactivado | |
//----------------------------- | |
#include <p24FJ32GB002.h> | |
#include "xc.h" | |
#define FCY 16000000UL | |
#include "libpic30.h" | |
int main(void) { | |
// --- Setup --- | |
CLKDIVbits.CPDIV = 0; // FOSC = 32 MHz | |
TRISBbits.TRISB13 = 0; // B13 como salida | |
// ------------- | |
while(1){ | |
__delay_ms(500); | |
LATBbits.LATB13 = 1; | |
__delay_ms(500); | |
LATBbits.LATB13 = 0; | |
} | |
return 0; | |
} | |
No hay comentarios:
Publicar un comentario