2.11 Programar los PIC Utilizando Mikroc PRO for PIC
En las secciones anteriores hemos presentado el lenguaje mikroC, especialmente diseñado para programar los PIC. Ahora, lo que hemos revisado es suficiente para empezar a programar, es hora de presentar el software que utilizará para desarrollar y editar los proyectos. Este software se le denomina Entorno de desarrollo integrado (Integrated Developement Environment - IDE) e incluye todas las herramientas necesarias para desarrollar los proyectos (editor, depurador etc.). Por extensión, IDE es a veces llamado compilador. En esta sección le enseñaremos lo básico que debe saber para empezar a desarrollar su primer proyecto en mikroC utilizando el IDE del compilador mikroC PRO for PIC.
Aparte de todas las características comunes de cualquier IDE, mikroC PRO for PIC contiene las informaciones de arquitectura de los microcontroladores PIC (registros, módulos de memoria, funcionamiento de circuitos particulares etc.) para compilar y generar un archivo legible por un microcontrolador PIC. Además, incluye las herramientas específicas para programar los microcontroladores PIC.
El proceso de crear y ejecutar un proyecto contiene los siguientes pasos:
- Crear un proyecto (nombre de proyecto, configuración de proyecto, dependencias entre archivos)
- Editar un programa
- Compilar el programa y corrección de errores
- Depurar (ejecutar el programa paso a paso para asegurarse de que se ejecutan las operaciones deseadas).
- Programar un microcontrolador (cargar el archivo .hex generado por el compilador en el microcontrolador utilizando el programador PICflash).
INSTALAR MIKROC PRO FOR PIC
Antes que nada, usted debe instalar el compilador (con su IDE) en la PC. La instalación del
mikroC PRO for PIC es similar a la instalación de cualquier programa en Windows. Todo el procedimiento se lleva a cabo por medio de los wizards (asistentes de instalación):
Basta con seguir las instrucciones y pulsar sobre Next, OK, Next, Next... En general, es el mismo procedimiento menos la última opción: 'Do you want to install PICFLASH v7.11 programmer?'. ¿Para qué sirve este software? De eso vamos a hablar más tarde. Por ahora, basta con saber que es un software autónomo utilizado para cargar el programa en el microcontrolador.
Una vez más: Next, OK, Next, Next...
Una vez completada la instalación del PICflash, el sistema operativo le preguntará a instalar otro programa similar, un software para programar un grupo especial de los microcontroladores PIC que funcionan en modo de bajo consumo (3.3 V). Salte este paso...
El último paso - ¡la instalación del controlador (driver)!
Pulse sobre Yes.
Un controlador es un programa que permite al sistema operativo comunicar con un periférico. En este caso, este dispositivo es el programador (hardware) del sistema de desarrollo.
El controlador a instalar depende del sistema operativo utilizado. Seleccione el controlador correspondiente al SO (sistema operativo) utilizado (por medio de abrir la carpeta correspondiente) e inicie la instalación. Otra vez, Next, OK, Next, Next... Bueno, ¡todo está instalado para iniciar a programar!
CARACTERÍSTICAS PRINCIPALES DEL MIKROC PRO FOR PIC
Al iniciar el IDE del compilador mikroC PRO for PIC por primera vez, aparecerá una ventana como se muestra a continuación:
Desgraciadamente, una descripción detallada de todas las opciones disponibles de este IDE nos tomaría mucho tiempo. Por eso vamos a describir sólo lo más importante del compilador mikroC PRO for PIC. De todos modos, para obtener más informacion presione el botón de Ayuda (Help) [F1].
MANEJAR LOS PROYECTOS
Antes de empezar a escribir el código, usted debe crear un proyecto. Un programa escrito en el compilador
mikroC PRO for PIC no es un archivo fuente autónomo, sino que forma parte de un proyecto que incluye un código hex, un código ensamblador, cabecera y otros archivos. Algunos de ellos se requieren para compilar el programa, mientras que otros se crean durante el proceso de compilación. Un archivo con extensión
.mcppi le permite abrir cualquiera de estos proyectos.
Para crear un proyecto, basta con seleccionar la opción
Project/New Project, y un wizard aparecerá automáticamente. ¿Qué hacer entonces? Siga las instrucciones...
PROJECT MANAGER (ADMINISTRADOR DEL PROYECTO)
Una vez creado el proyecto, es posible manejar todos los archivos que contiene al utilizar la ventana Project Manager. Basta con pulsar con el botón derecho del ratón sobre una carpeta y seleccionar la opción que necesita para su proyecto.
PROJECT SETTINGS (CONFIGURACIÓN DE PROYECTOS)
Al compilar un proyecto, el compilador genera el archivo .hex que se cargará en el microcontrolador. Estos archivos serán diferentes lo que depende del tipo del microcontrolador así como del propósito de la compilación. Por esta razón es necesario ajustar algunos parámetros de proyectos utilizando la ventana
Project Settings.
Device (dispositivo):
Al seleccionar el tipo de microcontrolador a utilizar permite al compilador extraer el archivo de definición (archivo .def) asociado. El archivo de definición de un microcontrolador contiene las informaciones específicas de sus registros SFR, de sus direcciones de memoria y algunas variables de programación específicas a ese tipo del microcontrolador. Es obligatorio crear un archivo .hex compatible.
Oscillator (oscilador):
Se debe especificar la velocidad de operación del microcontrolador. Por supuesto, este valor depende del oscilador utilizado. El compilador la necesita para compilar rutinas, lo que requiere información del tiempo (por ejemplo, la función Delay_ms). Más tarde, el programador necesitará esta información también. La velocidad de operación se configura de modo que permita al oscilador interno del microcontrolador funcionar a una frecuencia seleccionada.
Build/Debugger Type:
Todo el proceso de compilar (building) está compuesto por análisis sintáctico (parsing), compilar, enlazar (linking) y generar los archivos .hex. El tipo de compilación le permite ajustar el modo de compilación. Dependiendo del modo seleccionado, difieren los archivos generados a cargar en el microcontrolador.
Release: Al elegir esta opción , el compilador no puede afectar más a la ejecución de programa después de la compilación. El programa a cargar en el microcontrolador no será modificado de ninguna manera.
ICD debug: Al elegir esta opción, una vez completado el proceso de la compilación y cargado el programa en la memoria del microcontrolador, el compilador se queda conectado al microcontrolador por medio del cable USB y el programador, y todavía puede afectar a su funcionamiento. El archivo .hex generado contiene los datos adicionales que permiten el funcionamiento del depurador. Una herramienta denominada mikroICD (Depurador en circuito - In Circuit Debugger) permite ejecutar el programa paso a paso y proporcionar un acceso al contenido actual de todos los registros de un microcontrolador real.
El simulador no utiliza los dispositivos reales para simular el funcionamiento del microcontrolador, así que algunas operaciones no pueden ser reproducidas (por ejemplo, interrupción). De todos modos, resulta más rápido depurar un programa por medio de un simulador. Además, no se requiere ningún dispositivo destino.
Note que es posible modificar cualquier configuración en cualquier momento mientras se edita el programa. No se olvide de recompilar y reprogramar su dispositivo después de modificar una configuración.
LIBRARY MANAGING (EDITOR DE LIBRERÍAS)
El compilador tiene que conocer todas las dependencias de su archivo fuente en mikroC para compilarlo apropiadamente. Por ejemplo, si las librerías forman parte de su proyecto, debe especificar cuáles de ellas se utilizan.
Las librerías contienen un gran número de funciones listas para ser utilizadas. Las librerías en mikroC proporcionan muchas facilidades para escribir programas para los microcontroladores PIC. Abra la ventana
Library Manager, y marque las que quiere utilizar en el programa. Al marcar una librería, se añade automáticamente al proyecto y se enlaza durante el proceso de la compilación. Así, no necesita incluir las librerías manualmente en sus archivos del código fuente por medio de la directiva del preprocesador
#include.
Por ejemplo, si su programa utiliza un LCD no hace falta escribir nuevas funciones ya que al seleccionar la librería Lcd, usted podrá utilizar funciones listas para ser utilizadas de la librería LCD (Lcd_Cmd, LCD_Init...) en su programa. Si esta librería no está seleccionada en la ventana Library Manager, cada vez que intente utilizar una función de la librería LCD, el compilador le informará de un error. Una descripción de cada librería está disponible al pulsar con el botón derecho del ratón sobre su nombre y seleccionar la opción Help.
EDITAR Y COMPILAR PROGRAMAS
CODE EDITOR (EDITOR DE CÓDIGO)
El proceso de editar programas se debe realizar dentro de la ventana principal del IDE denominada Code Editor. Al escribir el programa no se olvide de los comentarios. Los comentarios son muy importantes para depurar y mejorar el programa. Además, aunque el compilador no tenga las restricciones de formateo, siempre debe seguir a las mismas reglas de editar (como en los ejemplos proporcionados en este libro). Como no hay limitaciones de tamaño, no vacile en utilizar los espacios en blanco para hacer su código más legible.
Al escribir un programa, no espere que termine la redacción del programa para compilarlo. Compile su código de forma regular con el propósito de corregir cuánto más errores de sintaxis. Asimismo usted puede compilar su programa cada vez que se complete la redacción de una nueva función así como probar su comportamiento al utilizar modo de depuración (ver la próxima sección). De este modo, resulta más fácil solucionar los errores de programa para no “tomar un camino erróneo” en redactar su programa. De lo contrario, usted tendrá que editar el programa entero.
CODE EXPLORER (EXPLORADOR DEL CÓDIGO)
La ventana Code Explorer le permite localizar funciones y procedimientos dentro de los programas largos. Por ejemplo, si usted busca una función utilizada en el programa, basta con pulsar dos veces sobre su nombre en esta ventana, y el cursor estará automáticamente posicionado en la línea apropiada en el programa.
COMPILAR Y SOLUCIONAR LOS ERRORES
Para compilar su código, pulse sobre la opción Build en el menú Project. En realidad, el proyecto entero se ha compilado, y si la compilación se ha realizado con éxito, se generarán los archivos de salida (asm, .hex etc.). Una compilación se ha realizado con éxito si no se ha encontrado ningún error. Durante el proceso de compilación se generan muchos mensajes que se visualizan en la ventana Messages. Estos mensajes consisten en información, advertencia y errores. Cada error encontrado se asocia con su línea de programa y su descripción.
Como un error en su código puede generar mucho más errores, simplemente debe intentar solucionar el primer error en la lista y después recompile su programa. En otras palabras, es recomendable solucionar los errores uno a uno.
En el ejemplo anterior hay dos errores y una advertencia: faltan un punto y coma y una declaración de variable La advertencia le informa que falta el tipo del valor devuelto de la función
main.
La compilación le permite corregir su programa por medio de solucionar todos los errores en mikroC. Cuando todos los errores se solucionen, su programa está listo para ser cargado en el microcontrolador. De todas formas, su tarea todavía no está terminada, porque aún no sabe si su programa se comporta como se esperaba o no.
DEPURAR EL PROGRAMA
La depuración es un paso muy importante ya que permite probar el programa después de una compilación realizada con éxito, o solucionar los errores descubiertos mientras se ejecuta el programa. Como ya hemos visto, hay dos modos de depurar: un depurador software que simula el funcionamiento del microcontrolador (modo por defecto) y depurador hardware (mikroICD) que lee directamente el contenido de la memoria del microcontrolador. El procedimiento de depuración es el mismo sin reparar en el modo elegido. En caso de elegir la opción
ICD debug, hay que cargar el programa en el microcontrolador antes de depurarlo.
Para iniciar la depuración, pulse sobre la opción
Start debugger del menú
Run. El editor del código será ligeramente modificado automáticamente y aparecerá una ventana denominada
Watch Values. El principio de depuración se basa en ejecutar el programa paso a paso y monitorear el contenido de los registros y los valores de las variables. De este modo, es posible comprobar el resultado de un cálculo y ver si algo inesperado ha ocurrido. Al ejecutar el programa paso a paso, podrá localizar los problemas con facilidad.
Durante una depuración el programa será modificado, por lo que usted siempre debe recompilar el programa después de cada corrección, y reiniciar el depurador para comprobar qué ha sido modificado.
COMANDOS DEL DEPURADOR
Hay varios comandos disponibles para depurar el código:
- Step Into - Ejecuta una sola instrucción. Cuando la instrucción es una llamada a una rutina, el depurador hará un salto a la rutina y se detendrá después de ejecutar la primera instrucción dentro de la rutina.
- Step Over - Se ejecuta una sola instrucción. Cuando la instrucción es una llamada a una rutina, el depurador no hará un salto a la rutina, sino que se ejecutará toda la rutina. El depurador se detiene a la primera instrucción después de la llamada a la rutina.
- Run To Cursor - El programa se ejecuta hasta la línea en la que se encuentre el cursor.
- Step out - Se ejecutan las demás instrucciones dentro de la rutina. El depurador se detiene inmediatamente al salir de la rutina.
PUNTOS DE RUPTURA (BREAKPOINTS)
Los puntos de ruptura hacen el proceso de depurar los programas de una manera más eficiente, puesto que permiten ejecutar el programa a toda velocidad y detenerlo automáticamente en una línea específica (punto de ruptura). Eso resulta muy útil, permitiéndole comprobar sólo las partes críticas del programa y no perder el tiempo probando todo el programa línea a línea. Para añadir o quitar un punto de ruptura basta con pulsar sobre la línea apropiada en el lado izquierdo del editor del código, o presionar [F5]. Una pequeña ventana denominada Breakpoints muestra dónde están los puntos de ruptura. Note que las líneas designadas como puntos de ruptura están marcadas en rojo.
La línea que se está ejecutando actualmente está marcada en azul. Es posible leer el contenido de registros y variables seleccionados en la ventana Watch Values en cualquier momento. Para ejecutar la parte de programa desde la línea en la que está el cursor hasta el punto de ruptura, utilice el comando Run/Pause Debugger.
VENTANA WATCH VALUES
El depurador software y hardware tienen la misma función de monitorear el estado de los registros durante la ejecución del programa. La diferencia es que el depurador software simula ejecución de programa en una PC, mientras que el depurador ICD (depurador hardware) utiliza un microcontrolador real. Cualquier cambio de estado lógico de los pines se indica en el registro (puerto) apropiado. Como la ventana Watch Values permite monitorear el estado de todos los registros, resulta fácil comprobar si un pin está a cero o a uno. La última modificación está marcada en rojo en la ventana Watch Values. Esto le permite localizar la modificación en la lista de variables y registros durante el proceso de la depuración.
Para visualizar esta ventana es necesario seleccionar la opción
View/Debug Windows/Watch Values. Entonces usted puede hacer una lista de registros/variables que quiere monitorear y la manera de visualizarlos.
STOPWATCH (CRONÓMETRO)
Si quiere saber cuánto tiempo tarda un microcontrolador en ejecutar una parte del programa, seleccione la opción Run/View Stopwatch. Aparecerá una ventana como se muestra en la figura a la derecha. ¿Cómo funciona un cronómetro? Eso es pan comido... El tiempo que tarda un comando (step into, step over, run/pause etc.) en ejecutarse por el depurador se mide automáticamente y se visualiza en la ventana Stopwatch. Por ejemplo, se mide tiempo para ejecutar un programa, tiempo para ejecutar el último paso etc.
PROGRAMAR EL MICROCONTROLADOR
Si ha solucionado todos los errores en su código y cree que su programa está listo para ser utilizado, el siguiente paso es cargarlo en el microcontrolador. El programador PICflash se utiliza para este propósito. Es una herramienta diseñada para programar todos los tipos de microcontroladores PIC. Está compuesto por dos partes:
- La parte hardware se utiliza para introducir un código hexadecimal (el programa a ser cargado en el microcontrolador) y para programar el microcontrolador por medio de niveles de voltaje específicos. Durante el proceso de la programación, un nuevo programa se escribe en la memoria flash del microcontrolador, mientras que el programa anterior se borra automáticamente.
- La parte de software se encarga de enviar el programa (archivo .hex ) a la parte hardware del programador por medio de un cable USB. A la interfaz de usuario de este software se le puede acceder desde IDE al pulsar sobre la opción mE_Programmer del menú Tools o al pulsar [F11]. Por consiguiente, es posible modificar algunas configuraciones del programador y controlar el funcionamiento de la parte hardware (Cargar, Escribir, Verificar...).
Se puede reprogramar el microcontrolador tantas veces como se necesite.
OTRAS HERRAMIENTAS DEL COMPILADOR
El compilador mikroC PRO for PIC proporciona herramientas que en gran medida simplifican el proceso de escribir el programa. Todas estas herramientas se encuentran en el menú Tools. En la siguiente sección vamos a darle una breve descripción de todas ellas.
TERMINAL USART
El terminal USART representa una sustitución para la estándar Windows Hyper Terminal. Se puede utilizar para controlar el funcionamiento del microcontrolador que utiliza la comunicación USART. Tales microcontroladores están incorporados en un dispositivo destino y conectados al conector RS232 de la PC por medio de un cable serial.
La ventana USART terminal dispone de opciones para configurar la comunicación serial y visualizar los datos enviados/ recibidos.
EDITOR EEPROM
Al seleccionar la opción EEPROM Editor del menú Tools, aparecerá una ventana como se muestra en la siguiente figura. Así es cómo funciona la memoria EEPROM del microcontrolador. Si quiere cambiar de su contenido después de cargar el programa en el microcontrolador, ésta es la forma correcta de hacerlo. El nuevo contenido es un dato de un tipo específico (char, int o double), primero debe seleccionarlo, introducir el valor en el campo Edit Value y pulsar sobre Edit. Luego, pulse sobre el botón Save para guardarlo como un documento con extensión .hex. Si la opción Use EEPROM in Project está activa, los datos se cargarán automáticamente en el microcontrolador durante el proceso de la programación.
VENTANA ASCII CHART
Si necesita representar numéricamente un carácter ASCII, seleccione la opción ASCII chart del menú Tools. Aparecerá una tabla, como se muestra en la figura que está a continuación. Usted probablemente sabe que cada tecla de teclado está asociada con un código (código ASCII). Como se puede ver, los caracteres que representan los números tienen valores diferentes. Por esta razón, la instrucción de programa para visualizar el número 7 en un LCD no visualizará este número, sino el equivalente a la instrucción BEL. Si envía el mismo número en forma de un carácter a un LCD, obtendrá el resultado esperado - número 7. Por consiguiente, si quiere visualizar un número sin convertirlo en un carácter apropiado, es necesario añadir el número 48 a cada dígito en el que consiste el número a visualizar.
EDITOR DE SIETE SEGMENTOS
Un editor de siete segmentos le permite determinar con facilidad el número a poner en un puerto de salida con el propósito de visualizar un símbolo deseado. Por supuesto, se da por entendido que los pines del puerto deben estar conectados a los segmentos del visualizador de manera apropiada. Basta con colocar el cursor en cualquier segmento del visualizador y pulsar sobre él. Se visualizará inmediatamente el número a introducir en el programa.
LCD CUSTOM CHARACTER (CARACTERES LCD DEFINIDOS POR EL USUARIO)
Además de los caracteres estándar, el microcontrolador también puede visualizar los caracteres creados por el programador. Al seleccionar la herramienta LCD custom character, se evitará un pesado trabajo de crear funciones para enviar un código apropiado a un visualizador. Para crear un símbolo, pulse sobre los cuadros pequeños en la ventana LCD custom character, luego seleccione la posición y la fila y pulse sobre el botón GENERATE. El código apropiado aparece en otra ventana. No es necesita pulsar más. Copy to Clipboard (copiar al portapapeles) - Paste (pegar)...
GENERADOR DE MAPA DE BITS PARA UN LCD GRÁFICO
El generador de mapa de bits para un LCD gráfico es una herramienta insustituible en caso de que el programa que escribe utilice el visualizador LCD (GLCD). Esta herramienta le permite visualizar un mapa de bits con facilidad. Seleccione la opción Tools/Glcd Bitmap Editor aparecerá la ventana apropiada. Para utilizarlo, seleccione el tipo de visualizador a utilizar y cargue un mapa de bits. El mapa de bits debe ser monocromático y tener la resolución apropiada del visualizador (128 x 64 píxeles en este ejemplo). El procedimiento a seguir es igual que en el ejemplo anterior: Copy to Clipboard...
Un código generado que utiliza herramientas para controlar los visualizadores LCD y GLCD contiene funciones de la librería Lcd. Si las utiliza en el programa, no se olvide de marcar la caja de chequeo junto a esta librería en la ventana Library Manager. Así el compilador será capaz de reconocer estas funciones correctamente.