Apunte de MPLAB y Proteus
Apunte de MPLAB y Proteus
Apunte de MPLAB y Proteus
programación de microcontroladores
Técnicas Digitales II
2018
Autor: Cliver Carrascal
Resumen
En el presente apunte se explicará el proceso de creación, compilación, simulación y progra-
mación de un programa en lenguaje C para un microcontrolador PIC 16F887 de Microchip. Para
poder seguir los pasos de este apunte es necesario tener instalado MPLAB X v3.00 (o superior),
el compilador XC8 v1.33 (o superior), el simulador Proteus v8.2 (o superior) y una placa progra-
madora PICkit2. El IDE MPLAB X y el compilador XC8 se pueden descargar de manera gratuita
desde la página oficial de Microchip (http://www.microchip.com/mplab/ ).
1. Introducción
Para crear un programa que luego vaya a funcionar en un microcontrolador son necesarias dos
herramientas fundamentales: un compilador para traducir del lenguaje C al lenguaje del microcon-
trolador (Assembler) y un programa que brinde el entorno y las herramientas necesarias para poder
hacerlo más fácilmente, que se denomina Entorno de Desarrollo Integrado (IDE). El compilador que
se utilizará será el XC8, mientras que el IDE será MPLABX, ambas aplicaciones son específicas para
microcontroladores de Microchip. Se comenzará trabajando con MPLAB en la creación y depuración
de un nuevo proyecto. Luego, en la sección 2 se verá como simular su funcionalidad en Proteus y, por
último, en la sección 3 se muestra cómo se programa el microcontrolador con el mismo IDE o con un
programa externo creado por Microchip.
2. Compilación en MPLAB X
2.1. Nuevo Proyecto
Desde la pantalla inicial de MPLAB X, crear un nuevo proyecto haciendo click en el menú “File”,
y seleccionando la opción "New Project". En la ventana emergente (ver figura 1), seleccionar la opción
“Standalone Project”, ubicado dentro de la carpeta “Microchip Embedded”, y hacer click en Next.
1
Figura 1: Creación de un nuevo proyecto.
Al presionar Next, se debe seleccionar el programador, es decir, el dispositivo que se utilizará pa-
ra descargar el programa en el microcontrolador. Para el microcontrolador escogido (16F887) puede
seleccionarse PICkit2 o PICkit3. Si sólo se planea simular el programa sin descargarlo a un micro-
controlador seleccionar ICD 3, de lo contrario, seleccionar PICkit2.
2
Next. En la última ventana se debe elegir el nombre del proyecto y el lugar donde será creado. Tener
en cuenta que, en la dirección que se haya elegido, se creará una carpeta con el mismo nombre
del proyecto y “.X” al final. Todos los archivos relacionados al proyecto se crearán dentro de dicha
carpeta.
Una vez finalizado el asistente de creación de proyecto, deberá aparecer en la parte izquierda de
la ventana el árbol de carpetas del proyecto, como se muestra en la figura 5. Si no es así, hacer click
en “Projects” señalado en la figura 6, y luego en el botón señalado con un círculo rojo en la misma
figura para dejarlo de manera permanente.
Hacer click derecho en el título del proyecto (escrito en negrita) y seleccionar “Properties”. En
la ventana que se abre seleccionar la opción “XC8 global options” ubicado en la parte izquierda (ver
figura 7). En la opción “Output file format” seleccionar la opción “COFF” y presionar OK.
3
Figura 7: Configuración del archivo de salida del compilador
La ubicación del archivo será por defecto dentro de la carpeta “Source Files” dentro del árbol del
proyecto. En la figura 9 se tiene un archivo con un programa ya escrito.
4
Figura 9: Ejemplo de un archivo fuente escrito.
2.3. Compilación
Para verificar y compilar el programa escrito en el archivo, hacer click en alguno de los íconos
mostrados en la figura 10, que se ubican en la parte superior de la pantalla. La diferencia entre ambos
es que el de la derecha elimina todos los archivos anteriores antes de compilar (y por lo tanto tarda
más en terminar el proceso).
Si el programa está bien escrito, en la parte inferior de la pantalla debe aparecer la ventana
“Output” con el mensaje “Build Succesful”, como se muestra en la figura 11. Se generarán dos ar-
chivos con el nombre del proyecto y la palabra “.production” concatenada, con extensiones “.cof” y
“.hex”. Estos dos archivos son los archivos fuente para la simulación y programación del microcon-
trolador, respectivamente.
En el caso que el código tenga errores, en la ventana “Output” mostrará el mensaje “Build Failed”
en color rojo. Los errores hallados por el compilador se muestran en la misma ventana resaltados
en azul. En la figura 12 se muestra un ejemplo donde se omitió el “;” al final de una sentencia. El
compilador muestra el archivo donde se encontró el error (main.c), la línea dentro del archivo (46)
y el motivo del error, que en el ejemplo es “Error en el sintaxis del código” y “Se esperaba un “;”
luego de la sentencia”. Al hacer click en la línea que describe el error se resalta la línea del código que
5
contiene dicho error, como se muestra en la figura 13. Cuando falta el “;”, el error se resalta siempre
en la línea siguiente, debido a que reconoce las dos instrucciones como una sola.
3. Proteus
3.1. Introducción
Una vez creado el proyecto, generado el código y compilado correctamente en MPLAB X, es
necesario chequear su funcionalidad, es decir, si el programa hace efectivamente lo que se quiere que
haga. Para esto se utilizará una herramienta que permite simular el hardware que se tiene disponible
y cargarle el programa al microcontrolador elegido, para comprobar su comportamiento, llamado
Proteus.
NOTA: Para el correcto funcionamiento del programa, es necesario ejecutarlo como administra-
dor. Si se desea evitar la necesidad de abrir el programa con click derecho y la opción “Ejecutar como
Administrador”, se recomienda configurar el ejecutable para que siempre se abra con permisos de
administrador. Para ello, dirigirse a la carpeta donde se instaló Proteus (por defecto es C:/Archivos de
6
programa (x86)/Labcenter Electronics/Proteus 8 Professional), entrar a la carpeta “BIN”, hacer click
derecho en el archivo “PDS.EXE”, seleccionar “Propiedades”, y en la pestaña “Compatibilidad” dejar
activada la casilla “Ejecutar este programa como administrador”.
7
Figura 15: Búsqueda del microcontrolador 16F887
Cerrar la ventana con el botón OK, seleccionar el microcontrolador de la lista, y hacer click en
cualquier lugar del área de trabajo del simulador para instanciarlo. Para cargar el programa hacer doble
click sobre el bloque del microcontrolador, y dentro de la ventana de propiedades (figura 16) hacer
click en la carpeta al lado del campo correspondiente a “Program File”. Buscar el archivo .cof dentro
de la carpeta del proyecto de MPLAB X, específicamente en <proyecto>.X/dist/default/production.
Definir además la frecuencia a la que se desea que trabaje el microcontrolador dentro del campo
“Processor Clock Frequency”. En este caso se elegirá, como ejemplo, 20 MHz, que es la frecuencia
que se utiliza en este curso.
8
Componente Keyword
Pulsador BUTTON
Llave SW-SPDT
Resistencia 220Ω / 1KΩ MINRES220R / MINRES1K
Potenciómetro POT-HG
LED Verde/Rojo/Azul LED-GREEN / LED-RED / LED-BLUE
LCD LM016L
Puerto COM COMPIM
De la misma manera que con el microcontrolador, los restantes componentes como los botones,
LEDs y resistencias se encuentran en diversas librerías. En la tabla 1 se muestra una lista con los
componentes más utilizados y sus palabras clave para encontrarlo con el buscador.
Los componentes que representan las fuentes de tensión y tierra se encuentran en la sección
“Terminals” ubicado en la parte izquierda de la pantalla (ver figura 17). Hacer click en el ícono
y seleccionar la opción “POWER” para instanciar una fuente de tensión de 5V y “GROUND”
para colocar el plano de tierra. Se pueden además utilizar terminales genéricos para conectar vir-
tualmente dos pines. El terminal “DEFAULT” se conecta con cualquier otro terminal igual con la
misma etiqueta. La etiqueta se define haciendo doble click sobre el terminal y escribiendo un nom-
bre en el campo “String”. Por último, los instrumentos de medición se encuentran en la sección
“Instruments” identificado con el ícono (ver figura 17). Los más utilizados en este curso son el
osciloscopio (“OSCILLOSCOPE”), terminal serie (“VIRTUAL TERMINAL”), terminal SPI (“SPI
DEBUGGER”) y terminal I2C (“I2C DEBUGGER”).
9
Para volver a colocar componentes se debe seleccionar el botón “Components” (ver figura 17), y
para seleccionar, arrastrar o interactuar con componentes dentro de la simulación se debe seleccionar
la herramienta de selección, marcada como “Selection Tool” en la figura 17. Una vez completado el
circuito, el simulador estará listo para ser ejecutado (figura 18).
La simulación se pone en marcha con el botón ubicado en la parte inferior izquierda. Se puede
además ejecutar la simulación de manera pausada para analizar cada ejecución del microcontrolador.
Dicho modo se activa con la tecla . En éste último modo, se muestran de manera automática las
ventanas con el código fuente del microcontrolador (figura 19) y las variables declaradas (figura 20).
10
Al presionar Stop estas ventanas se cierran automáticamente. Si se cierran de manera manual
durante la simulación, al volver a ejecutar la simulación, no se abrirán. Para volver a abrirlas, ejecutar
la simulación en modo pausado (con el botón ), dirijirse al menú “Debug” y, dentro del menú “PIC
CPU” (ubicado generalmente al fondo del menú) seleccionar “Source Code”, como se muestra en la
figura 21.
3.4. Debugging
En la parte superior derecha de la ventana del código fuente (figura 19) se encuentran los controles
del simulador. El primero, denominado “Run” pone en marcha la simulación hasta que se pause con
. Puede ejecutarse con la tecla F12. El segundo se denomina “Step Over” , y cuando se presione
ejecutará el simulación hasta que el programa llegue a la siguiente línea, independientemente de si
es una instrucción o una función. Puede ejecutarse además con la tecla F10. El siguiente es “Step
Into” , que ejecuta sólo la línea actual. Si línea que se ejecuta es la llamada a una función, el
programa se detendrá en la primera línea de dicha función. Se ejecuta también con la tecla F11. El
cuarto es “Step Out” , que ejecuta todas las líneas necesarias para salir de la función en la cual se
encuentra el programa en el momento que se presiona el botón o las teclas Alt+F11. El último es
“Toggle Breakpoint” , y se utiliza para introducir un Breakpoint en el programa. Un Breakpoint
es una señal de stop que se utiliza para indicarle al simulador que debe dejar de ejecutarse antes de
la línea seleccionada. Un breakpoint también se puede activar haciendo doble click en la línea de
programa correspondiente. Cualquiera de las anteriores ejecuciones (Run, Step Over, Step Into y Step
Out) se detienen si hay un breakpoint en las líneas que se ejecutan.
Si el programa tiene más de un archivo, se pueden seleccionar con el menú desplegable ubicado
en la parte superior de la ventana del código fuente (figura 19).
11
encuentran en la sección “Instruments” (ver figura 17). Los que se analizan en este apunte son el de
SPI (SPI DEBUGGER), I2C (I2C DEBUGGER) y Serial (VIRTUAL TERMINAL).
NOTA: El pin “SS” del microcontrolador cumple la función de Slave Select únicamente cuando
se configura como esclavo.
En la figura 22 se muestran las configuraciones del monitor, que se pueden ver haciendo doble
click sobre el monitor, o click derecho y seleccionando “Edit Properties”.
Los campos “Part Reference” y “Part Value” no se deben modificar. En el campo “SPI Mode” se
selecciona el modo con el cual va a funcionar dentro de la simulación: si sólo se desean observar los
datos transmitidos por el microcontrolador se debe colocar la opción “Monitor”; si se desea simular
12
una respuesta por parte del monitor hacia el microcontrolador, se debe seleccionar “Slave”. Los cam-
pos “Master clock frequency in Hz”, “SCK Idle state is” y “Sampling edge” son la frecuencia del
reloj, el nivel desactivado del reloj (es decir, el valor lógico del pin cuando el reloj esta desactivado)
y el flanco de reloj donde se va a tomar la muestra en el pin DIN, respectivamente. Las opciones que
se elijan deben ser coherentes con las configuraciones del microcontrolador.
En la figura 23 se muestra el monitor durante una simulación. En 1 se muestran los instantes
donde la comunicación comienza o termina (acompañados con un circulo verde o un circulo verde
tachado, respectivamente), cuando los datos llegan al monitor (acompañados con una flecha azul) y
cuando los datos son enviados desde el monitor (acompañados con una flecha celeste con o sin signo
de pregunta amarillo). En 2 se encuentra la cola del buffer de salida, es decir, los datos que que están a
la espera de ser enviados. En 3 se pueden enlistar secuencias de datos para enviar. Estas secuencias se
agregan al buffer haciendo doble click sobre las mismas. En 4 está el cuadro de texto para introducir
el número que se quiere enviar al buffer o almacenar en la lista de secuencias recién descrita. Los
números pueden ser hexadecimales, binarios o decimales. La base se identifica con un prefijo, que se
muestra en la tabla 3.
NOTA: Por defecto, la ventana es más pequeña que la que se ve en la figura, mostrando únicamen-
te la parte superior izquierda de la misma. Basta con agrandar la ventana con el mouse para obtener la
interfaz completa. En caso de cerrase la ventana, puede volver a abrirse haciendo click en “Terminal”
dentro del menú “Debug”.
Los datos pueden enviarse de a un byte por vez o en conjunto (separados por espacios o comas).
Para agregarlos al buffer de salida o cola, luego de haberlos escrito en el cuadro de texto se debe
hacer click en “Queue”. Para almacenarlos en la lista de secuencias predefinidas se debe hacer click
en “Add”. Para eliminarlos de la lista, se debe seleccionar el elemento en la lista y hacer click en
“Delete”. Dichos botones están señalados en la figura 23 con el número 5.
Debido al principio de funcionamiento del protocolo SPI, los datos se enviarán desde el monitor
cuando llegue otro dato desde el microcontrolador, mostrándose ambos simultáneamente (el que se
13
envía al microcontrolador arriba y el que se recibe debajo). Cuando no hayan datos en el buffer de
salida, el monitor mostrará el símbolo “??” cada vez que se reciba un byte.
NOTA: Una vez que se haya cargado una secuencia de uno o más bytes a la cola del buffer de
salida, no pueden ser modificados. Cuando entran al buffer para ser enviados, desaparecen de la cola.
El monitor I2C es idéntico al monitor SPI (figura 23), a diferencia que en el modo I2C se pueden
enviar los caracteres especiales del protocolo. En la tabla 4 se muestran los caracteres y sus respectivos
significados. Por otro lado, el monitor utiliza el símbolo “*” para denotar que se recibieron datos
parciales o cortados, y “?” para indicar la detección de niveles lógicos incorrectos.
14
Caracter Significado
S Condición de Start
Sr Condición de Start repetida
P Condición de Parada
N No Acknowledge
A Acknowledge
15
Figura 25: Ventana de configuración del monitor Serial.
Al iniciar la simulación se abrirá la ventana del monitor serial, como se muestra en la figura 26. De
no hacerlo, puede abrirse manualmente desde el menú “Debug” haciendo click en “Virtual Terminal”.
Todos los datos que lleguen al pin RX del monitor, serán mostrados en la ventana del monitor en
formato ASCII. Si los datos que llegan al monitor no se encuentran dentro del rango de los caracteres
visibles (letras, números u otros), no se visualizarán. De ser necesario visualizar números sin formato,
se puede configurar el monitor para que exprese cada caracter en base hexadecimal, haciendo click
derecho en cualquier parte de la ventana del monitor, y seleccionando “Hex Display Mode”. Nótese
que, de activar esta opción, todas letras y números codificados en ASCII también serán expresados en
hexadecimal.
Para enviar datos desde del monitor se debe asegurar que esté el monitor seleccionado (el cursor
del monitor estará parpadeando) y presionar la tecla de la letra o número que se quiere enviar. Por
defecto, el monitor no muestra los datos enviados, aunque pueden mostrarse haciendo click derecho
16
dentro de la pantalla y activando la opción “Echo Typed Characters”. Además es posible enviar el
caracter “Carry Return” (0x0D) con la tecla “Enter” y “Backspace” (0x08) con la tecla “Retroceso”
ó “Backspace”. No es posible enviar datos que no sean en formato ASCII.
4.2. Preliminares
Antes de programar el microcontrolador es necesario definir los bits de configuración. MPLAB X
posee una herramienta para generar las instrucciones de configuración de una manera sencilla. Dentro
del menú “Production” seleccionar “Set Configuration Bits”. En la parte inferior de la pantalla deberá
aparecer una pestaña con todas las opciones del microcontrolador seleccionado para el proyecto en
particular. Los bits de configuración dependen del circuito donde se utilice el microcontrolador. Para
la placa de desarrollo de este curso, las configuraciones apropiadas se muestran en la figura 27.
Una vez seleccionadas las configuraciones, se genera el código haciendo click en “Generate Sour-
ce Code to Output”. Se abrirá una pestaña con las líneas de código de los bits de configuración.
Seleccionar el texto y copiarlo al código fuente antes de la declaración de variables y luego de las
sentencias “#include”, como se muestra en la figura 28.
17
Figura 28: Código de los bits de configuración.
18
Figura 29: Selección del programador.
19
de los íconos . MPLAB X compilará nuevamente el código fuente, lo programará en el micro-
controlador y, cuando termine, deberá aparecer en la pestaña “Output” el mensaje que se muestra en la
figura 31. No es necesario realizar el proceso de compilación antes de programar el microcontrolador,
debido a que el proceso de programación incluye la compilación.
20
Figura 32: Software oficial de PICkit 2 Figura 33: Reiniciar comunicación con PICkit2
Cuando el software tenga una conexión exitosa con el PICkit 2, se debe seleccionar el microcon-
trolador a utilizar en la lista de “Device” (ver figura 34). Como ya se dijo, en este curso se utiliza el
PIC16F887.
Luego, es necesario cargar el código fuente. Hacer click en el menú “File”, seleccionar “Import
Hex”, y buscar el archivo “.hex” dentro de la carpeta del proyecto de MPLAB X. Específicamente, el
archivo se encuentra en <proyecto>.X/dist/default/production. Deberá aparecer el mensaje “Hex file
succesfully imported”. Por último, hacer click en el botón “Write” y esperar a que finalice el proceso
con el mensaje “Programming Succesful” (ver figura 35). Antes de retirar el microcontrolador del
PICkit 2, asegurarse de que la opción “On” en la parte derecha del software, señalada en la figura 35,
esté desactivada.
21
Figura 35: Programación exitosa del archivo
Figura 34: PICkit 2 conectado.
“.hex”.
5. Placa de desarrollo
La cátedra del curso cuenta con placas de desarrollo con los componentes básicos para el correc-
to funcionamiento del microcontrolador. En la figura 36 se muestra la placa de desarrollo con las
distintas secciones señaladas.
NOTA: Si bien la placa tiene un regulador de tensión, normalmente se le provee de tensión utili-
zando un cable USB conectado a cualquier computadora o cargador USB.
22
Figura 36: Placa de desarrollo.
23