Saltar al contenido
Control Automático Educación

Programar PIC desde Cero en C

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

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.

Proyecto1

Encender el LED conectado a RB0 si el switche conectado a RB1 está Activo.

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.

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.

En el siguiente ejemplo, vamos a encender y a apagar un LED conectado a RB0 cada medio segundo.

Microcontroladores PIC

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.

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.

PIC C

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:

pickit3

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:

PicKit3 PinOut

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:

pickit3 + pic16f887

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

A continuación se muestra un video con la primera configuración que debe hacerse en el Programa del PICKIT3 Standalone:

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.

Entradas relacionadas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (16)

Sergio, me gustaria proyectos con stepers y motores de ca. gracias

Responder

buen día

amigo, para conectar al pickit3 un dspic33fj128mc802, donde no es claro en el datasheet los ICSPDAT y el ICSPCLK, a que pines los debería conectar?

Responder

Pagina 19 del Datasheet Juan. El ICSPDAT = PGED y el ICSPCLK= PEGEC,puedes usar cualquiera de los 3 que tiene PGED1, PGEC1 PGED2, PGEC2 PGED3, PGEC3

Responder

Profesor necesito activar dos entradas mediante push botón con sus respectivas salidas .en el ejemplo simplemente nos explico con un Led y un push botón puede ayudarme para desarrollar el código de dos entradas y dos salidas

Responder

Luis es lo mismo explicado aquí. Cada entrada en el trisA por ejemplo se configura con 1, cada salida con 0. Por ejemplo dos entradas en el puerto A sería (SET_TRIS_A(0B11);) y debes preguntar independientemente por cada entrada con dos (if) por ejemplo “if(bit_test(porta,0)){ …….} else {……..}” y luego la misma pregunta para el segundo push button “if(bit_test(porta,1)){ …….} else {……..}”

Responder

hola amigo buen tutorial una consulta estoy haciendo un timer en c estoy usando el oscilador interno del pic16f628a es un temporisador doble el detalle es en simulacion funciona pero en board no muestra nada en el lcd
aqui el inicio no se si esta bien la cabecera
#define LCD_ENABLE_PIN PIN_A3
#define LCD_RS_PIN PIN_A2
#define LCD_RW_PIN PIN_A5
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
#use standard_io(A)
//#use fixed_io(a_outputs=PIN_A1,PIN_A2,PIN_A3,PIN_A6)
#include
#define CRISTAL 4000000
#define FRECUENCIA_TIMER1 CRISTAL/4 //
int32 Ticker;
int8 Segundos=0;

Responder

Parece estar definido bien. Tal vez en el montaje práctico no has conectado los pines de contraste del LCD o depronto no has colocado el master clear a positivo. Lo digo es porque si te simula bien, debe ser algún problema en el hardware.

Responder

hola sergio un gusto saludarte …hermano necesito tu ayuda estoy programando con ccs y pues no se como hacer para usar una funcion en un pic que cumpla lo siguiente en este caso con el pic 12f508 yo deseo que por un puerto funcione constantemente un pulso y que a la vez en otro pin haga otra funcion sin que sea afectada por la primera instruccion por decir que un led apague y prenda por 10ms y se mantenga alli y a la vez por otro pin salga otro pulso 200ms …cuando procedo hacer el programa se mezcla el tiempo de uno con el otro no logro independizar …espero me entiendas y agradezco mucho me puedas ayudar

Responder

Para eso no puedes usar el daly_ms() pues forzas a que el pic se detenga sin hacer nada y por eso se te mezclan los tiempos. Para tu aplicación deberás usar el TIMER0, puedes crear una rutina con una interrupción que vaya incrementando un contador cada 10ms por ejemplo para encender el led y cuando la cuenta llegue a 200 activas el estado lógico del pulso generado en el otro pin. Para aplicaciones precisas con tiempo, siempre es recomendable usar los Timers.

Responder

Hola, disculpa cuál es la función de la línea “#BYTE PORTB= 6”, ¿Qué pasa si se pone?

Responder

Hola Rodrigo, esa linea le dice al compilador donde se ubica los pines del puerto B. Le esta diciendo que para hacer alguna cosa con el puerto, tiene que dirigirse al banco de memoria en la posición 6. A medida que vayas avanzando en el curso, se te será mucho más familiar estos conceptos.

Responder

Muy buen tutorial, pero tengo una duda si en el banco de memoria no fuera 05h sino por ejemplo f80h ¿como escribiria eso en #byte?

Responder

Hola Daniel, en ese caso lo escribes en Hexadecimal:
#byte PORTA= 0x80

Responder

parcero como siempre gracias excelente

Responder

De nada Emerson, que bueno que te sirve el contenido del blog.

Responder

muy buen exelente

Responder