En esta entrada vamos a comenzar a aprender a Programar PIC desde Cero utilizando lenguaje C con nuestro compilador PIC C Compiler. Con este articulo aprenderás programación de PIC en C desde cero.
Hoy aprenderás a crear tus primeros programas en lenguaje C para nuestro microcontrolador. Recordemos que aunque sea un curso básico para programar microcontroladores, debemos tener un mínimo de conocimiento en lenguaje C y en Electrónica.
También explicare como pueden programar el PIC utilizando el quemador PicKit 3 para que graben los programas que vamos a comenzar a hacer en sus microcontroladores.
Si es tu primera vez aqui, te cuento que tenemos un curso COMPLETO de MICROCONTROLADORES PIC desde CERO y PASO A PASO (GRATIS) Es solo dar click en el siguiente enlace para ver todas las clases disponibles y conviértete en un experto Programando PIC:
👉🏻 CURSO DE MICROCONTROLADORES PIC
Programar PIC en C – Primeros Pasos
A continuación vamos a ver unos programas de ejemplo para Programar PIC donde usaremos las instrucciones básicas de como preguntar por una entrada y como activar una salida. Configurando nuestro PIC y colocando nuestro encabezado. Recuerda que todo esto lo vimos en la entrada pasada, si aún no lo has visto da click aqui 👉🏻 Instrucciones básicas en PIC C
Kits Economicos
A continuacin te dejo una lista de KITs económico directamente desde la CHINA para que lo adquieras desde cualquier parte del mundo.
Encender y Apagar un led con pic
Con base en el siguiente esquema electrónico que consta de un PIC16F887, un switche y un Led hacer.
Encender el LED conectado a RB0 si el switche conectado a RB1 está Activo.
#INCLUDE<16f887.h> #USE DELAY(CLOCK=4000000) #FUSES XT,PROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP #DEFINE SW PORTA,1 #DEFINE LED PORTB,0 #BYTE PORTA= 5 #BYTE PORTB= 6 MAIN() { SET_TRIS_A(0B10); //Configura el puerto A SET_TRIS_B(0B11111110); //Configura el puerto B WHILE(TRUE) // Haga por siempre { IF(BIT_TEST(SW)) // Si SW esta activado { BIT_SET(LED); // Active el led } ELSE // Sino, es decir si SW esta desactivado { BIT_CLEAR(LED); // Apagar led } } }
Como vemos es un código sencillo, donde se pregunta en todo instante si el SW(PortA,1) está activo. Si esta sentencia es cierta, se activa la salida LED(PortB,0). Todo lo usado en este código fueron las sentencias basicas vistos en los post anteriores. (al final de la página se muestra el video con la implementación de este ejemplo)
Retardo en PIC – Programar PIC
Para este segundo ejemplo, veremos una nueva instrucción básica, llamada «delay_ms(tiempo en milisegundos)». Esta es un instrucción de retardo que es muy útil ya que me permite dejar al microcontrolador esperando por un lapso de tiempo, sin hacer nada, para que luego continúe con su rutina.
En muchos programas que vamos a hacer, vamos a necesitar que el PIC se quede quieto esperando bien sea una visualizacion o esperando un tiempo para continuar con su programa. La instrucción del retardo se declara de la siguiente forma.
delay_ms(1000); //Retardo de 1 Segundo (1000 ms)
Dentro de los parentesis, se coloca el numero de milisegundos que va a durar el retardo, en este caso, se coloco 1000 milisegundos que corresponde a 1 segundo.
delay_us(1000); //Retardo de 1 mili-segundo (1000 us)
También puede hacerse en microsegundos colocando en paréntesis lo que va a durar el retardo, en este caso 1000 micro-segundos corresponden a 1 milisegundo.
Estas instrucciones son dependientes de la directiva que colocamos en el encabezado de todo programa para determinar la velocidad a la que va a correr el microcontrolador, que lo detallaremos en otra entrada más especificamente.
use delay (clock=4000000); //Reloj del CPU a 4MHz
Si queremos usar un cristal de cuarzo externo, para mejorar la presición de tiempo de nuestro microcontrolador, usamos cualquiera de las siguientes instrucciones:
use delay (clock=4000000,crystal); //Reloj de cuarzo a 4MHz
o también:
use delay (crystal=4000000); //Reloj de cuarzo a 4MHz
En el siguiente ejemplo, vamos a encender y a apagar un LED conectado a RB0 cada medio segundo.
#INCLUDE <16f887.h> #USE DELAY(CLOCK=4000000) #FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP #DEFINE LED PORTB,0 #BYTE PORTB= 6 MAIN() { SET_TRIS_B(0B11111110); //Configura el puerto B WHILE(TRUE) // Haga por siempre { BIT_SET(LED); // Active el led DELAY_MS(500); // Retardo de 0.5 segundo BIT_CLEAR(LED); // Apagar el led DELAY_MS(500); // Retardo de 0.5 segundo } }
Programando PIC usando Output Toggle CCS
En este ejemplo aprenderemos a usar una instrucción que nos permite cambiar el estado lógico de una salida, Es decir que si el Pin esta en 1 cambia para 0 y viceversa. La instrucción es output_toggle(pin_x) donde ‘x‘ se remplaza por el pin que queremos cambiar de nivel. Ejemplo: portb,1 se colocaria pin_b1.
output_toggle(pin_b1); //Cambia el estado logico del pin b1 output_toggle(pin_c4); //Cambia el estado logico del pin c4 output_toggle(pin_a2); //Cambia el estado logico del pin a2
En el siguiente ejemplo, emplearemos 3 leds conectados al PORTB, la idea del ejemplo es hacer con que cada led prenda y apague con una frecuencia diferente, y para eso utilizaremos la instrucción output_toggle y delay_ms. La idea entonces es hacer que el LED 1 prenda y apague cada 233 ms, el LED 2 cada 592 ms y el LED 3 cada 879 ms.
#INCLUDE <16f887.h> #USE DELAY(CLOCK=4000000) #fuses XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP #byte PORTB= 6 long led1,led2,led3; //crea tres contadores para llevar el tiempo //Programa Principal VOID MAIN() { SET_TRIS_B(0); //Configura PUERTO B como salida //Inicializa los 3 contadores en cero led1=0; led2=0; led3=0; WHILE(TRUE) //Haga por siempre { delay_ms(1); //Coloco el retardo en 1 ms led1++; //aumento contador del led 1 led2++; //aumento contador del led 2 led3++; //aumento contador del led 3 if (led1==233){ //si el contador llego a 233 ms entonces... output_toggle(pin_b0); // cambie de estado el Pin B0 led1=0; } if (led2==595){ //si el contador llego a 595 ms entonces... output_toggle(pin_b1); // cambie de estado el Pin B1 led2=0; } if (led3==879){ //si el contador llego a 879 ms entonces... output_toggle(pin_b2); // cambie de estado el Pin B2 led3=0; } } }
Programar PIC usando el PICKIT 3
Para poder programar los códigos de los ejemplos anteriores en nuestro PIC, vamos a necesitar de un quemador. En esta entrada voy a enseñarles a usar el Quemador PICKIT3 el cual vemos a continuación:
El datasheet o manual del PICKIT3 puede se encontrar a través del siguiente link (click aca) El PICKIT3 es un programador en circuito, es decir podemos programar nuestros microcontroladores directamente en el circuito o en la protoboard, sin necesidad de tener que colocar el PIC en una base especifica.
La programación es sumamente sencilla, el PICKIT3 posee 6 lineas como puede ser observado en la sigiente figura:
Vemos que tiene una flecha indicando el Pin 1, que es el Master Clear. Ahora para programar nuestro PIC solo basta con conectar cada pin del PICKIT3 con su respectivo pin del PIC, así por ejemplo el Pin1MCLR debe conectarse con el MCLR del pic, el pin2 va a positivo (+5v), el pin3 va a tierra (GND), el pin 4 va al ICSPDAT del PIC y el pin5 va al ICSPCLK del PIC, el pin 6 del PICKIT3 no es necesario conectarlo. A continuación muestro los pines del PIC que deben ser conectados al 16F887:
Descargar PICKIT 3
El software para programar el PIC, sera la versión PicKit3 StandAlone, el cual es una versión lanzada por Microchip para programar los PIC sin necesidad de instalar el MPLAB.
Puedes descargar el PicKit3 StandAlone V1.0 dando click aca.
Puedes descargar el PicKit3SatandAlone V3.1o dando click aca
La primera vez que ejecutamos el programa, nuestro PICKit 3 estará configurado unicamente para ser usado por el MPLAB X, como lo vemos en la siguiente figura:
Para eso deberemos descargar el firmware para que el Standalone funcione, de la siguiente forma:
Instalamos entonces el sistema operativo que se encuentra en la carpeta de instalación del PicKit3 Standalone, en mi caso por defecto está instalado en: C:\Program Files (x86)\Microchip\PICkit 3 v3
A continuación se muestra un video con la primera configuración que debe hacerse en el Programa del PICKIT3 Standalone:
IMPORTANTE: Si se desea trabajar con el MPLAB X, despues de haber cambiado el sistema operativo del PICKit 3, se debe revertir esta operación, de lo contrario el PICKit 3 NO VA A TRABAJAR CON MPLAB X, y saldrá el siguiente ERROR:
The programmer could not be started: Could not connect to tool hardware: PICkit3PlatformTool, com.microchip.mplab.mdbcore.PICKit3Tool.PICkit3DbgToolManager
Para eso, basta clicar en el Standalone donde dice Revert to MPLAB Mode:
En el siguiente video vemos la implementación práctica del Ejemplo 1 – Encender y apagar un led, en la vida real:
En el siguiente video vemos la implementación práctica del Ejemplo 2 – Retardo con PIC, en la vida real:
Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:
👉 Invitar a Sergio a un Café ☕️
Que esten muy bien, nos vemos en la siguiente entrada.
Mi nombre es Sergio Andres Castaño Giraldo, y en este sitio web voy a compartir una de las cosas que mas me gusta en la vida y es sobre la Ingeniería de Control y Automatización. El sitio web estará en constante crecimiento, voy a ir publicando material sobre el asunto desde temas básicos hasta temas un poco más complejos. Suscríbete al sitio web, dale me gusta a la página en Facebook y únete al canal de youtube. Espero de corazón que la información que comparto en este sitio, te pueda ser de utilidad. Y nuevamente te doy las gracias y la bienvenida a control automático educación.