circuitos
Los microcontroladores PIC son una herramienta muy útil y versátil para usar en muchos proyectos electrónicos. Son muy económicos y fáciles de encontrar. También son muy potentes y muchos son capaces de alcanzar velocidades de hasta 64 MIPS utilizando el bloque oscilador interno, aproximadamente 16 veces más rápido que la mayoría de los microcontroladores AVR comparables. Los PIC también son fáciles de programar, sin embargo, configurar el proyecto a veces puede ser complicado. Estas instrucciones lo guiarán a través del proceso de configuración del software, la creación de un nuevo proyecto y la programación de algunas funciones muy simples para probar la configuración y garantizar que todo funcione. Están diseñados para ser muy abiertos; Una vez creado el proyecto y finalizado lo básico, se recomienda al lector que explore todas las funciones y extras que no se incluyen en estas instrucciones. También encontrará que estas instrucciones comenzarán a caminar paso a paso, pero a medida que las instrucciones se acerquen al final, se alienta al lector a explorar otras formas de llevar a cabo las tareas y hacer que el proyecto sea suyo.Programación de microcontroladores PIC
Lo que necesitará Para construir un proyecto con un microcontrolador PIC solo se requieren algunos elementos.
- Microcontrolador PIC
- Estas instrucciones son para programar una MCU de la serie PIC18F, aunque otras son similares.
- Obtenido del sitio web de Microchips.
- ¡Microchip permite a los estudiantes con direcciones de correo electrónico .edu válidas muestras de PIC gratis!
- El PIC que estoy usando para crear estas instrucciones es un PIC18F22K80
- PICkit 3 depurador en circuito
- Disponible de Microchip.
- Cuesta $ 45 para el público en general, y # 34 con descuento para estudiantes si tiene una dirección de correo electrónico .edu.
- También hay otros programadores que funcionarán igual de bien; Sin embargo, este es el mejor para comenzar.
- Pan y alambres de tablero
- LED, botones, potenciómetros o cualquier otra cosa que desee conectar al PIC
Paso 1: construir hardware

Nota: VDD = Voltaje positivo y VSS = Tierra.
- Conecte el pin MCLR a través de una resistencia de 1kΩ a VDD.
- Conecte un condensador de 0.1μF entre cada par de pares VDD-VSS contiguos o pares AVDD-AVSS.
- Conecte un condensador de 10 μF entre VCAP y Vss.
- Conecte el pin MCLR al pin 1 del PICkit 3.
- Conecte VDD al pin 2 del PICkit 3.
- Conecte VSS al pin 3 del PICkit 3.
- Conecte el pin PGD al pin 4 del PICkit 3.
- Conecte el pin PGC al pin 5 del PICkit 3.
- Deje el pin 6 del PICkit 3 sin conectar.
- Conecte cualquier entrada analógica a los pines con funcionalidad ANx donde x es un número.
- Conecte cualquier entrada o salida digital a los pines con funcionalidad Rxy donde x es una letra que identifica el puerto e y es un número que identifica el bit.
Paso 2: Obtenga software



- Para obtener la última versión del software, visite el sitio web de Microchips en //www.microchip.com/pagehandler/en-us/family/mplabx/
- Seleccione el software para su sistema operativo y siga las instrucciones de instalación estándar.
- Una vez que el software esté instalado, inicie MPLAB X
- En la barra de menú, seleccione Herramientas-> Opciones
- En el cuadro de diálogo Opciones, seleccione la pestaña Integrado y asegúrese de que XC8 aparezca en la lista de la Cadena de herramientas.
- Si aparece en la lista, seleccione Aceptar y continúe con el siguiente paso.
- Si no aparece en la lista, asegúrese de que la instilación se haya completado y haga clic en el botón Buscar herramientas de compilación.
- Si aún no aparece en la lista, busque en el foro de Microchips para obtener ayuda con su problema específico.
Paso 3: crear un nuevo proyecto




