Saltar al contenido
Control Automático Educación

Como Programar un Microcontrolador PIC

En esta entrada veremos los primeros pasos para aprender como programar un microcontrolador PIC desde cero, para que te vuelvas un experto y puedas desarrollar proyectos increíbles con estos dispositivos electrónicos. Por eso si quieres aprender a programar PIC desde cero, este curso es ideal para ti.

Antes de comenzar dejame mostrarte los links de utilidad:

En el siguiente link puedes acceder al curso de 👉 programación de PIC en C desde cero.

También te podria interesar la 👉 Introdución a Arduino desde cero.

O suscribirte al canal de Youtube, si deseas seguir aprendiendo más sobre programación de microcontroladores:

¿Qué es un Microcontrolador?

Un microcontrolador es un circuito integrado que contiene toda la estructura de un Microcomputador, es decir, unidad de proceso (CPU), memoria RAM, memoria ROM y circuitos de entrada/salida.

Es un dispositivo programable que puede ejecutar un sinnúmero de tareas y procesos. Un Microcontrolador esta compuesto básicamente por cuatro componentes principales:

Memoria ROM, EEPROM, EPROM o FLASH: es la memoria donde se almacena el programa. 

Memoria RAM o SRAM: es la memoria donde se almacenan los datos.

Líneas de Entrada / Salida (I / O): también llamada puertos, se utilizan para conectar elementos externos al microcontrolador.

CPU: controla y ejecuta todas las instrucciones que conforman el programa.

Existen diferentes familias de microcontroladores: Intel, Motorola, Microchip, entre otras. 

En este curso solo se estudiará el microcontrolador PIC y para efectos de estudio usaremos el PIC16F887, que pertenece a la familia de Microchip, sin embargo todos los códigos que muestran como programar microcontroladores en C vistos en este curso pueden extenderse a otro microcontrolador de la família PIC16 o PIC18 de la propia Microchip.

Microchip es una familia que se caracteriza por tener procesador RISC y arquitectura Harvard caracterizada por la independencia entre la memoria de código (programa) y la de memoria de datos.

La programacion de microcontroladores puede efectuarse en diferentes lenguajes y también en diferentes compiladores comerciales que actualmente existen.

Para realizar la programación en lenguaje C para microcontroladores PIC usaremos el compilador CCS C PIC C Compiler y por último para probar nuestros proyectos usaremos el simulador Proteus.

Sin embargo todos los programas que veamos en el Curso, podrás aplicarlos a otro PIC diferente, a lo largo de todo el contenido te dejaré notas especificandote los pasos que debes seguir para adaptar los códigos a otro microcontrolador PIC.

PIC16F887

DESCRIPCIÓN DEL MICROCONTROLADOR PIC16F887

Veamos la arquitectura que presenta el microcontrolador PIC16F887, el cual es la evolución del popular PIC16F877A. Es decir, básicamente es el mismo PIC solo que mejorado.

La distribución de los pines del PIC16F887 se puede observar en la siguiente figura.

Pines PIC16F887
Figura 1. Distribución de los Pines del PIC16F887

 Descripción de los Pines:

  • OSC1 / CLK IN (13): Entrada del cristal de cuarzo o del oscilador externo.
  • OSC2 / CLK OUT (14): Salida del cristal de cuarzo.
  • VSS (12 – 31): Conexión a tierra (GND)
  • VDD (11 – 32): Conexión a positivo (+5V)
  • MCLR# / VPP (1): Entrada de Reset o entrada del voltaje de programación. Si no se va a utilizar se debe poner a +5V.

El PIC16F887 cuenta con 5 puertos, los cuales son los pines del Chip y se pueden usar como entradas y/o salidas ademas que algunos pines cuentan con características especiales que pueden ser lectura análoga, salidas PWM, etc. (Esto se verá mas adelante en el curso). Los puertos están distribuidos de la siguiente manera:

PUERTO A: Cuenta con 6 pines que van desde RA0 hasta RA5.

PUERTO B: Cuenta con los 8 Pines (RB0 – RB7).

PUERTO C: Cuenta con los 8 Pines (RC0 – RC7).

PUERTO D: Cuenta con los 8 Pines (RD0 – RD7).

PUERTO E: Cuenta con 3 pines (RE0 – RE2)

CONFIGURACIÓN DE LOS PINES

Antes de aprender como programar un microcontrolador PIC deberemos entender como podemos configurar los pines del dispositivo embebido.

Cada pin de los puertos del microcontrolador se pueden configurar como entrada o salida digital.

Las entradas corresponden a sensores, suiches o pulsadores, es decir son los ojos del microcontrolador, el microcontrolador se da cuenta de lo que ocurre a través de las entradas.

Las salidas corresponden a los elementos que el microcontrolador va a controlar, un bombillo, un led, un motor, una electro válvula, entre otros, es decir las salidas corresponden al elemento final de control.

Cada línea de cada puerto representa un bit, por ejemplo el puerto B:

Para denotar un bit en particular, se puede decir:

PORTB, 6 → el bit 6 del puerto B

Si un PIN va a funcionar como entrada se coloca en “1” y si va a funcionar como salida se coloca en “0”.

Timer con Microcontrolador PIC

Timer PIC

hx711 + pic + ccs c

Balanza Digital con PIC – HX711

Como programar un microcontrolador PIC para Configurar el puerto B

Si se necesita configurar el puerto B de la siguiente manera:

En el encabezado del programa debe escribirse la línea:

# BYTE PORTB=6

El número 6 corresponde a la dirección de memoria Ram en la que esta ubicado el puerto B. (Esto puede verse en el datasheet del microcontrolador). En el programa principal se digita la línea:

SET_TRIS_B(0B00001111);

Los últimos cuatro bits corresponden a salidas, por lo tanto se ponen en cero y los otros cuatro corresponden a entradas por consiguiente se ponen en uno.

Eliminar Ruídos del Microcontrolador

Las implementaciones con el microcontrolador puden estár afectadas por ruídos que pueden perjudicar el funcionamiento de nuestra aplicación con un microcontrolador. A continuación te dejo 4 consejos que puedes intentar para eliminar o disminuir el efecto de los ruídos:

  1. Resolda todos los puntos de estaño de tu placa, vaya ser que talvez haya un falso contacto.
  2. Cuando trabajas con bobinas (motores, contactores) y microcontroladores la fuente de alimentación es primordial, debes tener una buena fuente, con el mínimo de rizado posible. Si te es posible, alimenta el PIC con un fuente diferente a la que alimentas la bobina, si no, entonces trata de usar un buena fuente.
  3. Coloca un condensador de Bypass, (0.1uF) entre los pines de alimentación (VCC y GND) del microcontrolador lo mas cerca posible del integrado, esto ayuda a reduzir ruidos de interferencia.
  4. Utiliza conexiones a tierra separadas, una para el microcontrolador (GND Digital) y otra para la etapa de potencia (GND Análoga).

Datasheet o Hoja de Datos del PIC

Por ultimo, es importante tener a la mano la hoja de datos del microcontrolador (Datasheet) que proporciona el fabricante con el fin de aprovechar todas las características del dispositivo y para saber donde buscar y como activar cada una de las características del chip. Si deseas puedes descargar el datasheet a continuación. DataSheet PIC16F887.

Te doy la bienvenida a este curso donde vamos a ir paso a paso viendo como programar un microcontrolador PIC desde cero, donde estoy seguro vas a aprender mucho sobre este interesante mundo de microcontroladores.

En la siguiente entrada, veremos los primeros comandos del PIC C Compiler para comenzar a preguntar por las entradas del microcontrolador PIC y también para activar los pines del PIC.

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 una respuesta

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 (34)

muy bueno el curso! gracias por favor link de proteus y PIC

Responder

Buenas excelente la explicación qué saver si este microcontrolador tiene otro reemplazo PIC16F505-/PCMOS

Responder

cuanto cobra por hacer una tarea de pic

Responder

Sergio Ing. estimado amigo, que goces disfrutes hasta el limite el 2022 y los que vengan, gracias por compartir tus conocimientos ya que son invaluables

