viernes, 22 de febrero de 2019

Iniciando con el PIC18F45K50 / 25K50 en XC8

El PIC18F4550 es uno de los microcontroladores más populares entre estudiantes y hobbistas. Sin embargo ya es algo viejo (no tiene soporte para MCC , los K50 si). Poco a poco, se está migrando a su sustituto más nuevo: el PIC18F45K50. En México, fecha de 2019, aún no es muy fácil de conseguir en tiendas pero puede comprarse con envío gratis en Newark Mexico. Si nunca han usado MPLAB con XC8 aquí hay un tutorial bastante bueno (con PIC16, pero estén pendientes a mi canal porque subiré un curso para los K50). Vamos a realizar una práctica sencilla para comenzar a familiarizarnos con este MCU: Prender y apagar un led conectado a RB0 mediante un switch conectado a RD0 con un reloj a 48 MHz. Tengan a la mano la datasheet y vayamos por partes:

1. Configuración del reloj

El esquema de reloj es distinto al de su antecesor [pag. 29]. Usando un cristal de 16 MHz, este es el camino que debe estar habitado para conseguir los 48 MHz:
Click para agrandar
Los configuraciones necesarios son las siguientes:

#pragma config PLLSEL = PLL3X
#pragma config CFGPLLEN = OFF // ver Tabla 3-3 
#pragma config CPUDIV = NOCLKDIV
#pragma config FOSC = HSM     

#pragma config PCLKEN = ON  

 2. Configuración de puertos

Los pines RB0 y RD0 son usados por el módulo ADC por lo que deben desactivarse para ellos. En el caso del puerto B, esto puede hacerse al generar la cabecera de fuses con la linea:

#pragma config PBADEN = OFF

Para el caso de RDO deberá hacerse en el código principal escribiendo en el registro ANSELD [la tabla con todos los registros de función especial está en la página 84 de la datasheet] :
 3 Código completo en C

Como regla general siempre se debe leer en puerto y escribir  en latch:

No hay comentarios: