HOME

PRODUCTOS

PROYECTOS

TUTORIALES

VIDEOS

FREEWARE

PROGRAMAS

FUNCIONES C

EMPRESA

ENGLISH

                   

Manejo de leds, microswitches y relevador en ANSI C, para PIC, familia 16/

 

LEDSMICROSWITCHESRELEVADOR3 .jpg (182410 bytes)

 

INTRODUCCION:

Existen 2 compañías especializadas en el desarrollo de compiladores C para PICS y que son actualmente las más conocidas: la primera es HITECH y la segunda CCS. Debido a que la mayoría de los usuarios interesados en la programación en C para PICS usan algún compilador de alguna de ambas empresas, este tema y los siguientes habrán de enfocarse en los dos compiladores.

En este tema, se aprenderá a programar el manejo de 3 dispositivos: los leds, los microswitches y el relevador. El programa que utilizaremos como ejemplo está específicamente orientado al PIC16F88 y concretamente al hardware del sistema EB88. Sin embargo, hacer modificaciones en los programas para adaptarse a cualquier otro microcontrolador o a cualquier otra asignación de puertos y señales es sumamente sencillo, una vez que se ha comprendido el procedimiento.

El programa que usaremos como ejemplo realiza la siguiente función: si el microswitch RA1=0, se realiza una cuenta binaria en los leds del puerto B. Si RA1=1, entonces enciende y apaga el relevador con un período de 1 segundo. Se utiliza un microcontrolador con la frecuencia del cristal a 4 Mhz. Los diagramas electrónicos y asignación de puertos y señales puede consultarlos aquí.

 

hitech.jpg (1548 bytes)

CREAR UN PROYECTO EN MPLAB v8.50, USANDO EL COMPILADOR HITECH PRO v9.70

Si usted instala la versión 8.50 de MPLAB, el compilador de HITECH se instala automáticamente (por default) en su versión LITE en la dirección: C:\Archivos de programa\HI-TECH Software\PICC\9.70

-Genere una carpeta con el nombre "LEDS" y almacene allí los siguientes archivos: HITECHLEDSTINY.c, y key33.h

-Siga el procedimiento detallado en este archivo: CREAR UN PROYECTO DENTRO DE MPLAB.PDF

EXPLICACION DEL PROGRAMA: En las directivas del preprocesador, se incluye el archivo header <htc.h>. Este archivo contiene las equivalencias entre los nombres de los puertos, registros y bits con su dirección física en el microcontrolador 16F88. A pesar de que no se escribe el número del microcontrolador, el compilador reconoce que se trata del 16F88 porque se le indicó cuando se creó el proyecto desde el MPLAB y busca su driver en el path en donde se instaló el compilador. El archivo "key33.h" se incluye porque permite utilizar la función de retraso "DelayMs( )".

Los registros SPEN, ANSEN, CMCON, CVRCON, TRISA y TRISB deben inicializarse dentro del programa principal tal y como se muestra, para que los leds, los microswitches y el relevador funcionen adecuadamente. Para activar ó desactivar el relevador, usamos RA0=0; y RA0=1;  como se muestra en el listado de abajo. Los nombres de variables de los 4 microswitches son: RA1, RA2, RA3, RA4.

#include <htc.h>                            //ARCHIVO HEADER DEL MICROCONTROLADOR 16F88
#include "key33.h"                         //CONTIENE LA FUNCION DelayMs( ).