Responder

Gracias Julio por tus buenos deseos, espero que continues avanzando y aprendiendo más sobre estos temas de sistemas embebidos. Saludos y muchos éxitos.

Responder

MUY BUEN SITIO PARA APRENDER LA PROGRAMACION DE LOS MICROCONTROLADORES…

Responder

Gracias Neftali por el comentário. Éxitos!

Responder

Cordial saludo.
Muy interesante el tema de los PIC, hace rato venía intentando aprender un poco, pero aparte de algunos foros, no había encontrado donde empezar desde cero.

Muy agradecido por su labor.

Responder

Muchas gracias Andres por el comentário. Espero enormemente que este curso te ayude a aprender y que sea de tu agrado. Saludos y bienvenido a la comunidad de controleros y controleras.

Responder

Felicitaciones profe. excelente sus clases recién estoy actualizandome de a poco.Saludos de lima -Perú.

Responder

Excelente Luis, espero saques el mejor provecho del curso. Saludos!

Responder

Felicitaciones profe SC verdad es uno de los mejores tutoriales que he estudiado gracias por sus enseñanzas Lima_Peru.

Responder

Gracias Luis, me alegro mucho que te haya servido el curso. Saludos para ti desde Rio de Janeiro Brasil.

Responder

Hola sergio, oye tengo una duda desde hace ya tiempo que mi pickit 3 marca este error cada vez que intento cargar un programa: “programming failed at program memory address 0x000000”. he intentado con PICs diferentes pero en todos me hace lo mismo, y en el encabezado de programación ya le puse “#fuses NOPROTECT” pensando que pudiera ser eso el error pero sigue sin funcionar, ya borré el software y lo volvi a instalar pero sigue igual.

Responder

Que extraño, pero eso solo te sucede es cuando deseas leer el programa del PIC? o también te sucede cuando quemas algún programa sobre el PIC? Trata de buscar el error en google, generalmente en los foros de microchip hay muy buena información, pero claro en inglés.

Responder

Hola Sergio, muy buen material para iniciar con los PIC’s, siempre he tenido una duda y cuando he visto los datasheets de algunos PIC’s lo he notado… es referente al oscilador y aqui lo mencionas, el pin 13 es entrada y el 14 salida… la duda es como configuro los pines, supongo que el 13 como entrada y el 14 como salida? hay una diferencia cuando estos han sido declarados solo como entrada?
saludos y gracias por este valioso aporte

Responder

Estimado Sergio
Antes de nada le felicito por toda la información impartida por su persona, se ve que sabe mucho de los temas. Sergio estoy iniciando en microcontroladores, realice un pequeño programita con pic 18F2550. El problema que tengo es en la simulación en Proteus y con la protoboar. El prograna no me corre, al simular solo veo que mis entradas se activan pero las salidas no. lo probe con reloj de 4Mz y 20Mz pero nada que funciona.
Por su atención quedo agradecido, y muchos exitos Sergio

Responder

debes definir la dirección de memoria de los puertos en el encabezado, que la puedes ver en la pagina 66 del datasheet.
#byte porta=0xF80
#byte portb=0xF81
#byte portc=0xF82
#byte portd=0xF83
#byte porte=0xF84

Responder

Muy agradecido por su respuesta Sergio
Le comento el mismo programa si me corre con el 16f887, lo que realize es de pasar el programa al pic 18f2550 obviamente definiendo los puertos y los registros, pero no corre el programa.
Saludos

Responder

Fijate si tienes el pin del MasterClear en +5VDC, el pin de MCLR. Si esta al aire o desconectado tu pic se está reiniciando constantemente.

Responder

Hola Sergio
Si lo tengo el pin MCLR a 5Vcc, le puedo pasar el archivo fuente en algun archivo que lo visualice y podamos encontrar el error, y a donde lo puedo enviar.?
Gracias

hola sergio mira soy nuevo en esto de los pic .. y me gustaría saber si al inicio de cualquier programa de cualquier pic…. se empieza con eso mismo parámetro … cambiando el pic y los pines cualquier ayuda le estaré agradecido

Responder

