miércoles, 10 de mayo de 2017

Parpadeo de un LED - PIC18F14K22-

Programa

/* Mayo de 2017
 * Tarjeta: DM164130-9
 * Microcontrolador: PIC18F14K22
 * IDE: MPLAB X IDE v.3.60
 * Compilador: MPLAB XC8 Compiler v1.42
 Programa que produce el parpadeo cíclico del LED DS1 de la tarjeta DM164130-9
 (el LED está conectado al pin RC0 del microcontrolador).
 */

#include <xc.h>                               // Archivo de cabecera genérico
#define _XTAL_FREQ 16000000  // Frecuencia de reloj = 16 MHz
#pragma config FOSC = IRC         // Selecciona el oscilador RC interno

void main(void) {   
    OSCCON |= 0b01110000;          // Establece una frec. de reloj de 16 MHZ
    TRISCbits.TRISC0 = 0;             // Configura el pin RC0 como salida  
    
    while(1){
      __delay_ms(1000);                   // Retardo de 1 segundo
      LATCbits.LATC0 ^= 1;            // Conmuta el estado del LED
    }
}



➤ Circuito

No es necesario ningún componente externo a la tarjeta DM164130-9, dado que se utiliza un LED de ésta. En la siguiente imagen puede verse la tarjeta, alimentada a 5 V mediante una fuente y conectada al grabador PICkit 3. El programa se puede ejectutar tanto con el grabador conectado como desconectado.




➤ Observaciones

- En la entrada anterior del blog está explicado cómo grabar un programa en el microcontrolador.

- #include <xc.h> : xc.h es un archivo de cabecera genérico, el cual permite acceder a los registros del microcontrolador y el uso de macros.

- #define _XTAL_FREQ 16000000: es la frecuencia de reloj establecida mediante la orden OSCCON |= 0b01110000. Se necesita para utilizar la macro __delay_ms()

- #pragma config FOSC = IRC: selecciona el oscilador RC interno para generar la señal de reloj del microcontrolador. En realidad, con esta instrucción, se escribe '1000' en los bits 3-0 del registro CONFIG1H (ver siguiente figura). Los demás bits quedan con su valor por defecto. Esta orden permite que se pueda utilizar el microcontrolador sin conectarle un cristal externo.




- OSCCON |= 0b01110000: establece una frecuencia de reloj interna de 16 MHz. Esta instrucción escribe '111' en los bits 6-4 del registro OSCCON y deja los demás bits intactos.




- TRISCbits.TRISC0 = 0: el registro TRISC permite determinar los pines del puerto C del microcontrolador que van a funcionar como salidas y los que lo van a hacer como entradas. En este caso, se configura el pin RC0 como salida.

- LATCbits.LATC0 ^= 1:  para poner los diferentes pines del puerto C a '1' o a '0' hay que acceder al registro LATC. El programa utiliza el operador bit a bit XOR (bitwise XOR) para cambiar el estado del pin RC0 y dejar el estado de los demás pines intacto. Con esto se consigue encender y apagar el LED.    

 

No hay comentarios: