martes, 25 de octubre de 2011

PIC & WIFI

Microchip dispone de algunas evaluation board donde podemos utilizar un demo para usar un PIC como servidor HTTP utilizando el PicTail MRF24WB0MA

En este post voy a intentar explicar el procedimiento que yo he seguido para poder usar este PicTail y el firmware proporcionado por Microchip para adaptarlo a un proyecto propio. En el ejemplo descrito se utiliza un PIC 18F4680. También adjunto los archivos que yo utilizo en mi proyecto.

Antes de nada, dentro de la carpeta "C:\Microchip Solutions v2011-07-14\TCPIP\Demo App" (en mi caso) hacemos una copia del proyecto "C18-PICDN2_MRF24WB.mcp" y le ponemos el nombre que queramos, con este nuevo proyecto será con el que trabajemos. Es muy importante trabajar desde la carpeta de Microchip, porque todas las referencias a otros archivos son relativas, asique si abrimos nuestro proyecto desde otra parte es muy probable que de fallos nada mas abrirlo


- Un primer paso podría ser configurar los parámetros de conexión de nuestro dispositivo para que se conecte a nuestra red. Esto se hace en el archivo WF_Config.h, yo he confirmado este paso con éxito en la conexión con una PICDEM.net 2. Los parámetros a cambiar son el SSID y el SECURITY MODE, yo personalmente recomiendo hacer las primeras pruebas sin seguridad como aparece en la imagen.

- Añadir las MACROS que definen el resto de programa. Una de las partes donde se hace este es en el archivo "Hardwareprofile.h", donde incluimos la MACRO que como he dicho, definirá el resto del flujo del programa (En este caso yo he puesto "WIFI PIC18F4680"). Como se puede observar en la imagen, además se incluye un archivo  que se llama "HWP 18F4680.h" que guardaremos en la carpeta "Configs" que se encuentra con el proyecto y sobre el que nosotros vamos a trabajar. Este archivo en principio será una copia del que ya existe por defecto en el proyecto "HWP PICDN2_MRF24WB.h", que dejaremos por si la hemos liado cambiando algo.


El otro archivo donde debemos añadir nuestra MACRO es en el "TCPIPConfig.h" en la parte que hace referencia al _MRF24WD como se muestra en la segunda imagen.
- Seleccionar los #define de funcionamiento, estas directivas preparadas por Microchip permiten a ciertos fragmentos de código compilarse o no. Nosotros vamos a comentar las directivas que no nos interesan, y dejar las que son útiles para crear nuestro servidor HTTP, para ello accedemos al archivo "TCPIP MRF24WB.h" y lo dejaremos como se muestra en la siguiente imagen (puede que haya alguna cosilla de mas habilitada, pero no importa).


 En este proyecto para no añadir mas complicación, vamos a trabajar con la propia memoria de programa del microcontrolador, no es mucho para una web, pero para un hola mundo en la web va de sobra ^_^. Esto quiere decir que hay que deshabilitar el "#define MPFS_USE_EEPROM" y el "#define MPFS_USE_SPI_FLASH " que están en  este archivo.

 En este mismo archivo, vamos a modificar las opciones que definen el funcionamiento del protocolo HTTP que están casi al final de este archivo.Finalmente tenemos la configuración "Compiladora" completada.

Como puedes ver, este archivo es muy importante a la hora de hacer tu propio proyecto si quieres que funcione "a tu antojo".


- Ahora debemos definir la configuración hardware  para adaptarla a nuestro PIC para que no de errores en la compilación dentro del fichero HWP 18F4680.h.Como es un poco largo para meterlo como texto o en una foto, prefiero que lo miréis en los archivos que adjunto al final vereis que todas mis modificaciones están comentadas con "/**" para que se puedan buscar facilmente en todo el proyecto.

Hay que ajustar el timer en primer lugar que esta definido en Hz es importante estar seguros de que lo definimos bien porque los cálculos de los tiempos (muy críticos en este proyecto) los hace el resto del programa a partir de este valor, en mi caso uso 20000000Hz (20Mhz).

Si compilamos, uno de los errores de compilación que nos va a dar, es por causa de una "falta" de precisión por parte de Microchip, ya que considera que siempre vamos a trabajar con PICs que tengan por ejemplo dos puertos SSP haciendo referencia a ellos con un SSP1CON y SSP2CON, cosa que con este micro no tenemos. Lo que hay que hacer es simplemente donde ponga  por ejemplo SSP1CON1 cambiarlo por SSPCON1.

