Table of Contents
¿Qué son los microcontroladores de PIC?
Los microcontroladores PIC son pequeños circuitos integrados diseñados para realizar tareas de control específicas en dispositivos electrónicos. Desarrollado por Microchip Technology, PIC (Peripheral Interface Controller) microcontroladores se basan en la arquitectura de Harvard, que separa el programa y la memoria de datos. Este diseño permite la ejecución eficiente de instrucciones de ciclo único, haciéndolos adecuados para aplicaciones en tiempo real.
La familia de microcontroladores PIC abarca desde dispositivos de 8 bits como las variantes PIC10, PIC12, PIC16 y PIC18 hasta 16 bits (PIC24, dsPIC) y 32 bits (PIC32). Para principiantes, la serie 8 bits PIC16 o PICchan18 ofrecen el equilibrio adecuado de la simplicidad y la capacidad.
¿Por qué elegir microcontroladores de PIC sobre otras plataformas?
Si bien las plataformas como Arduino han reducido la barrera de entrada para los sistemas integrados, los microcontroladores PIC ofrecen ventajas distintas para aquellos que quieren una comprensión más profunda del hardware y el firmware. Los PIC le obligan a trabajar directamente con registros, manipulación de bits y manipulación de interrupciones, construyendo una sólida base en la arquitectura de microcontroladores. También se pagan ampliamente en aplicaciones industriales y automotrices, haciendo que las habilidades PIC sean valiosas en entornos profesionales.
Sin embargo, la curva de aprendizaje es más pronunciada en comparación con Arduino. No hay un cargador de arranque preinstalado; necesita un programador externo (PICkit o ICD). Pero esta inversión inicial le enseña los fundamentos de la programación del microcontrolador desde el suelo.
Herramientas y componentes esenciales
Antes de escribir su primera línea de código, usted necesita montar las herramientas adecuadas. Aquí está una lista completa para una configuración de principiante:
Selección de microcontroladores
- PIC16F877A – chip clásico de 40 horquillas, ampliamente disponible, amplios periféricos.
- PIC18F4620 – Ampliada variante de 40 pines con más memoria del programa y mejor arquitectura.
- PIC12F683 – 8-pin DIP para proyectos muy simples.
Junta de Desarrollo o Breadboard
- Comillas de inicio] – El Consejo de curiosidades de Microchip o el laboratorio PICDEM II incluyen el microcontrolador, programador y el I/O básico.
- Papel de panel + Fuente de alimentación – Una tabla de pan estándar de 830 puntos, una fuente de alimentación regulada de 5V (por ejemplo, LM7805), y un adaptador USB a serie para UART.
Programador / Debugger
- PICkit 3] o PICkit 4] – Depuradores oficiales de microchip con programación a través de ICSP (Programación de serie en el centro).
- MPLAB Snap] – alternativa de bajo costo.
- Para la conectividad USB, asegúrese de que su programador admite USB a PCSP (a menudo un adaptador separado para el objetivo 3.3V o 5V).
Software
- ] ]: Un entorno de desarrollo integrado gratuito basado en NetBeans.
- XC8 Compiler [Gratis (con limitada optimización) C compilador para CFPs de 8 bits.
- Opcional: Configurador de códigos MPLAB (MCC) – Herramienta gráfica para generar código de inicialización.
Componentes electrónicos básicos
- LEDs (rojo, verde, azul)
- Resisdores (220Ω para LEDs, 10kΩ para pull-ups)
- Presione botones (cambios de contacto)
- Capacitors (desacoplamiento de 100nF, vracs de 10μF)
- 20MHz cristal oscilador + dos condensadores 22pF (si no utiliza el oscilador interno)
- Cables de trampolín (hombre a hombre, hombre a mujer)
Configuración de su entorno de desarrollo
Siga estos pasos para que MPLAB X IDE y XC8 se pongan en marcha:
- Descargar e instalar MPLAB X IDE] del sitio web de Microchip. Elige la versión para tu sistema operativo (Windows, macOS, Linux).
- Install XC8 compilador – Seleccione la versión gratuita; ofrece niveles de optimización hasta -O1 sin licencia.
- Conecta tu programador (PICkit 4) a través de USB. Instalar cualquier controlador requerido (generalmente incluido con MPLAB X).
- Potencia tu tablero de destino o PIC a bordo con 5V DC. Asegurar el terreno común entre programador y objetivo.
- Anímese el conector ICSP: PICkit 4 pin 1 (MCLR/VPP) a PIC MCLR pin; pines 2, 3, 4 (VDD, GND, PGD, PGC) adecuadamente. Consulte PICIkit 4 Guía del usuario para conexiones.
- Lanzamiento MPLAB X. Ir a Herramientas > Opciones > Embedded] y verificar la trayectoria del compilador es correcta (XC8 debe auto-detectar).
Escribir su primer programa: Vincular un LED
El clásico “Hoello World” de los sistemas embebidos es un enlace LED. Te presenta a la creación de proyectos, bits de configuración, control GPIO y retrasos. A continuación se muestra una guía paso a paso.
Paso 1: Crear un nuevo proyecto
- En MPLAB X, seleccione File > Nuevo proyecto.
- Elija Microchip Embedded > Standalone Project].
- Seleccione su dispositivo (por ejemplo, PIC16F877A).
- Seleccione su programador (por ejemplo, PICkit 4).
- Select compilador (XC8).
- Nombre del proyecto (por ejemplo, “Blink LED”).
Paso 2: Comprender los bits de configuración
Los bits de configuración establecen el tipo de oscilador, temporizador de relojes y temporizador de potencia. En PIC16F877A, normalmente los defines en un encabezado o utilizando ' pragma(config)` o ` config`. Para XC8, utilice:
#pragma config FOSC = HS // High-speed oscillator (crystal)
#pragma config WDTE = OFF // Watchdog Timer disabled
#pragma config PWRTE = OFF // Power-up Timer disabled
#pragma config BOREN = ON // Brown-out Reset enabled
#pragma config LVP = OFF // Low-Voltage Programming disabled
#pragma config CPD = OFF // Data EEPROM Code Protection off
#pragma config CP = OFF // Flash Program Memory Code Protection off
Coloca estos en la parte superior de tu archivo fuente antes de que cualquier incluye.
Paso 3: Configurar el Árbitro Principal
En PICs, los puertos I/O se configuran a través del registro TRIS (Data Direction): un ‘0’ hace la salida del pin, ‘1’ hace entrada. Los datos de salida se escriben en el registro LAT (o PORT para operaciones de escritura, pero LAT se recomienda para los problemas RMW). Ejemplo de enlace con el oscilador interno (4MHz):
#include <xc.h>
#define _XTAL_FREQ 8000000 // 8MHz if using external crystal
void main(void) {
TRISBbits.TRISB0 = 0; // Set RB0 as output
LATBbits.LATB0 = 0; // Start with LED off
while(1) {
LATBbits.LATB0 = 1; // Turn LED on
__delay_ms(500); // Wait 500ms
LATBbits.LATB0 = 0; // Turn LED off
__delay_ms(500); // Wait 500ms
}
}
Si utiliza el oscilador interno, asegúrese de que los bits de configuración se establezcan en INTOSC y definan ` XTAL FREQ` según su frecuencia osciladora (por ejemplo, por defecto 4MHz).
Paso 4: Construir y Programa
- Haga clic en el botón Build Main Project] (ícono de amer). Fijar cualquier error (a menudo retraso desaparecido.h o desajuste de frecuencia).
- Conectar el programador, luego haga clic en Dispositivo de ejecución y programa] (flecha verde con chip).
- Si es exitoso, el LED conectado a RB0 (pin 33 en PIC16F877A DIP) debe parpadear a 1Hz.
Comprender el Código en la Profundidad
El código anterior utiliza el compilador incorporado ' delay ms()` proporcionado por `xc.h`. Esta macro se basa en ' XTAL FREQ` que se define de modo que el bucle de demora cuenta las instrucciones con precisión. Para un oscilador de 8MHz, 1 ciclo de instrucción toma 0.5μs (ya que PIC16 utiliza 4 ciclos de reloj por instrucción).
Note que usamos en lugar de . El registro LAT (Latch) evita problemas de escritura de lectura-modificar cuando mezcla entradas y salidas en el mismo puerto. Esta es una práctica mejor en la programación de PIC.
El registro TRIS establece la dirección. Ajuste TRISB0 = 0 hace la salida del pin. Si desea leer un botón más adelante, usted establecería que TRIS bit a 1.
Pitfalls comunes y cómo evitarlos
- Configuración osciladora de rodajas] – El chip puede no empezar si FOSC no coincide con su hardware. Use oscilador interno para el cableado más simple.
- Missing decoupling condensaors] – Siempre coloque un condensador de 100nF lo más cerca posible a los pines VDD/VSS. Se pueden producir oscilaciones o restablecimientos sin ella.
- Usando PORT para la salida – Cuando escribes a PORT (por ejemplo, PORTB = 0xFF), puede causar cambios no deseados a otros pines debido a la capacitancia de la capa. Usa siempre LAT para escribir.
- Watchdog Timer enabled – Si WDT está encendido, el microcontrolador puede reasentar cada pocos milisegundos. Set a menos que usted lo use intencionadamente.
- Programación de volumen de trabajo de lomo activado – La VP puede causar una operación inesperada si el pin RB3/PGM está flotando.
Ampliando tus habilidades: Periféricos clave
Una vez que puede parpadear un LED, siga interactuando con el mundo físico. Los microcontroladores PIC ofrecen un conjunto rico de periféricos. Aquí están los más importantes para los principiantes:
Entrada/salida general (GPIO)
Aprende a leer botones con desbobloqueo (traso de software o gatillo de Schmitt). Combina varios LEDs para formar un contador binario o un persecutor de luz. Comprende resistencias desplegables y desplegables.
Conversor analógico a digital (ADC)
PIC16F877A tiene 8 canales analógicos (AN0-AN7). Utilice ADC para leer un voltaje potenciómetro y producir un ciclo de servicio proporcional PWM para controlar el brillo LED. Nota: ADC requiere fijar registros ANSEL/ANSELH para permitir la entrada analógica en un pin.
Módulos de temporizador
Las máquinas permiten retrasos precisos sin bloquear la CPU. Por ejemplo, Timer0 puede configurarse con prescaler para generar una interrupción cada pocos milisegundos. Use Timer1 para un reloj en tiempo real. La serie PIC18 ofrece temporizadores más avanzados con modos de captura/compare/PWM.
Modulación de la anchura de pulso (PWM)
PWM es esencial para el control de motores, el regulación de LEDs y la generación de audio. En PIC16F877A, PWM está disponible en CCP1 (RC2) y CCP2 (RC1). Configure PR2, CCPR1L y TMR2 preescalador para establecer la frecuencia y el ciclo de servicio.
Comunicación en serie (UART)
Conectar a tu PC a través de un convertidor USB-to-TTL (como FTDI232). Enviar “Hola Mundo” a un terminal. Esto es crucial para depurar y registrar datos. Configurar BRGH y SPBRG registra para la generación de frecuencias de baud.
Interrupciones externas y Interrupt-on-Change
Aprende a activar el código en un borde de salto/desperdicio. Útil para las señales de vela, botones o encoder. Comprende las entradas de Interrupción Global (GIE) y las bits de Interrupt Interrupt Periférico (PEIE) y cómo escribir una rutina de servicio interrumpida (ISR) utilizando el atributo " interrupt()" en XC8.
Proyecto de muestra: Monitor de temperatura con LCD
Un proyecto intermedio práctico combina muchos periféricos. Aquí está un esquema:
- Conectar un sensor de temperatura LM35 a un canal ADC.
- Use Timer0 para activar una lectura de ADC cada segundo.
- Convertir el valor ADC en Celsius: temperatura = (ADC result * 5000.0) / (1024 * 10).
- Mostrar la temperatura en un LCD de caracteres HD44780 de 16x2 en modo 4 bits.
- Si la temperatura supera los 30°C, encienda un LED rojo; de lo contrario, encienda un LED verde.
Este proyecto enseña ADC, temporizadores, control LCD (interfase paralela), y lógica condicional. Muchos ejemplos de código están disponibles en las notas de aplicación de Microchip .
Debugging Como un Pro
Los errores ocurren. Aquí están las técnicas específicas para el desarrollo de PIC:
- Use el ICD (Debugger In-Circuit)] – Establecer puntos de ruptura en MPLAB X y examinar los valores de registro. Esto requiere un PICkit 4 o ICD 4 en modo de depuración (diferente cableado que programación).
- Realizar un pin GPIO no utilizado – Medir su frecuencia con un osciloscopio para verificar el tiempo de bucle.
- UART printf() depuración – Implementar una función de impresión en serie simple (puedes encontrar alternativas para la memoria pequeña). Enviar valores variables a una consola en serie.
- Comprobar los bits de configuración – Cuando un chip no comienza, recompilará con mínimos config. Utilice la ventana "Configuración" de MPLAB X para configurarlos visualmente.
Siguientes pasos y recursos
Después de dominar los fundamentos, considere estos temas avanzados:
- Programación impulsada por la Interrupción – Aléjate de bloquear los retrasos. Usa temporizadores y máquinas estatales.
- Modos de potencia mínima] – Dormir, ocioso y profundo para los diseños operados por baterías.
- Protolos de comunicación] – I2C (accelerómetro, RTC), SPI (tarjeta SD, visualización), 1-Wire (sensores de temperatura).
- RTOS para PICs más grandes – FreeRTOS portado para PIC32 y algunos dispositivos PIC24.
- Designar su propio PCB – Con KiCad o Eagle, usando el PIC como el procesador principal.
Recommended resources:
- ]MPLAB X IDE Official Page – Descargas y documentación.
- XC8 Compiler Downloads – Elija la versión gratuita.
- ]PIC16F877A Datasheet – Referencia indispensable para registros y pinouts.
- ] ]] – Herramienta GUI para generar código de inicialización.
- ] ] – Hacer preguntas y buscar soluciones.
Conclusión
Para empezar con los microcontroladores de PIC se requiere un enfoque metódico: recoger las herramientas adecuadas, configurar el entorno de desarrollo y luego avanzar a través de proyectos simples que se construyen entre sí. El esfuerzo invertido temprano paga a medida que obtiene una comprensión sólida del hardware de microcontrolador y la programación de bajo nivel. Los PIC no son el punto de entrada más fácil, pero son uno de los más premiados para aquellos que quieren controlar realmente el hardware.