viernes, 15 de junio de 2012

Comunicación Ethernet con PIC. El stack TCPIP

Hace un par de entradas, os introducía en el mundo de las comunicaciones ethernet con microcontroladores. Os hablé de las distintas opciones de hardware que había en el mercado (micros con ethernet embebido, o dispositivos exteriores a los micros). Os nombré algo relacionado con la pila TCPIP que nos proporciona microchip, y e eso lo que hoy vamos a ver en profundidad.
Es evidente que cualquier persona es capaz de crear un interfaz para manejar la comunicación ethernet y cualquier otro tipo de periférico o protocolo, pero es mucho más sencillo utilizar librerías que nos faciliten el trabajo, y hagan que programar no se convierta en una tarea tediosa y lenta. La pila TCPIP no es más que un conjunto de librerías que nos facilitan mucho la tarea de, en nuestro caso, comunicarnos con el ENC28J60. La pila TCPIP incorpora librerías para trabajar en todas las capas del protocolo ethernet, tanto en la capa física (MAC), en las capas de transporte de datos (TCP y UDP), capas donde diseñamos nuestras aplicaciones (HTTP, FTP…), y por si fuera poco, también gestiona las direcciones IP.
Es decir, nosotros simplemente le decimos que servicio o servicios queremos activar, y ella se encarga de inicializarlo, y después, de gestionarlo. Para decirle que servicios queremos o no queremos habilitar, lo cual reducirá el espacio que ocupa nuestro código, existe una aplicación, que se instala con las Aplication Libraries, que se llama TCPIP Configuration wizard.
image
El archivo que debemos darle para que lo modifique, si habeis empaquetado el proyecto como os comenté en la entrada anterior, C18-PIC18EX_ENC28\Microchip Solutions v2012-04-03\TCPIP\Demo App\Configs\TCPIP ENC28.h, en el cual irá comentando o descomentando las líneas correspondientes a lo servicios que queramos, o no, y también podremos cambiar la dirección MAC de nuestro dispositivo, la ip preconfigurada, puerta de enlace y demás parámetros que veréis. Otra cosa interesante que configuramos desde esta aplicación, es donde queremos almacenar nuestra página web, las posibilidades son en una memoria externa, o en la memoria interna. La elección dependerá de la capacidad de nuestro microcontrolador, en mi caso, tengo 128k de memoria, por lo que puedo perfectamente almacenar la página en la memoria interna. En caso de que el micro tenga poca memoria (<64k), deberemos plantearnos la otra opción, o aligerar lo más que podamos la pila TCPIP.
Aun así, deberemos abrir el archivo TCPIP ENC28.h para decirle nosotros si queremos que la placa tenga una ip fija, o por el contrario queremos que nuestro router le asigne una por DHCP.
Una vez configurada la pila, si utilizamos uno de los microcontroladores para los cuales está hecho el programa principal, ya podemos programar el micro, en caso contrario deberemos hacer más modificaciones.
En mi caso, no utilizo uno de los micros que vienen por defecto para esta demo, pero tengo la suerte que si que tengo uno que es de la misma familia, en concreto, yo voy a utilizar el PIC18F6723, por lo que los cambios que realizo en el programa son pocos, por ejemplo, en las configuraciones iniciales del hardware_profile (HWP PIC18EX_ENC28.h), he eliminado todas las relativas a los otros microcontroladores, y me he quedado con las del PIC18f8823, que son las mismas que para el mío. En ese mismo archivo podéis definir donde están situados los pines de la comunicación SPI, los pines de comunicación con la memoria, en caso de que queramos poner la página en una memoria externa, …
Si vamos a almacenar la página web en la memoria interna, para que el linker pueda hacer bien su trabajo, debemos crear una página y añadirla al proyecto. En otra entrada os explicaré como se crean las página, pero para esta primera prueba vamos a coger la que nos da microchip en el stack. El archivo .c de la página lo encontráis en la carpeta de instalación donde están todos los proyectos TCPIP. El archivo se llama MPSFImg2.c, simplemente añadimos este archivo a nuestro proyecto.
Una vez hechos los cambios que os he comentado, no queda más que conectar nuestra placa, con nuestra tarjeta con el ENC28J60, y este al puerto ethernet del PC. para esta primera prueba, he desabilitado el Auto_IP y el DHCP, ya que voy a conectarla a mi PC. Aquí teneis el resultado.
ping pic
Como veis hago PING desde mi ordenador a la dirección que viene por defecto en el archivo de configuración y obtengo respuesta, por lo que nuestra placa está funcionando bien. A continuación, y para probar la pagina que nos ofrece microchip, he conectado 2 leds a los puertos RD0 y RD1. La función del les RD0 es avisarnos de que todo funciona bien parpadeando, y la del RD1 es ver si realmente podemos comandar los pines del PC desde nuestra pagina web.
Hay que decir que esto es más fácil contarlo que hacerlo, aunque con este PIC no he tenido problemas, tengo bastantes para hacerlo funcionar en un PIC18F4685, aunque no desespero y espero mostrároslo de aquí pronto. En las próximas entradas explicaré como crear páginas web en el formato MPFS, y la función del POST.
Siento no haber explicado a fondo el stack tcpip, pero he preferido verlo funcionando para luego ya adentrarme en como funciona, aun así en internet tenéis mucha documentación referente al stack y a sus instrucciones básicas, como por ejemplo en la hoja de aplicación AN833, la cual habla del stack.
Si tenéis alguna duda que os pueda resolver no dudeis en dejar un comentario.

