You are on page 1of 4

MPLAB X Y C18 LEDs SECUENCIALES

Seguimos con las publicaciones en C18 y ahora encenderemos 8 LEDs conectados al puerto B con sus debidas resistencias y en el Master Clear una resistencia de 10K a VCC para que nuestro circuito funcione correctamente. Utilizaremos el PIC18F4620 y nuestra tarjeta entrenadora de PICs para ver los resultados. El circuito debe estar alimentado a 5 Volts. A continuacin el circuito que utilizaremos:

1 Pedro Snchez

mrchunckuee.psr@gmail.com

http://electronicayrobotica.wordpress.com/

Para el cdigo tenemos dos archivos el Config_FusesPIC.h y el main.c, en el primero tenemos la configuracin de todos los FUSES del PIC y que es el que hemos venido ocupando anteriormente, el segundo es el archivo donde esta todo el cdigo para que nuestros LEDs trabajen adecuadamente. Es importante recordar que se ocupara el oscilador interno configurado a 4MHz. La configuracin de los FUSES queda de la siguiente manera: Config_FusesPIC.h
#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 */

2 Pedro Snchez

mrchunckuee.psr@gmail.com

http://electronicayrobotica.wordpress.com/

Ahora nuestro cdigo en el archivo main.c nos queda de la siguiente forma: main.c
#include <p18f4620.h> #include <stdio.h> #include <stdlib.h> #include <delays.h> #include "Config_FusesPIC.h"//Configuracin de FUSES unsigned char LED_Number=0; unsigned char LED_LookupTable[8]={0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; void main(void){ //Configura oscilador interno a 4MHz OSCCONbits.IRCF2=1; OSCCONbits.IRCF1=1; OSCCONbits.IRCF0=0; ADCON1=0xFF;//Entradas y salidas digitales //Configuracin de Entradas/Salida TRISB=0x00; //Puerto B como salida //Se inicializn los puertos en cero LATA=0; LATB=0; LATC=0; LATD=0; LATE=0; while(1){ LATB=LED_LookupTable[LED_Number]; LED_Number++; if (LED_Number==8) LED_Number=0; Delay1KTCYx(100);//Retardo de 100 mS } }

Explicaremos un poco el cdigo para que se comprenda mejor. En la primera parte se encuentra la libreras utilizadas como las de los delays y la del PIC, tambin se incluye la librera donde se configuran los FUSES despus tenemos la variable LED_Number que

3 Pedro Snchez

mrchunckuee.psr@gmail.com

http://electronicayrobotica.wordpress.com/

servir para hacer un conteo, tambin se tiene una arreglo con ocho elementos llamado LED_LookupTable[8]. Como lo que haremos en este ejemplo es ir encendiendo los LEDs conectados al puerto B, el arreglo nos sirve para almacenar los datos que sern mandados al puerto. Ahora tenemos inicia nuestra funcin main y lo que hace es configurar nuestro oscilador interno a 4MHz, configuramos entradas y salidas digitales, colocamos el puerto B como salida e inicializamos los puertos en cero. Enseguida entra a un bucle infinito utilizando un while. Para actualizar el puerto del PIC se har de la siguiente manera: LATB=LED_LookupTable[LED_Number]; Como al inicio la variable LED_Number=0 no se mostrara nada, la siguiente instruccin aumentar uno a esta variable y se tiene una condicional para revisar el valor de la misma variable y no sobrepasar 8 que es el mximo de datos en el arreglo, si se cumple reinicia a cero la variable. Despus se tiene un retardo de 100 milisegundos (este tiempo puede ser modificado) y se vuelve a actualizar el puerto pero como ahora LED_Number=1 encender RB0 y as sucesivamente hasta llegar a encender RB7, despus de eso se repetir indefinidamente. Los datos en el arreglo LED_LookupTable se pueden modificar para tener otras combinaciones y que los LEDs enciendan de forma distinta.

4 Pedro Snchez

mrchunckuee.psr@gmail.com

http://electronicayrobotica.wordpress.com/

You might also like