Quiero hacer especial referencia al código que se encuentra entre las directivas:

#if PIC18F4680
...Código
#endif

Donde PIC18F4680 es una constante que he definido en este archivo.h como 0, lo cual sirve para que el código contenido entre estas directivas no sea compilado, que este caso como podéis ver son la parte de la LCD , la EEPROM  y algunos LEDS ya que no queremos usarlas.

- Si compilamos, nos da algunos errores con referencia a algunos variables de LEDs, esto es porque los eliminamos antes, podemos o dejarlos comentados, o meterle un LEDDUMMY (Una variable Dummy) o algo por el estilo,como he hecho yo, de manera que si necesitamos usar alguno de los LEDs cambiamos LEDDUMMY por el que hayamos configurado, esto ya es opción de cada uno. ¡¡Una vez hayamos resuelto todos estos problemas de compilación ya tenemos nuestro programa casi casi listo!!.

- Preparamos la web con el programa MPFS2 que nos proporciona microchip, haciendo referencia a la carpeta donde se encuentra el "index.html", esto nos crea 3 archivos que debemos sustituir en nuestra carpeta del proyecto( .h,.bin,.idx).

7º-  Recompilamos y reprogramamos nuestro proyecto, y estamos listos para acceder a nuestra maravillosa micro pagina web :_D. Si introducimos la dirección http://mchpboard/ (o la IP obtenida por el Micro que puedes ver en la variable AppConfig). Obtendremos algo tan bonito como lo que se muestra en la ultima imagen.

(Todos los archivos del proyecto)








Un modulo muy interesante:
Módulo FlyPort con un 24F de OpenPicUs

