MPLAB X & C18: Encender y apagar un LED con un botón en el PIC18F4620

Seguimos con las publicaciones en C18, en ejemplos anteriores hemos visto la manera de manipular un puerto como salida ahora toca el turno de ver como se manipula un pin como salida, para ello tenemos un botón conecto al pin RE0 con su resistencia de pull-down también se ha colocado un LED con su debida resistencia en el pin RE1 y se agrego una resistencia a +5V en el pin MCLR par que el circuito funcione correctamente, así queda el circuito que utilizaremos:


Lo que hará el circuito será encender o apagar el LED cada que se presione el botón. Para el código tenemos dos archivos el “Config_FusesPIC.h” y el “main.c”, como ya sabemos en el primero tenemos la configuración de todos los FUSES del PIC, el segundo es el archivo donde esta todo el código para que el circuito trabaje adecuadamente. Es importante recordar que se ocupara el oscilador interno configurado a 4MHz.

La configuración de los FUSES queda de la siguiente manera:
/*
* File: Config_FusesPIC.h
* Author: MrChunckuee
* Configuración de FUSES del PIC18F4620
* Created on 20 de diciembre de 2014, 12:57 AM
*/
#ifndef CONFIG_FUSESPIC_H
#define CONFIG_FUSESPIC_H
#pragma config OSC = INTIO67 //Uso del oscilador interno
#pragma config FCMEN = ON
#pragma config IESO = OFF
#pragma config PWRT = ON
#pragma config BOREN = OFF
#pragma config WDT = OFF
#pragma config MCLRE = ON
#pragma config LVP = OFF
#pragma config XINST = OFF
#pragma config DEBUG = OFF
#pragma config CP0 = OFF
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRT3 = OFF
#pragma config WRTC = OFF
#pragma config WRTB = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF
#endif /* CONFIG_FUSESPIC_H */
Ahora nuestro código en el archivo “main.c” nos queda de la siguiente forma:
/*******************************************************************************
*
* ENCENDER Y APAGAR UN LED CON UN PULSADOR
*
*******************************************************************************
* FileName: main.c
* Processor: PIC18F4620
* Complier: C18 v3.47
* Author: Pedro Sánchez (MrChunckuee)
* Blog: http://mrchunckuee.blogspot.com/
* Email: mrchunckuee.psr@gmail.com
* Description: Toggle LED_STATUS with BUTTON, MCLR on, INT OSC = 4MHz
*******************************************************************************
* Rev. Date Comment
* v1.00 20/12/2014 Creación del firmware
******************************************************************************/
#include <p18f4620.h>
#include <stdio.h>
#include <stdlib.h>
#include <delays.h>
#include "Config_FusesPIC.h"//Configuración de FUSES
#define BUTTON PORTEbits.RE0
#define BUTTON_TRIS TRISEbits.RE0
#define LED_STATUS PORTEbits.RE1
#define LED_STATUS_TRIS TRISEbits.RE1
void main(void){
OSCCONbits.IRCF=0b110;//Configura oscilador interno a 4MHz
ADCON1=0xFF;//Entradas y salidas digitales
//Configuración de Entradas/Salida
BUTTON_TRIS=1;//Pin del boton como entrada
LED_STATUS_TRIS=0;//Pin del LED como salida
//Se inicializán los puertos en cero
BUTTON=0;
LED_STATUS=0;
while(1){
if (BUTTON==1){
Delay1KTCYx(50);//Retardo de 50 mS
LED_STATUS^=1;
}
}
}
view raw C18_008: main.c hosted with ❤ by GitHub
Parte del código ya se conoce por que se ha utilizado en ejemplos anteriores lo nuevo en este ejemplo es el uso de etiquetas. Tanto para referirse a un PORT como a un TRIS, el uso de etiquetas facilita el acceso a dichos pines y el código se ve mucho mejor. Para referirse a los pines Reo y RE1 se tiene lo siguiente:

#define BUTTON PORTEbits.RE0
#define BUTTON_TRIS TRISEbits.RE0
#define LED_STATUS PORTEbits.RE1
#define LED_STATUS_TRIS TRISEbits.RE1

Después se configura el oscilador interno, se dice que van a ser entradas digitales y se inicializan los puertos usando las etiquetas. Ahora dentro del while tenemos un simple ejemplo en donde se revisa el estado del pulsador, agregamos un pequeño retardo para evitar rebotes mecánicos de los pulsadores, después tenemos la instrucción LED_STATUS^=1; lo que hace es intercambiar el estado del pin, por ejemplo para la primera vez que se presione el botón el LED encenderá, si el botón se vuelve a presionar el LED se apagara.

Descargas:
Aquí el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.


Donaciones:
Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.


Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, así también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.

Publicar un comentario

0 Comentarios