main(void){                                    //AQUI EMPIEZA EL PROGRAMA PRINCIPAL
SPEN=0                                        //DESHABILITA UART
CMCON=7;                                   //DESHABILITA COMPARADORES ANALOGICOS
CVRCON=0;                                //DESHABILITA VOLTAJE DE REFERENCIA
ANSEN=0                                     //DESHABILITA CONVERTIDORES A/D
TRISA=0X1E;                             //RA0 SE INICIALIZA COMO SALIDA, RA1...RA3 COMO ENTRADAS
TRISB=0x00;                               //TODOS LOS BITS DEL PUERTO B SE INICIALIZA COMO SALIDAS.
PORTB=0;                                   //SE APAGAN TODOS LOS LEDS
RA0=0;                                        //SE DESACTIVA EL RELEVADOR
while(1)                                        //AQUI INICIA EL LOOP DEL PROGRAMA
{PORTB++;                                //INCREMENTA EN 1 EL VALOR DEL PUERTO B
dado: if (RA1==1)                        //SI RA1=1, EJECUTA LO DEFINIDO ENTRE LOS CORCHETES DE ABAJO
{RA0=1;                                     //AQUI INICIA EL SUBPROGRAMA RA0=1 ENCIENDE EL RELEVADOR
DelayMs(200);                             //LLAMA A FUNCION RETRASO
RA0=0;                                        //RA0=0, APAGA EL RELEVADOR
DelayMs(200);                             //FUNCION RETRASO 250 MS.
goto dado;}                                 //AQUI SALTA A LA ETIQUETA "dado" HACIENDO UN LOOP
else                                             //SI RA1=0 ENTONCES SALTA A ESTA LINEA
{DelayMs(20);                             //RETRASO DE 20 MILISEGUNDOS PARA CUENTA BINARIA DE LEDS
continue;}}                                 //REGRESA A LOOP EN LA LINEA DESPUES DE LA DECLARACION "WHILE(1)"
}                                                  //ESTE CORCHETE DEFINE EL FINAL DEL PROGRAMA PRINCIPAL

       Aquí puede encontrar ejemplos simples de programación en C para los sistemas EDUPIC 16F84 y EVOLUPIC 16F628.

 

ccs.jpg (13855 bytes)

CREAR UN PROYECTO EN MPLAB v8.50, USANDO EL COMPILADOR CCS:

La empresa CCS ofrece la versión PRO que incluye las familias 10/12/16/18 por $150.00 dólares, en versión integrada con el MPLAB. La dirección default en donde se instala el programa y sus carpetas auxiliares es: C:\Archivos de programa\PICC

-Genere una carpeta con el nombre "LEDS" y almacene allí los siguientes archivos: CCSLEDSTINY.c y 16F88.h

- El archivo "16F88.h" contiene la información sobre los nombres de los puertos y registros especiales y de los bits. (Ej: PORTB, TRISB, RB0, RA0, etc.) y sus direcciones en memoria de datos, de tal forma que es posible asignarles un valor en forma directa, como se muestra en el ejemplo abajo. A este archivo se le hicieron adiciones para hacerlo compatible con el de HITECH. Es necesario incluirlo en la carpeta del proyecto.

- Configure el proyecto en MPLAB de una manera similar a la indicada más arriba para el caso del compilador de HITECH. En la opción "Active Toolsuite" elija el compilador de CCS.

EXPLICACION DEL PROGRAMA: A diferencia del compilador de HITECH, es necesario usar la directiva #include "16F88.h". Este archivo debe almacenarse en la misma carpeta junto con el programa fuente CCSLEDSTINY.c La directiva "use delay" permite usar la funcion delay_ms( ). El programa principal es casi idéntico al usado para el compilador de HITECH. El nombre de la función de delay que en este caso es delay_ms( ). No es necesario en CCS inicializar los registros SPEN, CVRCON, CMCON, ANSEN.

#if defined(__PCM__)
#include "16F88.h"                            //ARCHIVO HEADER DEL MICROCONTROLADOR                    
#use delay(clock=4000000)               //DIRECTIVA PARA FUNCION delay_ms( )

#rom 0X0000={0X018A,0X2803}    //DATOS REQUERIDOS POR FIRMWARE TINY PARA 16F88                  
#build(reset=0x0003)

main(void){                                     //AQUI EMPIEZA EL PROGRAMA PRINCIPAL
TRISA=0X1E;                                 //ESTA PARTE ES IDENTICA A LA USADA PARA EL COMPILADOR
TRISB=0;                                        //DE HITECH.
PORTB=0;                                     //TODOS LOS LEDS SE APAGAN
RA0=0;                                             //SE DESACTIVA EL RELEVADOR
while(1)
{PORTB++;
dado:if(RA1==1)
{RA0=1;
delay_ms(1000);                             //FUNCION DE RETRASO.
RA0=0;
delay_ms(1000);
goto dado;}
else
{delay_ms(20);
continue;}}
}                                                                  //ESTE CORCHETE DEFINE EL FINAL DEL PROGRAMA PRINCIPAL