10 comentarios:

  1. HOLA AMIGO QUE TAL MUY BUEN POST TE FELICITO...
    E COMPRADO UNA PLACA CON EL PIC 18F97J60
    PUES Y NO LOGRO HACERLO FUNCIONAR
    ME GUSTARIA QUE ME ECHES UNA MANO TE VOY A PAGAR OVIAMENTE POR TU TIEMPO; ES PARA UN PROYECTO EN MI UNIVERSIDAD
    MI CORREO ES riqlin@hotmail.com

    ResponderEliminar
    Respuestas
    1. disculpa no habia leido este comentario!! dime que es lo que necesitas exactamente.

      Eliminar
    2. Hola buenas noches disculpa he visto tu post y me parece muy interesante y mas cuando mi trabajo de grado tiene algo que ver con dicha aplicacion yo compre una tarjeta de ENC28J60 del fabricante de olimex y el pic es un 18f4550 sin embargo no lo logro hacer funcionar . Y estoy muy frustrada y mi fecha de entrega es a finales de junio me gustaria hacer este ejemplo aunque sea del ping para comprobar que estoy en buen camino .Pero hago el ping utilizando el ejemplo de ethernet 11 pero me dice que la pc no puede acceder al host de la tarjeta cuyo ip es de 192.168.1.111, o luego me dice a veces que el tiempo de espera esta agotado. No se que puede suceder por fa me podrias ayuda .Ademas reconoce la red pero dice que no hay paquetes recibidos

      Eliminar
    3. Hola! que pila TCPIP estás utilizando? la de microchip? o la de CCS?

      Un saludo!!

      Eliminar
  2. Hola, yo uso PIC18F4550 y C18 es comiplador.

    cómo utilizar el servidor web para PIC18F4550 y MPLAB C18?

    ResponderEliminar
    Respuestas
    1. http://mipsandchips.blogspot.com.es/2013/02/servidor-web-en-18f4550.html
      en esta entrada explico que el stack qyue yo he utilizado y modificado no cabe en un 18f4550. Gracias por pasarte!

      Pablo.

      Eliminar
  3. Hola, me mudé a otro PIC.
      Trasladado a PIC 18F4620.
    ¿Cómo puedo descargar el simplificada proyecto? Para el uso con esta PIC

    ResponderEliminar
    Respuestas
    1. Bueno ese tiene mas memoria pero dista todavia del que yo utilizo pero bueno es uno de los que recomiendan por los foros de microchip. En ese caso, el pic que utilizas lleva el mismo PLL que el 4685, y al no llevar USB los pines del SPI también son iguales, así que en principio cambiando simplemente el micro debería funcionar tal cual está el programa. Espero que puedas hacerlo funcionar!! estaría bien tener dos opciones diferentes de PIC18 probadas.
      Un saludo.

      Pablo.

      Eliminar
  4. donde puedo descargar el proyecto que utiliza Pablo? PIC18F4620
    ¡gracias

    ResponderEliminar
    Respuestas
    1. los tienes en esta entrada http://mipsandchips.blogspot.com.es/2012/11/servidor-web-desde-cero-archivos.html

      Un saludo

      Eliminar