- Preparándose para la programación:
- Crear un nuevo proyecto usando MPLAB-X:
- Familiarización con los registros de configuración:
- Configuración de bits de configuración en MPLAB-X:
- Programación del PIC para que haga parpadear un LED:
- Diagrama de circuito y simulación de Proteus:
Este es el segundo tutorial de nuestra serie de tutoriales PIC. En nuestro tutorial anterior Comenzando con el microcontrolador PIC: Introducción a PIC y MPLABX, aprendimos las cosas básicas sobre nuestro microcontrolador PIC, también instalamos el software requerido y compramos un nuevo programador PicKit 3 que pronto usaremos. Ahora estamos listos para comenzar con nuestro primer programa de parpadeo de LED utilizando el PIC16F877A. También aprenderemos sobre los registros de configuración en este tutorial.
Este tutorial espera que haya instalado el software requerido en su computadora y que conozca algunos conceptos básicos decentes sobre el PIC MCU. De lo contrario, regrese al tutorial anterior y comience desde allí.
Preparándose para la programación:
Ya que hemos decidido utilizar el PIC16F877A, con el compilador XC8 comencemos con su hoja de datos. Recomiendo a todos que descarguen la hoja de datos PIC16F877A y el manual del compilador XC8, ya que nos referiremos a ellos con frecuencia a medida que avancemos en nuestro tutorial. Siempre es una buena práctica leer la hoja de datos completa de cualquier MCU antes de comenzar a programar con ella.
Ahora, antes de abrir nuestro MPLAB-X y comenzar a programar, hay algunas cosas básicas que uno debe tener en cuenta. De todos modos, dado que este es nuestro primer programa, no quiero arengarlos con mucha teoría, pero nos detendremos aquí y allá mientras programamos y les explicaré las cosas como tales. Si no tiene tiempo suficiente para leer todo esto, solo eche un vistazo y salte al video en la parte inferior de la página.
Crear un nuevo proyecto usando MPLAB-X:
Paso 1: Ejecute el IDE MPLAB-X que instalamos en la clase anterior, una vez cargado debería verse así.
Paso 2: Haga clic en Archivos -> Nuevo proyecto, o use la tecla de acceso rápido Ctrl + Shift + N. Obtendrá la siguiente ventana emergente, desde la cual debe seleccionar Proyecto independiente y hacer clic en Siguiente.
Paso 3: Ahora tenemos que seleccionar nuestro Dispositivo para el proyecto. Así que escriba como PIC16F877A en la sección desplegable Seleccionar dispositivo . Una vez hecho esto, debería ser así y luego haga clic en Siguiente.
Paso 4: La siguiente página nos permitirá seleccionar la herramienta para nuestro proyecto. Este sería PicKit 3 para nuestro proyecto. Seleccione PicKit 3 y haga clic en siguiente
Paso 5: La página siguiente le pedirá que seleccione el compilador, seleccione el compilador XC8 y haga clic en Siguiente.
Paso 6: En esta página tenemos que nombrar nuestro proyecto y seleccionar la ubicación donde se debe guardar el proyecto. He nombrado este proyecto como Blink y lo guardé en mi escritorio. Puede nombrarlo y guardarlo de la forma que prefiera. Nuestro proyecto se guardará como una carpeta con la extensión .X, que puede ser lanzada directamente por MAPLB-X. Haga clic en Finalizar una vez hecho.
Paso 7: ¡¡¡Eso es !!! Nuestro proyecto ha sido creado. La ventana más a la izquierda mostrará el nombre del proyecto (Aquí parpadea), haga clic en él para que podamos ver todos los directorios dentro de él.
Para comenzar a programar, necesitamos agregar un archivo C Main, dentro de nuestro directorio de archivos de origen. Para hacer esto, simplemente haga clic derecho en el archivo de origen y seleccione Nuevo -> Archivo principal de C, como se muestra en la imagen a continuación.
Paso 8: Aparecerá el siguiente cuadro de diálogo en el que se debe mencionar el nombre del archivo C. Volví a nombrar en Blink, pero tú decides. Nómbrelo en la columna Nombre de archivo y haga clic en finalizar.
Paso 9: Una vez creado el archivo principal de C, el IDE lo abrirá con algunos códigos predeterminados, como se muestra a continuación.
Paso 10: Eso es todo, ahora podemos comenzar a programar nuestro código en el archivo C-main. El código predeterminado no se utilizará en nuestros tutoriales. Así que eliminémoslos por completo.
Familiarización con los registros de configuración:
Antes de comenzar a programar cualquier Microcontrolador debemos conocer sus registros de configuración.
Entonces, ¿qué son estos registros de configuración, cómo y por qué deberíamos configurarlos?
Los dispositivos PIC tienen varias ubicaciones que contienen los bits de configuración o los fusibles. Estos bits especifican el funcionamiento fundamental del dispositivo, como el modo de oscilador, el temporizador de vigilancia, el modo de programación y la protección de código. Estos bits deben configurarse correctamente para ejecutar el código, de lo contrario, tendremos un dispositivo que no se ejecutará . Por lo tanto, es muy importante conocer estos registros de configuración incluso antes de comenzar con nuestro programa Blink.
Para utilizar estos registros de configuración, debemos leer la hoja de datos y comprender cuáles son los diferentes tipos de bits de configuración disponibles y sus funciones. Estos bits se pueden establecer o restablecer según nuestros requisitos de programación utilizando un pragma de configuración.
El pragma tiene las siguientes formas.
# configuración de configuración de pragma = valor de estado # registro de configuración de pragma = valor
donde ajuste es un descriptor de ajuste de configuración, por ejemplo, WDT, y estado es una descripción textual del estado deseado, por ejemplo, APAGADO. Considere los siguientes ejemplos.
#pragma config WDT = ON // enciende el temporizador de vigilancia #pragma config WDTPS = 0x1A // especifica el valor posescala del temporizador
¡¡RELAJARSE!!….. ¡¡RELÁJATE, RELÁJATE!!…...
¡Sé que se nos ha metido demasiado en la cabeza y establecer estos bits de configuración puede parecer un poco difícil para un novato! Pero, definitivamente, no es así con nuestro MPLAB-X.
Configuración de bits de configuración en MPLAB-X:
Microchip ha facilitado mucho este agotador proceso mediante el uso de representaciones gráficas de los diferentes tipos de bits de configuración. Entonces, ahora para configurarlos simplemente tenemos que seguir los pasos a continuación.
Paso 1: Haga clic en Ventana -> Vista de memoria PIC -> Bits de configuración. Como se muestra abajo.
Paso 2: Esto debería abrir la ventana Bits de configuración en la parte inferior de nuestro IDE como se muestra a continuación. Este es el lugar donde podemos configurar cada uno de los bits de configuración de acuerdo a nuestras necesidades. Explicaré cada uno de los bits y su propósito a medida que avancemos en los pasos.
Paso 3: El primer bit es el bit de selección del oscilador.
El PIC16F87XA se puede operar en cuatro modos de oscilador diferentes. Estos cuatro modos se pueden seleccionar programando dos bits de configuración (FOSC1 y FOSC0):
- Cristal LP de baja potencia
- Cristal / resonador XT
- Cristal / resonador de alta velocidad HS
- Resistencia / condensador RC
Para nuestros proyectos estamos usando un Osc de 20Mhz, por lo tanto, tenemos que seleccionar HS en el cuadro desplegable.
Paso 4: El siguiente bit será nuestro bit de habilitación del temporizador de vigilancia.
El Watchdog Timer es un oscilador RC integrado en el chip que no requiere ningún componente externo. Este oscilador RC está separado del oscilador RC del pin OSC1 / CLKI. Eso significa que el WDT se ejecutará incluso si el reloj en los pines OSC1 / CLKI y OSC2 / CLKO del dispositivo se ha detenido. Durante el funcionamiento normal, un tiempo de espera de WDT genera un reinicio del dispositivo (reinicio del temporizador de vigilancia). El bit TO en el registro de estado se borrará cuando se agote el tiempo de espera del temporizador de vigilancia. Si el temporizador no se borra en nuestra codificación de software, toda la MCU se reiniciará con cada desbordamiento del temporizador WDT. El WDT se puede desactivar permanentemente borrando el bit de configuración.
No estamos usando WDT en nuestro programa, así que elimínelo seleccionando APAGADO en el cuadro desplegable.
Paso 5: El siguiente bit será el bit del temporizador de encendido.
El temporizador de encendido proporciona un tiempo de espera nominal fijo de 72 ms en el encendido solo desde el POR. El temporizador de encendido funciona con un oscilador RC interno. El chip se mantiene en Reset mientras el PWRT esté activo. El retardo de tiempo del PWRT permite que VDD se eleve a un nivel aceptable. Se proporciona un bit de configuración para habilitar o deshabilitar el PWRT.
No necesitaremos tales retrasos en nuestro programa, así que apaguemos eso también.
Paso 6: El siguiente bit será la programación de bajo voltaje.
El bit LVP de la palabra de configuración habilita la programación ICSP de bajo voltaje. Este modo permite programar el microcontrolador mediante ICSP utilizando una fuente VDD en el rango de voltaje de funcionamiento. Esto solo significa que no es necesario llevar VPP a VIHH, sino que se puede dejar a la tensión de funcionamiento normal. En este modo, el pin RB3 / PGM está dedicado a la función de programación y deja de ser un pin de E / S de propósito general. Durante la programación, VDD se aplica al pin MCLR. Para ingresar al modo de programación, VDD debe aplicarse al RB3 / PGM siempre que el bit LVP esté establecido.
Apaguemos LVP para que podamos usar RB3 como pin de E / S. Para ello, basta con convertir esta OFF usando el botón desplegable.
Paso 7: Los siguientes bits serán EEPROM y bits de protección de memoria del programa. Si este bit está activado, una vez que la MCU esté programada, nadie recuperará nuestro programa del hardware. Pero por ahora dejemos los tres APAGADOS.
Una vez que la configuración se haya realizado según las instrucciones, el cuadro de diálogo debería verse así.
Paso 8: Ahora haga clic en Generar código fuente para salida, nuestro código se generará ahora, simplemente cópielo junto con el archivo de encabezado y péguelo en nuestro archivo C Blink.c, como se muestra a continuación.
Eso es todo nuestro trabajo de configuración está hecho. Podemos tener esta configuración para todos nuestros proyectos. Pero si estás interesado, puedes jugar con ellos más tarde.
Programación del PIC para que haga parpadear un LED:
En este programa vamos a utilizar nuestro microcontrolador PIC para hacer parpadear un LED conectado a un pin de E / S. Echemos un vistazo a los diferentes pines de E / S disponibles en nuestro PIC16F877A.
Como se muestra arriba, el PIC16F877 tiene 5 puertos básicos de entrada / salida. Por lo general, se indican por PUERTO A (RA), PUERTO B (RB), PUERTO C (RC), PUERTO D (RD) y PUERTO E (RE). Estos puertos se utilizan para la interfaz de entrada / salida. En este controlador, "PORT A" tiene solo 6 bits de ancho (RA-0 a RA-5), "PORT B", "PORT C", "PORT D" tienen solo 8 bits de ancho (RB-0 a RB-7, RC-0 a RC-7, RD-0 a RD-7), ”PORT E” tiene solo 3 bits de ancho (RE-0 a RE-2).
Todos estos puertos son bidireccionales. La dirección del puerto se controla mediante registros TRIS (X) (TRIS A se usa para establecer la dirección de PORT-A, TRIS B se usa para establecer la dirección de PORT-B, etc.). La configuración de un bit TRIS (X) '1' establecerá el bit PORT (X) correspondiente como entrada. Borrar un bit TRIS (X) '0' establecerá el bit PORT (X) correspondiente como salida.
Para nuestro proyecto tenemos que hacer el pin RB3 del PUERTO B como salida para que nuestro LED se pueda conectar a él. Aquí está el código para el LED parpadeando con el microcontrolador PIC:
#incluir
Primero hemos especificado la frecuencia de Crystal externa usando #define _XTAL_FREQ 20000000. Luego, en la función void main () , le indicamos a nuestro MCU que vamos a usar el RB3 como un pin de salida (TRISB = 0X00;) . Luego, finalmente, se usa un bucle while infinito para que el LED parpadee para siempre. Para hacer parpadear un LED, simplemente tenemos que encenderlo y apagarlo con un retraso notable.
Una vez que se completa la codificación, construya el proyecto usando el comando Ejecutar -> Construir proyecto principal. Esto debería compilar su programa. Si todo está bien (como debería estar), una consola de salida en la parte inferior de la pantalla mostrará un mensaje CONSTRUIR CON ÉXITO, como se muestra en la imagen siguiente.
Diagrama de circuito y simulación de Proteus:
Una vez que construimos un proyecto y si la compilación tiene éxito, se habría generado un archivo HEX en el fondo de nuestro IDE. Este archivo HEX se puede encontrar dentro del directorio siguiente
Puede variar para usted si ha guardado en otra ubicación.
Ahora, abramos rápidamente el Proteus que hemos instalado anteriormente y creemos esquemas para este proyecto. No vamos a explicar cómo hacer esto, ya que está fuera del alcance de este proyecto. Pero no se preocupe, se explica en el video a continuación. Una vez que siga las instrucciones y cree los esquemas, debería verse así
Para simular la salida, haga clic en el botón de reproducción en la esquina inferior izquierda de la pantalla después de cargar el archivo hexadecimal. Debería parpadear el LED conectado al RB3 de la MCU. Si tiene algún problema, mire el video, si aún no se resuelve, use la sección de comentarios para obtener ayuda.
Ahora hemos realizado nuestro primer proyecto con el microcontrolador PIC y hemos verificado la salida utilizando un software de simulación. Vaya y retoque con el programa y observe los resultados. Hasta que nos encontremos en nuestro próximo proyecto.
¡Oh, espera!
En nuestro próximo proyecto, aprenderemos cómo hacer que esto funcione en un hardware real. Para eso necesitaremos las siguientes herramientas para mantenerlas listas. Hasta entonces ¡¡FELIZ APRENDIZAJE !!
- PicKit 3
- PIC16F877A IC
- Soporte para CI de 40 pines
- Tablero perfilado
- OSC de cristal de 20Mhz
- Pines de Bergstick hembra y macho
- Condensador 33pf - 2Nos
- Resistencia de 680 ohmios
- LED de cualquier color
- Kit de soldadura.