21 comentarios:

  1. Hola que tal.


    Pudieran adjuntar el esquematico para saber si tienen algun otro componente ya que no viene declarado en su libreria o simplemente es el pic con el modulo wifi?

    saludos

    PD esta geneal la forma de explicar gracias =)

    ResponderEliminar
  2. Lamentablemente los esquematicos no te los puedo pasar por motivos de privacidad del trabajo, sin embargo te sugiero que le eches un vistazo a esta web: http://www.openpicus.com/site/buy/store

    No es el mismo microcontrolador pero haciendo los correspondientes ajustes de pines, tendràs esta version ;). Como ves es basicamente el Microcontrolador y el modulo Wifi, yo le he adjuntado ademàs una EEPROM externa.

    Espero que te sirva. Cualquier otra cosa no dudes en preguntar.

    ResponderEliminar
  3. Me corrijo, la EEPROM externa no esta incluida en la versiòn publicada

    ResponderEliminar
  4. Gracias no hay problema.

    Ya he checado la version del Openpicus y estaba tratando de realizar la aplicacion con el PIC24, solo que me causa conflictos a la hora de los indef ya que no se mucho de programacion en ese nivel. se me hace demasiado complicado.

    A como lo tienes tu, es exactamente lo que he querido realizar

    De antemano gracias. es un buen sitio espero ver muchos como este

    ResponderEliminar
  5. Otra pregunta en cuestion de armado solamente es el modulo con el microcontrolador?

    ResponderEliminar
  6. Si, fundamentalmente no necesitas màs, porque por ejemplo si no recuerdo mal el modulo Wifi tiene su conversor a 3,3 por ejemplo. Siempre que el modulo que tu tengas sea el de la imagen.

    ResponderEliminar
  7. si claro en estos momentos... y con algo de tiempo libre estoy realizando el armado del circuito... a lo que veo por el programa solo accesamos a la dir. ip y nos tiene k dar la pag como se muestra en la imagen si kisieramos prender un led o mandar un msj a una lcd. ¿ que se tiene k hacer ?. o mejor dicho en k parte del codigo se modifica..

    De antemano muchas gracias. =)

    ResponderEliminar
  8. Uf pues ahora mismo no sabría decirte la verdad, porque no me he peleao mucho con las funciones GET y PUT. Yo estoy intentando hacerlo por protocolo FTP, el cual no tiene implementado el Stack de Microchip (Para Server, para Client si), pero aun me queda un poco para terminarlo.

    Si te puedo decir que en la ayuda de microchip te dan a conocer un ejemplo suyo de como hacer la web controlando unos leds, un potenciómetro, un LCD, es probable que escarbando un poco des con las funciones que lo hacen y puedas ver su funcionamiento. Si has conseguido hacer arrancar la conexión probablemente no tengas mucho problema con eso ;-).

    Siento no poder ser de más ayuda.

    ResponderEliminar
  9. que tal aqui molestando de nuevo tengo armado el pic con el modulo y cuando entra a la funcion de resetear el modulo WiFi entra a esta funcion WF_AssertionFailed en la cual se me queda ahi ciclado....

    puede ser por el armado??... o por el acceso a mi router???.. ya que como esta libre pense que no tendria problemas o que puede ser??

    muchas gracias
    atte
    JL.

    ResponderEliminar
  10. Perdona la tardanza en contestar pero estos dias tengo un poco de lio con las citas familiares, a ver si cuando pase este tiempo te miro eso un poco, porque creo recordar que yo también tuve problemillas, pero ahora no recuerdo exactamente que era.

    ResponderEliminar
  11. ok esta bn no hay problema... estare buscando el error que pudiera tener...
    de antemano gracias

    ResponderEliminar
  12. no he estado intentando probar con otras redes. pero en realidad no se en que parte del codigo debo especificar la red a la cual debe enlazar tienes alguna idea??...
    ya que se queda ciclado en la funcion stackinit();

    ResponderEliminar
  13. Hola, Te diré que 'mas o menos' entendí tu procedimiento... Yo ando también queriendo conectar dos PIC18F4550 y una PC con WIFI. Y puesto a que no conozco tan a fondo de esto como al parecer tu sí, pues me estanqué! Jajajaja. Pero me topo con tu blog, y veo que tu por lo menos sí pudiste configurarlo. ¿Ya no le seguiste con tu proyecto, Enviaste datos o algo?

    ResponderEliminar
  14. El proyecto lo deje, xo como se ve en la ultima foto, con este proyecto, podias conectarte a una web cargada en la memoria interna del PIC. Es decir, el PIC hacia de servidor. Animo con tu proyecto!! espero que este te ayude.

    ResponderEliminar
  15. Hola amigo

    Primero que nada pues felicitarte por tu trabajo y esfuerzo y pues quería consultarte con una serie de dudas. Tengo una tarjeta de Mikroelektronica que utiliza el mismo módulo (MRF24wb0ma), y bueno lo que pretendo realizar es la comunicacion entre 2 pics... lo que quiero es enviar y recibir datos... entre ambos Pics... honestamente poseeo pocos conocimientos del protocolo del WiFi... y esa era mi intención... empezar a conocerlo.. sin embargo los ejemplos que encuentro en Internet estan muy sofisticados para la pequeña aplicacion que quiero, repito unicamente quiero enviar y recibir datos entre 2 Pics.... dado esto voy a empezar a realiza los pasos que aqui sugieres y pues me gustaria si me pudieras dar algunos Tips... de los problemas que me podria encontrar o que me pueda ayudar a hacer este envio de datos... de antemano Gracias :)

    ResponderEliminar
  16. Si tienes dificultad para leer los códigos de Microchip, cosa que es totalmente entendible, a mi me costo lo suyo entender PARTE del código. Te recomiendo que le eches un vistazo a la plataforma OpenPicUs que utilizan este mismo módulo y han desarrollado su sistema con base a lo que proporcionaba microchip, con una interfaz mucho más atractiva y sencilla de utilizar.

    ResponderEliminar
  17. Hola Guillermo, ¡excelente trabajo! felicidades, oye crees que puedas incluir en tu código de descarga la versión "V. 0.07 -- Conexion con pagina web" Gracias por ¡compartir!

    ResponderEliminar
  18. Hola Guillermo, me encanta tu proyecto, tengo un proyecto montado con un pic 18f4550 uso casi todos los puertos, colabórame diciéndome cómo genero la comunicación de todos esos puertos con el módulo wifi.

    ResponderEliminar
  19. PIC firmware for Wifly RN-XV modem configuration without Wifly library and

    with front-end: https://dl.dropboxusercontent.com/u/101922388/WiflySanUSB.zip

    ResponderEliminar
  20. PIC firmware for Wifly RN-XV modem configuration without Wifly library and

    with front-end: https://dl.dropboxusercontent.com/u/101922388/WiflySanUSB.zip

    ResponderEliminar