- En la barra de menú, seleccione Archivo-> Nuevo proyecto ...
- En el cuadro de diálogo de archivo nuevo, expanda Muestras y seleccione Microchip Embedded
- En el cuadro del proyecto, seleccione PIC18 C Template
- Seleccione Siguiente
- Dale al proyecto el nombre que quieras
- Elija una ubicación para guardar el proyecto en el cuadro Ubicación del proyecto
- Deje la carpeta del proyecto como opciones predeterminadas
- Marque la casilla "Establecer como proyecto principal"
- Seleccionar acabado
Paso 4: construir parámetros










Crear configuración
- Haga clic derecho en el nombre del proyecto en la barra de herramientas de proyectos.
- En el cuadro de diálogo Propiedades del proyecto, seleccione Administrar configuraciones ...
- En el cuadro de diálogo Configuraciones, seleccione Nuevo
- En el cuadro de diálogo Nuevo nombre de configuración, ingrese Predeterminado y haga clic en Aceptar
- En el cuadro de diálogo Configuraciones, asegúrese de que Predeterminado esté seleccionado y haga clic en Establecer activo
- Haga clic en Aceptar en el cuadro de diálogo Configuraciones
- En el cuadro de diálogo Propiedades del proyecto, seleccione "Conf: [Predeterminado]" en la lista Categorías
- En el cuadro Dispositivo, escriba el nombre del dispositivo que está utilizando. En mi caso PIC18F26K80
- En la lista Herramientas de hardware, seleccione PICkit3
- En la cadena de herramientas del compilador, seleccione XC8 (v ...) Donde ... es la versión que ha instalado.
- Seleccione Aplicar
- En Conf: [Predeterminado] seleccione PICkit 3
- Para las categorías de opciones, seleccione Potencia
- Verifique "Circuito de objetivo de potencia de PICkit3
- Seleccione Aplicar
- En Conf: [Predeterminado] seleccione el compilador XC8
- Para las categorías de Opciones, seleccione Optimizaciones
- Establezca "Conjunto de optimización" en "ninguno"
- Seleccione Aplicar
- Haga clic en Aceptar para cerrar el cuadro de diálogo.
Paso 5: Establecer bits de configuración





- En el explorador de proyectos, expanda Archivos fuente y abra configuration_bits.c
- Elimine todo el texto debajo de la línea #endif
- Observe que se abrió una nueva pestaña en la parte inferior de la pantalla
- Establezca los bits según sea necesario para su proyecto. Dado que estos dependen del chip, consulte la hoja de datos para obtener más información sobre lo que hace cada uno. Siguen algunas configuraciones comunes:
- Conjunto de instrucciones extendido: se debe establecer en OFF cuando se usa la plantilla
- Oscilador: se utiliza para seleccionar el procesador. A menos que esté utilizando un cristal externo, déjelo configurado como oscilador RC interno. Consulte la hoja de datos para otras configuraciones de oscilador. Nota: CLKOUT permitirá una depuración más fácil y debe activarse si está disponible.
- Habilitar PLL: permitirá el uso futuro de PLL. Nota: esto no activará el PLL, solo lo habilitará. Se recomienda habilitarlo.
- Temporizador de vigilancia: el temporizador de vigilancia se utiliza para garantizar que el procesador no se bloquee. Sin embargo, hace que sea mucho más difícil de depurar. Se recomienda deshabilitarlo mientras se programa inicialmente, y solo habilitarlo después de que el proyecto esté casi terminado.
- Protección de escritura / lectura de código / tabla: se utiliza para deshabilitar la escritura o lectura en ciertos rangos de memoria. Deje todo esto deshabilitado.
- Si no está seguro acerca de una configuración, generalmente es seguro dejarla predeterminada.
- Una vez que se hayan establecido todos los bits de configuración, haga clic en el botón "Generar código fuente a salida" en la parte inferior del panel.
- El panel ahora cambiará a la pestaña Salida. Seleccione todo el texto en esta pestaña y cópielo en el portapapeles
- Pegarlo en la parte inferior del archivo configuration_bits.c y guardar pres.
- Limpie y vuelva a construir el proyecto haciendo clic en el icono de la escoba y el martillo.
- Asegúrese de que la compilación haya sido exitosa. Compruebe también para asegurarse de que no haya errores en la salida
Paso 6: configurar el oscilador



