MPLAB® X Y TÉCNICAS DE PROGRAMACIÓN CON LIBRERÍAS DE MICROCHIP
Andrés Raúl Bruno Saravia Ariel Jacinto Coria Sebastián Gregori Fiadino Alejandro Anibal Airoldi
1
Airoldi, Alejandro Anibal MPLAB X y Técnicas de Programación con Librerías de Microchip. - 1a ed. - Buenos Aires. mcelectronics, 2011. 300 p.: il.; 22x16 cm. ISBN: 978-987-26021-1-6 1. Informática. 2. Programación. I. Título CDD 519.7
Fecha de catalogación: Abril 2011 © mcelectronics Hecho el depósito que marca la ley 11.723 Todos los derechos reservados. Ninguna parte de este libro, incluido el diseño de la portada, puede reproducirse, almacenarse o transmitirse de ninguna forma ni por ningún medio, sea este eléctrico, químico, mecánico, óptico, de grabación o de fotocopia, sin la previa autorización escrita por parte de mcelectronics. La infracción de los derechos mencionados puede ser constitutiva de delito contra la propiedad intelectual. La editorial no se pronuncia ni expresa implícitamente respecto a la exactitud de la información contenida en este libro, razón por la cual no puede asumir ningún tipo de responsabilidad en caso de error u omisión. Las marcas mencionadas son propiedad exclusiva de sus registradores legales.
2
A todos los que han colaborado en la redacci贸n y edici贸n de este libro. A los alumnos que a lo largo de estos a帽os contribuyeron con sus invaluables aportes. A nuestras familias y amigos por el apoyo incondicional.
3
4
SERVICIO DE AYUDA AL LECTOR Por consultas, sugerencias o para solicitar informaci贸n adicional, favor no dude en escribirnos a: soporte@mcelectronics.com.ar PROGRAMAS Y RECURSOS ADICIONALES DE MICROCHIP Para poder compilar los programas propuestos necesita el entorno de desarrollo MPLAB X, el compilador C18 para PIC18 y el compilador C30 para los dsPIC. Todas las herramientas se pueden obtener en forma gratuita desde la de Microchip: www.microchip.com/mplabx www.microchip.com/c18 www.microchip.com/c30 PROGRAMAS Y RECURSOS ADICIONALES DE MCELECTRONICS Puede acceder al c贸digo fuente de los programas, ejercicios adicionales y clases en MP3 a trav茅s de la web del libro: www.mcelectronics.com.ar/techtrain COMPLEMENTOS Microchip Application Libraries www.microchip.com/mal MCP2200 Configuration Utility www.microchip.com/mcp2200 LABVIEW www.ni.com/labview MATLAB www.mathworks.com/products/matlab
5
6
SUMARIO CREANDO UN PROYECTO CON MPLAB X GUIA VISUAL
9 11
PROGRAMANDO EN LENGUAJE C CARACTERISTICAS DEL LENGUAJE SET DE INSTRUCCIONES DECLARACION DE VARIABLES FUNCION PRINTF() MANEJO DE LA MEMORIA FUNCIONES INTERRUPCIONES
21 23 26 30 31 41 44 50
ESCRIBIENDO APLICACIONES EN C18 CONTROL I/O ELEMENTAL CONTADOR LCD CONVERSOR A/D USART INTERRUPCIONES ETHERNET Y WI-FI CON PIC MICROCHIP TCP/IP CONFIGURATION WIZARD LOS ARCHIVOS DEL STACK MPFS MICROCHIP WEB PREVIEW ENVIO DE EMAILS ACCESO DESDE INTERNET ARQUITECTURA DEL PIC18F97J60 VARIABLES DINÁMICAS MODULO WI-FI
53 55 56 57 63 65 68 71 74 85 88 93 95 97 102 106 124
7
ALICACIONES USB CON PIC CAPAS DEL MODELO USB USB + VISUAL BASIC.NET LABORATORIOS PRACTICOS MCP2200
149 157 177 179 197
APLICACIONES GSM CON PIC COMANDOS AT ESQUEMATICO COMPLETO DESCRIPCION DEL PROGRAMA
201 203 206 211
CONTROL DISCRETO CON dsPIC INTRODUCCION A CONTROL AUTOMATICO SISTEMAS DE CONTROL DIGITALES SELF BALANCING ROBOT CONSTRUCCION DEL ROBOT COMPENSADOR EN MATLAB ADQUISICION Y ANALISIS DE DATOS INTRODUCCION A LABVIEW COMPARACION SOFT/DSP NOMENCLATURA
227 229 230 235 242 251 258 259 280 282
8
ETHERNET Y WI-FI CON PIC速
9
10
TELEMETRÍA Y CONTROL REMOTO CON PIC En este capítulo aprenderemos a realizar algunas aplicaciones muy útiles para los sistemas de monitoreo y control a distancia utilizados en electrónica industrial mediante redes Ethernet. Las aplicaciones de monitoreo y control son muy utilizadas en la industria, donde se necesita tener suficiente información para realizar una determinada acción de control. Es por este motivo que en este capítulo veremos algunas aplicaciones simples donde se agrega comunicación a través de la red Ethernet. Esto permite que el control sea a distancia, permitiendo además la comunicación entre distintos dispositivos que actúan como sensores o actuadores, esto es un ejemplo de los beneficios que trae una red Ethernet. Los ejemplos serán explicados de manera detallada y con la profundidad adecuada. Veremos además, los módulos de entrenamiento comerciales que nos ayudarán a afianzar los conocimientos teóricos sobre este tema. Todo esto nos permitirá desarrollar aplicaciones de manera rápida y efectiva.
NETWORKING CON PIC Aprenderemos a utilizar las herramientas de Microchip, como el TCP/IP Configuration Wizard y el Microchip WebPreview para crear un WebServer con PIC. Para comenzar a trabajar necesitamos tener instalado el MPLAB, el compilador C18 y el Microchip TCP/IP Stack. Vamos a estudiar el Microchip TCP/IP Stack. Siempre es recomendable consultar la web del fabricante para descargar la última versión: www.microchip.com/mal Para instalarlo basta con ejecutar las Microchip Libraries que se descargan de la web mencionada anteriormente. En verdad estamos instalando una serie de librerías que Microchip provee para manejo de USB, mTouch (sensor capacitivo), TFT y Ethernet. El Microchip TCP/IP Stack está formado por un conjunto de capas que dan acceso a distintos protocolos: ARP, IP, ICMP, UDP, TCP, DHCP, SNMP, HTTP, FTP y TFTP. El Stack está totalmente programado en C, requiere aproximadamente 32K en memoria de programa y es portable a través de las distintas familias de Microchip. Es decir, funciona en micros de 8, 16 y 32 bits.
11
Figura 1: El stack está formado por varia capas, donde cada una brinda servicios a la capa superior. Junto con el TCP/IP Stack se instalan 2 aplicaciones sumamente útiles al momento de desarrollar una interface Ethernet con PIC: el Microchip TCP/IP Configuration Wizard y el Microchip Web Preview. La primera nos permite modificar los parámetros del Stack en forma gráfica (sin tener que programar en C) y con la segunda podemos visualizar la página web antes de cargarla en la memoria del PIC. MICROCHIP TCP/IP CONFIGURATION WIZARD Podemos tener una buena idea de las posibilidades del Stack estudiando en detalle el Microchip TCP/IP Configuration Wizard. Si bien esta aplicación nos permite modificar parámetros de la red como la dirección IP y MAC; seleccionar entre protocolos como HTTP y FTP, no permite que el usuario agregue su propio código. Al momento de implementar un sistema necesariamente debemos programar las funciones en C con el MPLAB. Lo primero que debemos hacer es seleccionar la carpeta desde la cual vamos a trabajar, es decir, donde está instalado el Stack. El proyecto básico se encuentra en: C:\Microchip Solutions library\TCPIP Demo App. Si bien hay varios ejemplos realizados con el stack, es conveniente empezar con este. Hay otros con soporte para WI-FI y librerías de encriptación SSL. Lo que estamos haciendo es decirle al asistente que archivos vamos a configurar. Hay que tener presente que el TCP/IP Configuration Wizard agrega o quita funciones del stack comentando código. Sabemos que el C18 no compila el código comentado ni las funciones asociadas, ahorrando así memoria de programa en el PIC.
12
Figura 2: Pantalla inicial del TCP/IP Configuration Wizard. El TCP/IP Configuration Wizard es una aplicación gráfica que permite modificar los parámetros del stack. Sin embargo, para realizar telemetría y control a través de Ethernet debemos interactuar con el stack mediante funciones callback programadas en C.
AGREGANDO SERVICIOS AL STACK Podemos agregar soporte para distintos servicios: Servidor Web, Cliente de email, Telnet, FTP y SSL. Además soporte para el módulo WI-FI de Wi-Fi que veremos en el fascículo 22. En esta instancia vamos a agregar Servidor Web, que permite acceder a un página por medio de una dirección IP y Cliente de email mediante el cual podremos enviar un email automáticamente ante un determinado evento, por ejemplo, si sube la temperatura por encima de un umbral.
13
Figura 3: Opciones de Servidor Web y Cliente de email seleccionadas en el TCPIP Configuration Wizard. Como mencionamos anteriormente, cada servicio que deshabilitamos por medio del asistente es comentado en el Stack para que el C18 no lo compile. En la Figura 3, vemos que podemos comentar manualmente cada servicio. En esta instancia cabe mencionar que el Stack de Microchip está organizado en varios archivos, los encabezados que habilitan los servicios se encuentran en el archivo: TCPIPConfig.h Vemos que no todas las funciones del Stack están disponibles a través del TCP/IP Configuration Wizard, por eso es importante acceder al archivo TCPIPConfig.h y comentar los servicios que no necesitamos, de esta forma estamos optimizando el uso de la memoria de programa. Por ejemplo, para deshabilitar el DNS, la instrucción debe quedar comentada por medio del operador // //#define STACK_USE_DNS
14
FUNCIONES ESPECIALES DEL STACK Por medio del TCP/IP Configuration Wizard podemos agregar funciones especiales. Por ejemplo, una aplicación sumamente útil es hacer un conversor RS232 – Ethernet: así todos los paquetes que ingresen por el conector de red serán retransmitidos por la UART del PIC y viceversa. De esta forma podemos darle conectividad Ethernet a sistemas que originalmente solo tenían comunicación RS232. Otra función interesante es medir el tiempo de viaje de un paquete entre el cliente y el host, lo que comúnmente denominamos PING. El stack nos devuelve el tiempo de viaje en milisegundos.
Figura 4: Habilitando las funciones especiales Serial to Ethernet Bridge y TCP Performance Test (PING). Vamos ahora a definir el nombre de Host, es decir un nombre con el cual identificar a nuestra placa en la red. Si tenemos habilitado el servicio de DNS podemos asociar un nombre a la placa que será más fácil de recordar que la dirección IP. Por otra parte, como la IP puede ser asignada por el servidor en forma dinámica, resulta conveniente definir un nombre de Host.
15
Figura 5: Dirección MAC por defecto del PIC y nombre de Host . Vinculado estrechamente al nombre de Host se encuentra la dirección MAC. Recordemos que por norma la MAC debe ser unívoca, por lo tanto, al momento de comercializar nuestro desarrollo es necesario adquirir un bloque de direcciones MAC a la IEEE. Existen memorias de Microchip que tienen pregrabada una MAC y que podemos vincular el microcontrolador a través de la interface SPI o I2C. Claro que para hacer pruebas podemos utilizar la MAC por defecto que trae el Stack.
CONFIGURACIÓN DEL WEBSERVER Vamos a definir el nombre de la página principal, es decir aquella que se va a mostrar por defecto, en este caso: index.htm
16
Figura 6: Configuración de la página por defecto, la cantidad de conexiones simultáneas y funciones adicionales. Un parámetro importante es la cantidad de conexiones que vamos a permitir. Esto hace referencia a la cantidad de usuarios que pueden monitorear el sistema simultáneamente. Cómo máximo pueden ser 32, pero debemos considerar parámetros como ancho de banda y estabilidad de la red antes de establecerlo, ya que una excesiva demanda puede deteriorar el rendimiento del sistema. UBICACIÓN DE LA PÁGINA WEB Podemos establecer diferentes ubicaciones para almacenar la página web que verá el usuario final de nuestro webserver. La misma puede estar en la memoria de programa del microcontrolador o en una memoria externa del tipo EEPROM. Si bien vemos en la Figura 7 otras opciones como memoria Flash y sistema FAT, las mencionadas anteriormente son las más representativas ya que determinan si la página está alojada en la memoria del micro o en una memoria externa.
17
Figura 7: Opciones de almacenamiento para la pรกgina web. En los ejemplos de este capitulo vamos a utilizar la memoria externa de Microchip: 25LC1024. Esta memoria es del tipo EEPROM , tiene una capacidad de 1Mbit y se conecta al PIC por SPI. Eligiendo una memoria externa disponemos de toda la memoria de programa para escribir nuestro cรณdigo y alojar el Stack TCP/IP. Bรกsicamente tenemos dos opciones para almacenar la pรกgina web: memoria externa o interna. Debemos decidir por una u otra considerando el costo adicional que significa una memoria EEPROM y por otro lado la consecuente reducciรณn de espacio en memoria de programa.
18
COMPILANDO EL STACK Una vez configurados los parámetros básicos de nuestra aplicación a través del Microchip TCP/IP Configuraton Wizard, estamos en condiciones de compilar el Stack y cargarlo en el PIC.
Figura 8: La última pantalla del asistente: simplemente cliquear en finalizar para aceptar los cambios realizados. Necesitamos, entonces, compilar el Stack, para lo cual abrimos el proyecto TCPIP Demo AppC18.mcp desde el MPLAB y ejecutamos la compilación haciendo click en Build all. Dentro de la carpeta TCPIP Demo App encontramos varios proyectos preparados para utilizar con micros de 8 a 32 bits. Es interesante destacar que los parámetros configurados con el asistente sirven para cualquier proyecto, esto se debe a que sólo se está modificando el archivo de cabecera TCPIPConfig.h. Nótese que seleccionamos el proyecto TCPIP Demo App-C18.mcp ya que vamos a trabajar con un micro de la familia PIC18 (8bits).
19
Figura 9: Proyecto en el MPLAB listo para compilar. Una vez compilado el proyecto, necesitamos un microcontrolador donde cargarlo. Vamos a utilizar una placa comercial denominada MCE WebServer DEV desarrollada por la empresa mcelectronics (www.mcelectronics.com.ar).
20
ACCEDIENDO A LA PÁGINA WEB El Stack, por defecto, habilita el cliente DHCP, por tal motivo podemos conectar la placa a un router con DHCP habilitado (capacidad de asignar direcciones IP) y así obtener conectividad desde una computadora en la misma red.
Figura 10: Página inicial index.htm que se accede colocando la dirección IP asignada por el router. En este caso la IP asignada es 192.168.0.101, vemos sobre la izquierda de la página inicial un menú con las distintas opciones de la placa. Estas opciones son las que habilitamos a través del TCP/IP Configuration Wizard. Por ejemplo: envío de emails, servidor HTTP y servidor seguro, el cual nos permite acceder a una página protegida.
21
Lo que nos interesa en este momento es el recuadro de arriba a la derecha que nos muestra en tiempo real el estado de 8 LEDs y la temperatura enviada desde un sensor que tiene la placa. Podríamos, por ejemplo, monitorear otro led o controlar un relay desde la interface web. Este tipo de interacción, donde una variable reporta o modifica el estado de un puerto, se realiza mediante funciones callback que veremos más adelante. Es interesante destacar que la actualización de los datos es automática y no requiere refrescar la pantalla del navegador. En la sección Configuración, encontramos parámetros como la dirección IP, el default Gateway, la máscara de red, la MAC y el servidor DHCP. Todo esto podemos cambiarlo en tiempo de ejecución, por eso es importante protegerlo con contraseña, ya que una configuración incorrecta dará como resultado la pérdida de conexión. También tenemos la posibilidad de enviar emails desde un formulario web. Para esto se utiliza el protocolo SMTP. Simplemente hay que completar el formulario con el nombre del servidor SMTP, el nombre de usuario y la clave. Por último colocamos la dirección del destinatario y el cuerpo del mensaje. Por defecto se adjunta un archivo csv (se puede abrir con Excel) donde se muestra el estado de los LEDs, los pulsadores y el valor de temperatura. Más adelante vamos a ver el código de este ejemplo. Antes de pasar a la programación del stack, vamos a ver una última pantalla de la interface web. Se trata del envío de variables a través de los métodos GET y POST. Quién esté acostumbrado a programar en PHP sabrá la ventaja que conlleva utilizar este recurso. Por ejemplo, con el método GET podemos enviar una serie de variables junto con la URL. Es lo que habitualmente vemos como: http://192.168.1.101/forms.htm?relay2=on&relay1=off Luego de la dirección IP de nuestra placa está el nombre del formulario que vamos a actualizar, y a continuación del signo de interrogación está el nombre de cada variable y su valor separadas por &. Nótese que estamos actualizando el estado de dos variables (relay1 y relay2) de una sola vez. GET tiene una limitación y es el hecho de que la URL no puede contener más de 1024 bytes. Si necesitamos enviar una mayor cantidad de variables, debemos utilizar el método POST que no tiene restricciones de longitud. Generalmente se suele utilizar POST para actualizar el texto de un LCD.
22
LOS ARCHIVOS PRINCIPALES DEL STACK Como mencionamos anteriormente, es necesario conocer el stack para poder agregar nuestras propias funciones y así lograr un sistema de telemetría y control remoto acorde a nuestras necesidades. Para esto vamos a desarrollar los archivos principales del stack. En la Figura 9 vemos la estructura general en el MPLAB.
Figura 11: Estructura de archivos del Stack. Se distingue la estructura dividida en archivos de cabecera (.h) y el código en los archivos (.c). Los archivos principales son los siguientes: HardwareProfile.h En este archivo simplemente asociamos un puerto con un nombre fácil de recordar, por ejemplo si colocamos un LED en el puerto RF3 del PIC: #define LED_TRIS(TRISFbits.TRISF3) #define LED_IO (PORTFbits.RF3)
23
TCPIPConfig.h Como vimos, se utiliza para habilitar o deshabilitar funciones del stack como DNS, FTP, SNTP, SSL y UART dependiendo de las características de nuestra aplicación y la memoria disponible en el micro. MainDemo.c Es el programa principal, en el archivo MainDemo.c encontramos el mapeo de puertos, la configuración de los registros de la USART, los ADC y la inicialización de la placa. Por ejemplo ADCON0=0x0D; Para seleccionar AN3 como entrada analógica. CustomHTTPApp.c Por último, el cuarto archivo que necesitamos para una aplicación básica es CustomHTTPApp.c, en el cual se encuentran las funciones callback, es decir aquellas que interactúan con la pagina web.
FUNCIONES CALLBACK Echemos un vistazo al archivo CustomHTTPApp.c donde se encuentran las funciones Callback. En este ejemplo vamos a mostrar el estado de un LED en la página web por medio de ON y OFF. La función Callback contiene el nombre y el valor de la variable dinámica ( led ) que va a ser mostrada en la web. Un error común es enviar directamente al buffer Ethernet el estado del led mediante la variable int LED_IO. Hay que tener en cuenta que SOLO SE PUEDEN ENVIAR STRINGS POR ETHERNET, por lo que, en numerosas ocasiones usamos itoa o ftoa para convertir los tipos de dato. Analicemos el código: ROM BYTE ESTADO_LED_UP[] = “ON"; ROM BYTE ESTADO_LED_DOWN[] = “OFF"; void HTTPPrint_led(void) { TCPPutROMString(sktHTTP, (LED_IO?ESTADO_LED_UP:ESTADO_LED_DOWN)); } En este caso, en lugar de usar los conversores de tipo, creamos dos variables auxiliares ESTADO_LED_UP y ESTADO_LED_DOWN para mostrar el estado del led mediante ON y OFF. La función void HTTPPrint_led(void) envía a la página web el valor de la variable dinámica led. Para chequear el estado del puerto RF3 (donde esta mapeado el led) utilizamos la sentencia condicional IF, aquí representada en una línea: LED_IO?ESTADO_LED_UP:ESTADO_LED_DOWN 24
Recordar que anteriormente definimos LED_IO como el estado del puerto RF3. El IF chequea el estado de LED_IO, si el puerto está en 1, entonces la sentencia es verdadera y envía por HTTP, ESTADO_LED_UP, si en cambio está en cero, la sentencia es falsa y envía ESTADO_LED_DOWN. De esta forma tenemos un sistema básico que monitorea una variable y la envía por Ethernet. Ahora debemos diseñar una página web que reciba esta variable y la muestre en el explorador. Programación de la página web Microchip organiza los archivos del sitio web de tal forma de ahorrar espacio. Se trata de no repetir la información, por ejemplo, al pie de todas las páginas aparece la misma leyenda, entonces, utilizamos el archivo footer.inc que será llamado desde cada página, en lugar de escribir el texto nuevamente. Esto permite reducir sensiblemente el tamaño total del sitio. Hay que incluir en el sitio web la variable dinámica led, para esto vamos a modificar status.xml e index.htm. status.xml contiene todas las variables dinámicas que se actualizan (leds, temperatura y pulsadores). Agregamos la línea correspondiente a la nueva variable dinámica: <led>~led~</led> Entre <> se indica el nombre del divisor que se va a utilizar en el index para definir la posición de la variable. Index.html finalmente es el archivo que ve el usuario final. Donde aparezca <“led”> el webserver lo va a reemplazar con ON, OFF según el valor de LED_IO. <span id=”led">?</span>; Es importante destacar que este ejemplo utiliza AJAX para actualizar la información sin tener que apretar F5 en el explorador. Por lo tanto debemos agregar la siguiente sentencia al final del index: document.getElementById(’led').innerHTML = getXMLValue(xmlData, ’led'); Lo que hicimos hasta el momento fue crear una variable dinámica led en el código del Stack y enviarla a la web a través de una función callback, luego configuramos los archivos index.htm y status.xml para visaulizar el estado de la variable en la web.
25
SISTEMA DE ARCHIVOS MPFS Ahora necesitamos cargar la web en la memoria externa 25LC1024. Antes de hacerlo debemos compactar los archivos que componen el sitio mediante la aplicación MPFS (Microchip PIC File System). Esta aplicación se instala con el Stack y se encuentra en la ruta que venimos trabajando. MPFS es el sistema de archivos que utiliza el micro para leer la página web. Una vez que tenemos nuestro sitio terminado con los archivos html, jpg o gif debemos convertirlos al sistema MPFS, para luego, poder cargarlos en el micro o en la memoria externa. Lo que hace internamente este conversor es juntar todos los archivos en uno solo, de hecho, podemos abrir el archivo resultante con el bloc de notas y veremos, ordenado secuencialmente, el contenido de cada archivo que compone el website. La aplicación MPFS.exe convierte el conjunto de archivos que componen la página web a dos formatos posibles: .bin (para cargar el website en la memoria EEPROM externa) .c (para cargar el website en la memoria de programa del PIC) Como mencionamos anteriormente, al cargar la web en la memoria externa, tenemos disponible toda la memoria de programa del PIC para nuestra aplicación.
26
Figura 13: Pantalla principal del MPFS.exe con las opciones necesarias para compactar la web y cargarla en la memoria. El MPFS nos da la opción de transferir la web automáticamente a la memoria externa luego de compactarla. Para esto la placa debe estar conectada a la red y tener cargada la última versión del Stack. Debemos tener en cuenta que cada variable que agreguemos en la web requiere su correspondiente variable en el Stack, por lo tanto es necesario recompilar el stack y cargarlo en el PIC antes de compactar la web y transferirla a la memoria. La secuencia correcta es la siguiente: 1-Modificar el Stack según las necesidades de telemetría requeridas. 2-Agregar las variables dinámicas correspondientes en status.xml e index.htm. 3-Compactar la web con MPFS. 4-Compilar el Stack con el MPLAB. 5-Cargar el stack en el PIC. 6-Transferir la página web a la memoria externa.
27
Tenemos dos alternativas para cargar la web en la memoria externa, una ya la vimos y es a través del MPFS. La segunda opción nos permite cargar la web remotamente a través del explorador web. Es un sistema de transferencia de archivos por medio de HTTP. Debemos ingresar a: http://192.168.1.101/mpfsupload
Figura 14: Servicio para cargar el website remotamente, debemos incluir el archivo .bin resultante de la compactación. Las aplicaciones más seguras no permiten cargar la web de esta forma ya que cualquiera podría ingresar a la dirección mencionada, conociendo solo la IP y modificar nuestra web. En este caso podemos proteger el sistema de carga con contraseña o bien cargar la web en la memoria de programa del PIC. Debemos colocar la menor cantidad de imágenes posibles en la aplicación final, ya que la memoria 25LC1024 posee 1Mbit, es decir 128 Kbytes de espacio. Si nuestra web ocupa más, no se cargará correctamente. Es importante tener en cuenta que al agregar o quitar variables de nuestra web, se modifica el archivo HTTPPrint.h por lo que hay que volver a compilar el Stack antes de cargar la aplicación en el micro.
28
CARGAR LA WEB EN LA MEMORIA INTERNA DEL PIC En aplicaciones que deben ser extremadamente económicas o bien donde la seguridad es una prioridad, podemos optar por almacenar la web en la memoria de programa del microcontrolador. Para esto ejecutamos el MPFS y seleccionamos la opción: C18/C32 Image desde el menú principal.
Figura 15: MPFS configurado para generar un archivo .c Esto generará un archivo .c que debemos agregar al stack para que sea compilado con el resto del código. Por defecto el nombre del archivo es MPFSImg2.c Para agregar la web, es decir el archivo MPFSImg2.c, debemos hacer 2 cosas: Primero comentamos la sentencia #define MPFS_USE_EEPROM dentro del archivo TCPIPConfig.h. De este modo estamos indicando que la web no estará en la memoria EEPROM externa.
29
En segundo lugar, incluimos el archivo MPFSImg2.c en el proyecto. Para lo cual hacemos click con el bot贸n derecho sobre Source Files y seleccionamos Add Files, como se ve en la Figura 16.
Figura 16: C贸mo agregar al proyecto el archivo MPFSImg2.c De esta forma estar铆amos prescindiendo de la memoria EEPROM externa con el consecuente ahorro de dinero y espacio f铆sico en la placa.
30
Ya tenemos la web incluida en el Stack, ahora debemos compilar el proyecto completo y cargarlo en el PIC. Una vez que compilamos, podemos notar que queda mucho menos espacio disponible en la memoria de programa. Una página promedio ocupa cerca del 25% de la memoria de un PIC18F97J60. Este es el PIC que está en la placa MCE WebServer DEV y que vamos a estudiar en detalle en el próximo fascículo. Por lo tanto, en caso de necesitar almacenar la web de esta forma, es crítico reducir la cantidad de imágenes y minimizar su resolución lo más posible.
MICROCHIP WEBPREVIEW Esta aplicación permite visualizar el aspecto que tendrá la página web antes de cargarla en nuestro sistema. Esto resulta útil, ya que de otra forma deberíamos compactar la web y transferirla a la memoria cada vez que modifiquemos algún parámetro estético. El Microchip WebPreview se encuentra dentro de la carpeta del Stack en el menú Inicio.
Figura 17: Pantalla principal de Microchip WebPreview En primer lugar debemos ingresar la ruta del archivo index.htm y la ubicación de la carpeta donde se encuentran las imágenes y demás archivos que componen el sitio: Respectivamente son: C:\Microchip Solutions library\TCPIP Demo App\WebPages2\index.htm C:\Microchip Solutions library\TCPIP Demo App\WebPages2 31
Luego hacemos clic en Preview Page y veremos la página generada por la aplicación en una ventana de Windows.
Figura 18: Página generada con el WebPreview Nótese que las variables, como las que indican el estado de los pulsadores, aparecen con (?), esto es lógico, pues no está la aplicación cargada en el micro y por lo tanto no hay un función callback que devuelva esos valores. Tampoco tenemos posibilidad de interacción con los botones. Si bien el Microchip WebPreview es sumamente útil para visualizar el aspecto de nuestra web, necesariamente debemos compilar el proyecto y grabarlo en el PIC para luego transferir la web a la memoria y poder verificar que todas las funciones callback estén funcionando como esperamos.
32