Hola Santiago, si, basicamente con las configuraciones que vimos aqui, puedes comenzar los programas con cualquier PIC. Lo importante es que cambies la libreria de tu PIC. Por ejemplo aqui usamos el 16F887.h, pero si tu usas otro pic, colocas la libreria del otro pic, supongamos el 18F4550.h, o el 16F877A.h, o el 16F88.h y asi por delante. Saludos.

Responder

Felicitaciones, muy didáctico. Tienes material en español sobre PID en la plataforma PIC?. Gracias por compartir.

Responder

Jose Luis aqui en el blog he hecho algunas entradas sobre PID en el PIC, dale un vistazo dando click aqui. Saludos.

Responder

Hola Sergio.
Soy estudiante de Ingeniería en Electrónica y Telecomunicaciones, y tengo una duda.
Nos han platicado que, a nivel industrial, actualmente no se utiliza demasiado los PICs y que en su lugar se utiliza PLC’s ¿Es cierto esto?
Muchas gracias por este material de tan buena calidad que haz hecho para nosotros 🙂
¡Saludos!

Responder

Hola Angie. A nivel industrial es mucho más común utilizar PLC, dado que tienen una electrónica mucho más robusta y su programación es hecha en forma de lógica de contactos generalmente. Un PIC también podría ser utilizado a nivel industrial, el único problema es que debes hacerle una muy buena electrónica para evitar que le entren ruidos o interferencias y obviamente eso va a demandar algo de tu tiempo para hacerlo. Por eso por facilidad se opta por los PLC, donde la programación es mucho más intuitiva. Pero igual, yo he utilizado PIC a nivel industrial y han funcionado muy bien.

Responder

hola sergio, tengo un equipo, el cual no lo diseñe yo que esta echo con un 16f877, y se me reinicia cada tanto el equipo, el equipo lo único que me muestra es la posicion de un motor que mueve una regla, y mediante 4 pulsadores puedo cambiarle la posicion que quiero que este la regla, la posición la sabe con un encoder, estoy seguro que por ruido que se me reinicia, el problema es que nose como hacer para sacarle ese problema, me podrias ayudar?

Responder

Hola David, talvez podrías intentar lo siguiente:
1- Resolda todos los puntos de estaño de tu placa, vaya ser que talvez haya un falso contacto.
2- Cuando trabajas con motores y microcontroladores la fuente de alimentación es primordial, debes tener una buena fuente, con el mínimo de rizado posible. Si te es posible, alimenta el PIC con un fuente diferente a la que alimentas el motor, si no, entonces trata de usar un buena fuente.
3- Coloca un condensador de Bypass, (0.1uF) entre los pines de alimentación (VCC y GND) del microcontrolador lo mas cerca posible del integrado, esto ayuda a reduzir ruidos de interferencia.
4- Utiliza conexiones a tierra separadas, una para el microcontrolador (GND Digital) y otra para la etapa de potencia (GND Análoga).

Responder

Hola hay mucha diferencia entre el pic16f877a al PIC16F887.??.. son de la misma familia ademas tienen casi la misma configuración de pines

Responder

No, son practicamente el mismo. El 887 es la versiona actualizada del 877a.

Responder

Hola, perdona que te moleste pero me gustaría saber como accedo a tus dos post anteriores que mencionas aquí en el primer vídeo, para conocer un poco mas del lenguaje que se utiliza con los PIC, por las dudas aclaro que soy un novato en el tema programación y me gustaría empezar desde abajo.
Desde ya muchas gracias por tu esfuerzo.

Responder

Hola Eduardo. Aquí te dejo el link con todos los post que he hecho de microcontroladores. Todos van en orden ascendente, la gran mayoria tienen videos entonces no te vas a perder.

CURSO COMPLETO DE MICROCONTROLADORES

Igual puedes ubicar el mouse en la sección de arriba donde dice Microcontroladores(PIC) y se te desplegaran todos los artículos que he hecho.
Gracias por tu visita.

Responder

Es lo malo de ser pobre. No podemos auto-financiar nuestros proyectos, solo la con ayuda de terceros.

Responder