Determinando la configuración
Antes de que podamos programar la configuración, debemos elegir a qué velocidad nos gustaría correr. Para este ejemplo, usaré 16MHz ya que la mayoría de los PIC pueden funcionar a esta velocidad. Para mi configuración, usaré el post-llamador de 4MHz del HF-INTOSC, y el 4x PLL que da una frecuencia de salida de 4MHz * 4x = 16MHz- En la hoja de datos, busque la sección denominada Configuraciones del oscilador
- Lo primero que se enumera en esta sección es Tipos de osciladores. Si está utilizando el oscilador interno, utilice las configuraciones relacionadas con INTIO1
- En la página o dos siguientes encontrará un dibujo esquemático del oscilador similar al que se muestra. Es útil rastrear la señal en este dibujo para garantizar que se seleccione la velocidad correcta.
- El siguiente paso es programar estas configuraciones en la MCU. Esto se hace estableciendo registros. El primer registro para establecer es OSCCON.
- IDLEN: se utiliza para controlar la acción del comando de suspensión. Se puede dejar como predeterminado.
- IRCF - Selección del oscilador. Como estoy usando HF-INTOSC / 4 (4MHz), tendré que configurar esto en un valor binario de 101
- OSTS: bit de solo lectura
- HFIOFS: bit de solo lectura
- SCS - bits de selección de reloj. Como estoy usando el oscilador interno, estableceré 1x donde x puede ser 0 o 1
- El siguiente registro es OSCCON2; sin embargo, este registro es principalmente de solo lectura y no es importante en este momento
- El último registro de configuración del oscilador es OSCTUNE. No ajustaremos la frecuencia de este proyecto, sin embargo, debemos usar este registro para activar el PLL usando el bit PLLEN.
Aplicando Configuraciones
- Regresar a MPLAB
- En el explorador de proyectos en Archivos fuente, abra system.c
- En la parte inferior de este archivo está la función ConfigureOscillator. Elimine los comentarios en esa función.
- Para establecer los bits de un tipo de registro en mayúsculas, el nombre del registro, seguido de los bits de palabras en minúscula y luego un punto y el nombre del bit.
- Para establecer los bits, siga eso con un signo igual. Para usar el tipo binario 0bXXXX donde XXXX es el número binario. Por último, termina la línea con un punto y coma.
- Establezca todos los bits como se determinó anteriormente para el registro OSCCON. Ejemplo: OSCCONbits.IRCF = 0b101;
- Haga lo mismo para todos los demás registros de oscilador necesarios. Vea a continuación un ejemplo de una función ConfigureOscillator finalizada.
- Cuando termine de compilar y verifique si hay advertencias / errores
/ ** * Configure la fuente del reloj y la velocidad * / void ConfigureOscillator (void) {OSCCONbits. IRCF = 0b101; OSCCONbits. SCS = 0b00; OSCTUNEbits. PLENO = 0b1; }
Paso 7: espera la función de milisegundos
Una de las funciones más útiles es wait_ms. Sin embargo, esta no es una función en la biblioteca estándar y deberá ser programada por usted. Para esta implementación, habrá un bucle que mantendrá el procesador hasta que haya pasado el tiempo dado.Los microcontroladores PIC18F necesitan 4 ciclos de reloj para ejecutar una línea de código de ensamblaje. Por lo tanto, con un reloj de 16MHz, las líneas se ejecutarán a 4 millones de líneas por segundo = 4000 líneas por milisegundo. Dado que un bucle for tomará una instrucción cada vez para la comparación, y dos para la operación uno para el cuerpo del bucle, funcionará perfectamente. Solo necesitamos el bucle for para recorrer 1000 veces por milisegundo.
- En system.c, cree una nueva función en la parte inferior del archivo de tipo void wait_ms (uint16_t time)
- A continuación se muestra la función completada
/ ** * Espere un número determinado de milisegundos utilizando el esquema de espera ocupada. * @param time: tiempo en ms para esperar. * / void wait_ms (uint16_t time) {static long timel = 0; timel = tiempo * 1000l; for (; timel; timel -); // sin condición inicial, mientras que el tiempo es> 0, disminuya el tiempo en cada bucle}
- Abra system.h en la carpeta Archivos de encabezado en el navegador del proyecto
- Al final agregue la línea void wait_ms (uint16_t); para prototipar la función.
- Cambie la línea 8 de 8000000L a 16000000L
- Cree y compruebe si hay errores / advertencias
Paso 8: parpadea un LED

- Abra main.c en el visor de proyectos en archivos de origen.
La función final debería verse así:
- Inmediatamente encima del ciclo while agregue el siguiente código.
- Establezca el pin LED como salida - TRISAbits.TRISA0 = 0; // establecer un bit TRIS en 0 conjuntos como salida, establecer en 1 conjuntos como entrada
- Dentro del bucle while agrega el siguiente código
- Ajuste el LED en OFF - LATAbits.LATA0 = 0; // los bits LAT controlan la salida de un pin. 0 = BAJO, 1 = ALTO
- Espere 1/2 segundo - wait_ms (500);
- Ajuste el LED en ON - LATAbits.LATA0 = 1;
- Espere 1/2 segundo - wait_ms (500);
void main (void) {/ * Configure el oscilador para el dispositivo * / ConfigureOscillator (); / * Inicializar E / S y periféricos para la aplicación * / InitApp (); TRISAbits.TRISA0 = 0; // establece el pin como salida mientras que (1) {LATAbits.LATA0 = 0; // establecer pin BAJO wait_ms (500); // espera 0.5 segundos LATAbits.LATA0 = 1; // establecer pin HIGH wait_ms (500); // espera 0.5 segundos}}
- Cree el programa y verifique si hay errores o advertencias
- Asegúrese de que el PICkit esté conectado correctamente al PIC y a la computadora
- Haga clic en el botón hacer y programar dispositivo (el botón a la derecha del botón limpiar y construir)
- Si se le solicita, seleccione PICkit 3 y haga clic en Aceptar
- Cuando la advertencia muestra doble verificación, tiene el PIC correcto en el circuito y haga clic en Aceptar
- Si aparece una advertencia sobre la ID del dispositivo de destino, haga clic en Aceptar para ignorarla
Paso 9: lectura de un valor analógico
Hasta ahora, el programa puede parpadear un LED. A continuación, démosle alguna entrada al usuario. Utilizaremos un potenciómetro para crear una señal analógica que cambiará la velocidad del LED. El ADC toma un voltaje analógico y genera un valor digital.- En el navegador de proyectos, abra user.c en Archivos de origen
- Por encima de la función InitApp, cree una nueva función
void init_adc(void)
- Ingrese el siguiente código para inicializar el módulo ADC
/ ** * Inicializar el convertidor analógico a digital. * / void init_adc (void) {TRISAbits. TRISA1 = 0b1; // establece el pin como entrada ANCON0bits. ANSEL1 = 0b1; // establece el pin como ADCON1bits analógico. VCFG = 0b00; // establece v + referencia a Vdd ADCON1bits. VNCFG = 0b0; // establece v- referencia a GND ADCON1bits. CHSN = 0b000; // establece la entrada negativa a GND ADCON2bits. ADFM = 0b1; // justifica a la derecha la salida ADCON2bits. ACQT = 0b110; // 16 TAD ADCON2bits. ADCS = 0b101; // usa Fosc / 16 para la fuente de reloj ADCON0bits. ADON = 0b1; // enciende el ADC}
- Luego, cree otra función inmediatamente después de llamar a
uint16_t adc_convert(uint8_t channel)
/ ** * Realice una conversión de analógico a digital. * @param channel El canal de entrada ADC a usar. * @return El valor de la conversión. * / uint16_t adc_convert (canal uint8_t) ADRESL; // devuelve el resultado
- En la función InitApp, agregue la línea
init_adc()
- En el archivo user.h agregue el prototipo
uint16_t adc_convert(uint8_t);
- Cambie main para que coincida con lo siguiente:
void main (void) {uint16_t adc_value; // variable para mantener el resultado de conversión ADC en / * Configurar el oscilador para el dispositivo * / ConfigureOscillator (); / * Inicializar E / S y periféricos para la aplicación * / InitApp (); TRISAbits. TRISA0 = 0; // establece el pin como salida mientras que (1) {LATAbits. LATA0 = 0; // establecer pin BAJO adc_value = adc_convert (1); // conversión de preformas A / D en el canal 1 wait_ms (adc_value>> 2); // espera 0.5 segundos LATAbits. LATA0 = 1; // establecer pin HIGH adc_value = adc_convert (1); // conversión de preformas A / D en el canal 1 wait_ms (adc_value>> 2); // espera 0.5 segundos}}
- Compila y descarga el código. A medida que gira el POT, la velocidad del parpadeo del LED debe cambiar
Paso 10: lea un valor digital
A continuación, obtengamos una entrada digital desde el interruptor. Cuando el interruptor esté apagado, haremos que el programa haga lo que ha estado haciendo todo el tiempo, y cuando el interruptor esté encendido, el programa encenderá el LED fijo hasta que el interruptor se apague nuevamente.- Para establecer un pin como entrada, escriba un 1 en el bit de registro TRIS de los pines -
TRISAbits.TRISA2 = 1;
- Si un pin comparte características analógicas, puede ser necesario configurarlo en digital borrando el bit apropiado en el registro ANCONx
- Al escribir un valor en un pin, use el registro LAT; sin embargo, cuando lea un valor de un pin, use el registro PORT -
value = PORTAbits.RA2;
- Cambiar principal a lo siguiente:
void main (void) {uint16_t adc_value; // variable para mantener el resultado de conversión ADC en / * Configurar el oscilador para el dispositivo * / ConfigureOscillator (); / * Inicializar E / S y periféricos para la aplicación * / InitApp (); TRISAbits. TRISA0 = 0; // establece el pin como TRISAbits de salida. TRISA2 = 1; // establece el pin como entrada ANCON0bits. ANSEL2 = 0; // establece el pin como digital mientras que (1) {if (PORTAbits. RA2) // si el pin es alto {LATAbits. LATA0 = 1; // establece el pin como alto} else // si el pin es bajo {// parpadea los LED LATAbits. LATA0 = 0; // establecer pin BAJO adc_value = adc_convert (1); // conversión de preformas A / D en el canal 1 wait_ms (adc_value>> 2); // espera un poco de LATAbits. LATA0 = 1; // establecer pin HIGH adc_value = adc_convert (1); // conversión de preformas A / D en el canal 1 wait_ms (adc_value>> 2); // Espera algún tiempo } } }
¡Eso es! Ahora tiene los conocimientos básicos sobre cómo configurar un nuevo proyecto, leer y escribir en pines digitales y cómo leer desde pines analógicos. Estas tres características le permitirán realizar el 90% de los proyectos utilizando PIC en Internet. Además, a medida que continúe su exploración en los microcontroladores PIC, encontrará que la mayoría de las otras características requieren pasos muy similares para configurar periféricos y leer y acceder directamente a los registros.