RobotyPic son proyectos básicos de electrónica con microcontroladores PIC, de aplicación en el mundo de la robótica didáctica, con archivos fuente creados mediante el compilador CCS PIC C COMPILER en lenguajeC.

Servidor Web con PIC18F4550 y ENC28j60

En este proyecto se va a tratar un ejemplo básico de conexión de un PIC 18F4550 a una red ethernet por mediación del enc28j60. El control del PIC se realiza accediendo mediante una dirección IP que mostrará una página web, alojada en la propia memoria del PIC, y accesible con el explorador de internet desde cualquier dispositivo conectado a dicha red.

La web nos mostrará una página principal (\index). Desde ella podremos activar 3 salidas del PIC mediante sendos botones. También podremos enviar textos que veremos representados en un display lcd. Una página secundaria, accesible desde la principal, nos monitorizará las lecturas realizadas por el PIC (el canal analógico AN0 y el estado del bit 0 del puerto E).

Se va a mostrar el ejemplo simulándolo bajo proteus. Para ello, será necesario instalar WinPcap.


A la hora de crear el programa del PIC lo primero es especificar los criterios de configuración elegidos que se van a tener en cuenta a la hora de cargar el stack tcpip y que van a determinar que opciones van a ser utilizadas.

#define STACK_USE_ICMP       1  //Módulo de respuesta ICMP (ping)
#define STACK_USE_ARP        1  //Para solucionar direccionamiento MAC de las IP
#define STACK_USE_TCP        1  //Para enviar paquetes TCP 
#define STACK_USE_HTTP       1  //Uso de las funciones http del stack.
#define STACK_USE_CCS_PICENS 1  //CCS PICENS 18F4620 + ENC28J60
#define STACK_USE_MCPENC     1  //Uso del enc28j60 por el stack (stacktsk.c)
#define STACK_USE_MAC        1  //Uso de la tarjeta de red

También hay que incluir el número de puerto, necesario cuando accedamos a través de internet.

#define   HTTP_SOCKET 80        //Nº de puerto asociado al socket. 

El PIC se comunica con el enc28j60 mediante el bus SPI. Para definir los pines del PIC que van a ser utilizados para este propósito existen 3 posibilidades:

Opción 1.
No definir nada, en cuyo caso se implementará una comunicación SPI por software y se tomará la definición de patillas establecida dentro del archivo enc28j60.c

#define PIN_ENC_MAC_SO  PIN_D7  
#define PIN_ENC_MAC_SI  PIN_D6  
#define PIN_ENC_MAC_CLK PIN_D5
#define PIN_ENC_MAC_CS  PIN_D4
#define PIN_ENC_MAC_RST PIN_D3
#define PIN_ENC_MAC_INT PIN_D2
#define PIN_ENC_MAC_WOL PIN_D1

Opción 2.
Definir todas las patillas para la comunicación SPI, con lo que se implementará una comunicación SPI por software con la definición de patillas elegida. La definición existente dentro del archivo enc28j60.c será en este caso ignorada. Por ejemplo...


#define PIN_ENC_MAC_SO  PIN_C4
#define PIN_ENC_MAC_SI  PIN_C5  
#define PIN_ENC_MAC_CLK PIN_B4  
#define PIN_ENC_MAC_CS  PIN_B5  
#define PIN_ENC_MAC_RST PIN_B6
#define PIN_ENC_MAC_INT PIN_B7   

Opción 3.
Habilitar el uso de SPI por hardware del PIC y definir las patillas ajenas al hardware del módulo SPI (CS, INT y RST). En este caso es imprescindible definir también la patilla SO para que el stack (dentro del archivo enc28j60.c) no habilite el SPI por software. Da igual que patilla SO se defina, la que se deberá cablear será la SO real, así como SI y CLK.

#define ENC_MAC_USE_SPI 1          //Uso del SPI por hardware
#define PIN_ENC_MAC_SO  PIN_B0     //Entrada serie de datos
//#define PIN_ENC_MAC_SI  PIN_C7   //Salida serie de datos(no necesario definir)
//#define PIN_ENC_MAC_CLK PIN_B1   //Señal de reloj  (no necesario definir)
#define PIN_ENC_MAC_CS  PIN_B2     //Chip select
#define PIN_ENC_MAC_RST PIN_B3     //Reset
#define PIN_ENC_MAC_INT PIN_B4     //Interrupción

Una observación. Aunque estamos definiendo también las patillas RST e INT, en este ejemplo, no van a ser cableadas.

Con todas las opciones definidas se puede cargar el stack tcpip.

#include "tcpip/stacktsk.c"      //Carga el stack TCP/IP de Microchip 

La dirección MAC identificará el dispositivo hardware dentro de la red. No puede haber, por tanto, dos dispositivos con la misma dirección MAC conectados a una misma red. 

   MY_MAC_BYTE1=0;
   MY_MAC_BYTE2=2;
   MY_MAC_BYTE3=3;
   MY_MAC_BYTE4=4;
   MY_MAC_BYTE5=5;
   MY_MAC_BYTE6=6;

Esta asignación se ha definido dentro de la función MACAddrInit() a la que accederemos desde la función principal main(), antes de ejecutar las tareas del stack tcpip.

Lo mismo para la función IPAddrInit(). Dentro de la cual se ha especificado cual va a ser la dirección IP de nuestro servidor web, la dirección IP de la puerta de enlace y la máscara de subred. 

   //Elección de la dirección IP. 
   MY_IP_BYTE1=192;
   MY_IP_BYTE2=168;
   MY_IP_BYTE3=1;
   MY_IP_BYTE4=15;
   //Elección de la dirección de puerta de enlace.
   MY_GATE_BYTE1=192;
   MY_GATE_BYTE2=168;
   MY_GATE_BYTE3=1;
   MY_GATE_BYTE4=1;
   //Elección de la máscara de subred. 
   MY_MASK_BYTE1=255;
   MY_MASK_BYTE2=255;
   MY_MASK_BYTE3=255;
   MY_MASK_BYTE4=0;

Antes ejecutar las tareas del stack tcpip hay que inicializarlo:

   StackInit();   //Inicializa el stack

Y posteriormente mantenerlo funcionando mediante un bucle infinito:

   while(TRUE) {
       StackTask();
   }

Con el stack funcionando, cuando apliquemos la ip del servidor web en la barra de direcciones del explorador de internet de otro dispositivo conectado a la misma red, deberá aparecer la página que se encuentra contenida dentro del código del pic. De ello se encarga la función:

int32 http_get_page(char *file_str){}

Definida por el stack, localiza la posición de memoria dentro del PIC donde se encuentra el código correspondiente a la página solicitada. Previamente habremos diseñado la página web con código html y lo habremos introducido dentro del código del PIC como una constante. Tanto la página principal:

const char HTML_INDEX_PAGE[]="  "

Como la página secundaria:


const char HTML_LECTURAS_PAGE[]="  "

Con la página cargada, la aplicación web ya puede interactuar con la aplicación del PIC. Aunque en realidad, recordemos que ambas conviven como parte del código en el propio PIC. Para ello se emplean otras dos funciones igualmente definidas por el stack. 

La función:

void http_exec_cgi(int32 file, char *key, char *val) {}


Recibe los cambios producidos en la aplicación web y los refleja en el código del PIC. Dentro de ella, programaremos  las actuaciones que deben ejecutarse  en función de los cambios producidos en la página web. En nuestro caso, activar 3 salidas o recibir un texto para mostrar sobre el lcd.

Por ejemplo, la parte del código html que crea uno de los botones es:


<FORM METHOD=GET>
<input type=\"submit\" name=\"boton1\" value=\"Botón 1\">
</FORM>

Cuando en la aplicación web se pulsa dicho botón, se envía la información "boton1" por mediación de la variable key. En el código del PIC se detecta el cambio cuando dentro de la función se compara dicha información con ciertas variables preestablecidas. Si la información es coincidente con alguna de ellas, se ejecutará la actuación correspondiente.


   static char boton1_key[]="boton1";
   static char boton2_key[]="boton2";
   static char boton3_key[]="boton3";

   if (stricmp(key,boton1_key)==0) {
      output_toggle(PIN_C0);
   }

La otra función:

int8 http_format_char(int32 file, char id, char *str, int8 max_ret) {}

Informa a la aplicación web del estado de las variables medidas por el PIC. Dicha función ofrece los valores que han de representarse en la página web cuando ésta se carga. Por ejemplo, la parte del código referente a la representación del valor de la lectura del canal analógico:

<P><B>AN: </B>%0 </P>

Mostrará, por mediación de la función anterior, el valor de la variable virtual %0 que corresponderá con la lectura física del canal analógico del PIC.

 case '0':
     set_adc_channel(0);
     delay_us(100);
     AD0=read_adc();
     sprintf(new_str,"0x%X",AD0);
     len=strlen(new_str);
 break;



[+/-] Ver / Ocultar código C PIC (Código principal)


Para hacerlo funcionar, conectamos el PIC a la red ethernet del router. Desde otro dispositivo conectado a la misma red (al router), en la barra de direcciones del explorador, tecleamos la dirección IP que hemos asignado a nuestro servidor web (162.168.1.15). Si todo va bien nos aparecerá la página que hemos cargado en el PIC y desde la que podremos interactuar.


En esta simulación se ha visto como acceder al PIC desde un dispositivo conectado a la red ethernet interna. Si lo que queremos es acceder desde el exterior por internet, en la barra de direcciones del explorador deberemos escribir la dirección IP con la que se identifica nuestro router en internet y el número de puerto (puerto 80). Por ejemplo 87.64.15.102:80 

Previamente, deberemos haber configurado el router de forma que redirija el trafico que le llega desde el exterior hasta el servidor web. En dicha configuración, tendremos que abrir el puerto 80 TCP para la dirección IP del servidor web (192.168.1.15).

Para saber la dirección IP de nuestro router en internet, podemos ayudarnos de muchas páginas que nos la pueden proporcionar. Una de ellas es http://www.cualesmiip.com/


Esquema completo para el montaje real:

Descarga de los archivos del proyecto:




El proyecto contenido en el artículo ha sido diseñado y probado utilizando las siguientes versiones de software:
- Windows xp, windows 7 (32 bits) y windows 8 (64 bits)
- Proteus V7.7 SP2
- CCS PIC C COMPILER v4.104

Artículo relacionado>> Servidor Web PIC18f4620+enc28j60

67 comentarios:

Unknown dijo...

hola cuando kiero compilar el proyecto me da estos errores sabes que puede ser¡¡¡??

>>> Warning 201 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 188(1,1): Assignment inside relational expression
--- Info 300 "C:\Program Files (x86)\PICC\Drivers\string.h" Line 408(7,13): More info: First Declaration of strupr
*** Error 31 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 257(22,23): Identifier is already used in this scope
*** Error 48 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 262(5,6): Expecting a (
*** Error 48 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 262(9,10): Expecting a (
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 263(5,10): Expecting a declaration
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 263(10,11): Expecting a declaration
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 263(12,13): Expecting a declaration

*** Error 48 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 265(15,16): Expecting a (
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 265(20,23): Expecting a declaration
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 265(24,26): Expecting a declaration
*** Error 48 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 265(27,28): Expecting a (
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 265(32,35): Expecting a declaration
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 265(35,36): Expecting a declaration
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 265(37,38): Expecting a declaration
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 266(13,14): Expecting a declaration
*** Error 48 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 266(14,15): Expecting a (
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 266(19,20): Expecting a declaration
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 266(20,23): Expecting a declaration
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 266(24,25): Expecting a declaration
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 266(26,29): Expecting a declaration
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 266(29,30): Expecting a declaration
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 266(30,31): Expecting a declaration
*** Error 48 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 267(5,6): Expecting a (
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 267(8,9): Expecting a declaration
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 268(5,6): Expecting a declaration
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 269(5,11): Expecting a declaration
*** Error 48 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 269(12,13): Expecting a (
*** Error 43 "E:\The Cube Projects\ServidorWeb PIC18F450+ENC28J60\MY\tcpip\helpers.c" Line 270(1,2): Expecting a declaration
35 Errors, 1 Warnings.
Build Failed.

Robotypic dijo...

Prueba a compilarlo con la misma versión. Por descartar cosas.

Unknown dijo...

Buenas noches, en mi caso, yo ejecuto el proteus (ya instalado el winpcap) y me voy a internet con la dirección ip pero la página no se abre, sale un mensaje que dice que no se consigue la página.

Robotypic dijo...

Claudio. No se lo que tienes hecho para darte el problema. Si todo está tal cual en el artículo debe funcionarte sin problemas.

Unknown dijo...

Buenas, si no te es molestia me puedes especificar la vercion del tcpip stack que usastes, o mejor aun donde la puedo bajar, porque he bajado como 5 pero no son la misma que usaste y me da error. saludos

Robotypic dijo...

Orlando, la tienes en el enlace de descarga del proyecto.

Unknown dijo...

temperature does not automatically update. However, when I press any button to perform the function it will be updated. Can you help me ? thank you

Robotypic dijo...

Hoaigo, in this example, to update the temperature you must update all webpage regularly. The web code used in this example, do it.
If you don't want to do it so, you can watch this other example:

http://robotypic.blogspot.com.es/2015/07/ServidorWeb-PIC18f4620-enc28j60.html

Unknown dijo...

Que tal muy buena tarde, baje el proyecto y a la hora de ejecutar Proteus a la hora de hacer la simulación, y poner la IP del web server (la que tiene por default) no me abre ninguna página. Alguna otra configuración que deba hacer con respecto a eso?. Saludos y gracias de antemano.

Robotypic dijo...

Sigue la explicación del artículo. Lo explicado es lo necesario. Nada más.

alerta-wanka dijo...

Amigo muy interesante el articulo. Tengo una duda como podria modificar el programa para que en vez de mandar el dato del conversor analogico pueda enviar y recibir el dato del puerto serial

Robotypic dijo...

Jaime. Consulta el artículo sobre la comunicación serie.

Unknown dijo...

Hola Robotypic.. muy buenos los Proyectos, Felicitaciones... Noce si les molesto con una consulta.. me compre el ENC 28j60 y el Pic, lo grabe e arme el circuito Pero no consigo el 74ls125.. Mi pregunta es si hay una forma de reeplazarlo?.. y Tambien no me funciona la conexion con el proteus :) Por favor espero su respuesta..

Robotypic dijo...

Edwin.
El hecho de usar el 74Ls125 es porque el PIC no detecta los pulsos de 3.3v que ofrece el enc28j60. Puedes emplear cualquier otro componente que te permita pasar esos pulsos de 3.3v a 5v; el 7408, el max232, etc.
Por otro lado, para simularlo con proteus necesitas instalar el WinPcap y probar la conexión desde otro pc diferente al que lo estas simulando.

Unknown dijo...

Excelente artículo sobre comunicaciones en sistemas embebidos. Felicitaciones!

Unknown dijo...

hi i am getting just ONE ERROR after compilation


Error 128 "LCD420PIC18F_RyP.c" Line 57(1,6): A #DEVICE required before this line
C:\Users\Anindi\Desktop\SPIDER WEB\ServidorWeb PIC18F450+ENC28J60\Código PIC\LCD420PIC18F_RyP.o ===> 1 Errors, 0 Warnings.


PLEASE HELP ME WITH THIS

AAA dijo...

Ernesto, El Archivo helpers.c es una versión antigua, lo solucione buscando una más reciente

Quisiera saber si hay alguna configuracion del Router o de la red, que sea necesaria tomar en cuenta?

Robotypic dijo...

AAA, el router hay que configurarlo cuando se quiere acceder desde el exterior de la red, es decir, desde internet. En ese caso, hay que abrir el puerto 80 TCP para la dirección IP del servidor web creado.

AAA dijo...

Tal vez tengo problemas con la IP para simular, ¿debe ser la misma que la de la PC donde estoy simulando?


Robotypic dijo...

AAA. Debes utilizar una Ip para tu servidor web que no emplee ninguno de los otros dispositivos que estén conectados a la misma red.

Unknown dijo...

Tengo problemas al correr la simulacion. Aparece esto.

[COFF]Could not load file'E:\DISEÑO PIC?PROYECTOS EN CURSO PROPIOS\PIC+Ethernet\\Webserver v4.104\\Webserver PIC18F4540+ENC28J60-SPI (completo)\Codigo PIC\PIC Webserver.c'.
[COFF]Could not load file'E:\DISEÑO PIC?PROYECTOS EN CURSO PROPIOS\PIC+Ethernet\\Webserver v4.104\\Webserver PIC18F4540+ENC28J60-SPI (completo)\Codigo PIC\tcpip\en28j60.c'.
[COFF]Could not load file'E:\DISEÑO PIC?PROYECTOS EN CURSO PROPIOS\PIC+Ethernet\\Webserver v4.104\\Webserver PIC18F4540+ENC28J60-SPI (completo)\Codigo PIC\tcpip\tick.c'.
[COFF]Could not load file'E:\DISEÑO PIC?PROYECTOS EN CURSO PROPIOS\PIC+Ethernet\\Webserver v4.104\\Webserver PIC18F4540+ENC28J60-SPI (completo)\Codigo PIC\LCD420PIC18_RyP.c'.
[COFF]Could not load file'E:\DISEÑO PIC?PROYECTOS EN CURSO PROPIOS\PIC+Ethernet\\Webserver v4.104\\Webserver PIC18F4540+ENC28J60-SPI (completo)\Codigo PIC\tcpip\arptsk.c'.
[COFF]Could not load file'E:\DISEÑO PIC?PROYECTOS EN CURSO PROPIOS\PIC+Ethernet\\Webserver v4.104\\Webserver PIC18F4540+ENC28J60-SPI (completo)\Codigo PIC\tcpip\tcp.c'.
[COFF]Could not load file'E:\DISEÑO PIC?PROYECTOS EN CURSO PROPIOS\PIC+Ethernet\\Webserver v4.104\\Webserver PIC18F4540+ENC28J60-SPI (completo)\Codigo PIC\tcpip\http.c'.
[COFF]Could not load file'E:\DISEÑO PIC?PROYECTOS EN CURSO PROPIOS\PIC+Ethernet\\Webserver v4.104\\Webserver PIC18F4540+ENC28J60-SPI (completo)\Codigo PIC\tcpip\stacktsk.c'.
[COFF]Could not load file'E:\DISEÑO PIC?PROYECTOS EN CURSO PROPIOS\PIC+Ethernet\\Webserver v4.104\\Webserver PIC18F4540+ENC28J60-SPI (completo)\Codigo PIC\tcpip\helpers.c'.
[COFF]Could not load file'E:\DISEÑO PIC?PROYECTOS EN CURSO PROPIOS\PIC+Ethernet\\Webserver v4.104\\Webserver PIC18F4540+ENC28J60-SPI (completo)\Codigo PIC\tcpip\arp.c'.
[COFF]Could not load file'E:\DISEÑO PIC?PROYECTOS EN CURSO PROPIOS\PIC+Ethernet\\Webserver v4.104\\Webserver PIC18F4540+ENC28J60-SPI (completo)\Codigo PIC\tcpip\ip.c'.
[COFF]Could not load file'E:\DISEÑO PIC?PROYECTOS EN CURSO PROPIOS\PIC+Ethernet\\Webserver v4.104\\Webserver PIC18F4540+ENC28J60-SPI (completo)\Codigo PIC\tcpip\icmp.c'.
[PIC18]Loaded 30472 program bytes and 0 data bytes.
Logic contention(s) detected on net D5
Logic contention(s) detected on net D7
Logic contention(s) detected on net D6
Logic contention(s) detected on net D4

Robotypic dijo...

Eduardo. Compila el proyecto por completo desde el principio y emplea la versión de ccs que se indica.

Unknown dijo...

Buenas, estimado, el error que me comunica al compilar es que no encuentra el archivo ......../Codigo PIC/Pic WebServer.c, que puede ser??? desde ya muchas gracias y saludos!!!

Unknown dijo...

Te agradesco mucho la pronta respuesta, ahora tengo problemas con el dispositivo virtual. Es decir cuando inicio la simulacion se habilita un nuevo dispositivo que imagino sera la tarjeta Ethernet enc28j60, pero en el administrador de dispositivos aparece el mensaje de: Uninitialized device. con un triangulo de alerta y SMS/MMS message Access con un signo de admiracion.

Robotypic dijo...

Eduardo. Realmente no se lo que debe aparecer en el administrador de dispositivos pero tampoco es importante. El dispositivo virtual es como si conectaras un dispositivo real sin el PC. Lo que se conecta a la red es tu dispositivo virtual, no el PC, aunque hagas uso de él para simularlo.

leorio dijo...

buenas a todos gran proyecto solo que tengo el siguiente error no encuentra el archivo ......../Codigo PIC/Pic WebServer.c, que puede ser??? desde ya muchas gracias y saludos!!!

Unknown dijo...

hola RyP, no hay forma, no me abre la pagina, me dice que esta tardando demasiado, desde ya muchas gracias por tu pronta respuesta

Robotypic dijo...

Edgar.
Si sigues todos los pasos como estan descritos tiene que funcionarte. Está probado como puedes ver.

Unknown dijo...

Entiendo RyP, me parece raro, tengo los mismos soft y seguí los pasos exactamente, igual muy bueno tu trabajo. Saludos!!!

Unknown dijo...

Hola RyP, disculpa por la molestia, el winPcaP basta con tenerlo instalado o hay que hacerlo correr??? desde ya muchas gracias!!!

Unknown dijo...

Aparte el Proteus me dice que no esta corriendo en tiempo real por excesiva carga en el cpu (PIC), a ud. no le paso esto? Gracias!!!

Robotypic dijo...

Edgar.

El winpcap basta con que esté instalado. Por otro lado, cuando el Proteus marca el mensaje que indicas es porque tu Pc tiene pocos recursos, tienes otros programas corriendo simultaneamente, etc. No influye en el funcionamiento aunque puedes notar más lentitud que si fuera un montaje real.

Unknown dijo...

Gracias RyP, probare con PC y no con notebook. Saludos genio.

Unknown dijo...

Hola

Tu tutorial es bueno y funciona ben según la simulación; sin embargo con la gran cantidad de librerias en el codigo, es complejo seguirlo. Apenas estoy aprendiendo el lenguaje C y e intentado ampliarle mas entradas para leer por ejemplo mas pulsadores como lo hace en la entrada RE0. Si quisiera leer mas pulsadores y visualizarlos en la web, por ejemplo leer un pulsador en RE1, RE2, RC4, RC5, RC6, etc ¿Como podría hacer la modificación del código? ya que cuando intente hacer el seguimiento en la FUNCIÓN FORMAT CHAR, aparentemente el valor temrina en %d como se muestra:

break;
case '1':
RE0=bit_test(porte,0);
sprintf(new_str,"%d",RE0);
len=strlen(new_str);
break;
default:
len=0;

Luego lo seguí hasta http_format_char, pero ahí se complica mas ya que todo son símbolos y condiciones que se escapan a mi conocimiento. Me gustaría poder agregarle mas entradas.

podrías compartir eso?

gracias

Robotypic dijo...

Solo tienes que poner tantos "case" como entradas quieras leer y con el mismo formate del la entrada RE0 pero adaptado a las nuevas entradas:

case '2':
RE1=bit_test(porte,1);
sprintf(new_str,"%d",RE1);
len=strlen(new_str);
break;

Previamente declarando el formato de las varibles:
int8 RE1;


Y en el código html añadir las instruciones iguales a la de RE0 adaptadas a las nuevas entradas:

RE1: %2

Unknown dijo...

Hola.Quisiera Saber de donde se actualiza el Archivo helpers.c para la version de CCS 5.1(La ultima version) o solo funciona con CCS 4.1.
Cuando se Simula con Proteus, Hay que Hacerlo desde OTRA PC conectada a la Red o se puede Simular desde la misma PC que se ejecuta el Proteus para Acceder al Servidor Web del PIC.Muchas Gracias.Saludos

Unknown dijo...

Hola cariño
Realmente admiro su blog y proyecto. Lo hice de forma práctica y capaz de comunicarse con el PC PIC.
Estoy frente a un problema. Cada vez que la dirección IP aparece en la pantalla LCD después de algún tiempo del que se conecte con el PC pero algunas veces dirección IP apareció muy eaPrly en la pantalla LCD de lo que nunca conecta con el PC.
¿Qué tengo que hacer para que cada vez que se conecte con PC de éxito
Saludos
waqas

Unknown dijo...

Hi dojo
Please reply why some time pic connect with pc and some time it doesnot. Is there any hardware problem. Plz give me your email address

Unknown dijo...

Hola muy interesante proyecto! Tengo una pregunta, ¿el cable UTP que se utiliza para conectar el módulo ethernet con la pc debe ser de tipo cruzado?

Robotypic dijo...

Hola Dario.

No. No es cruzado.

Unknown dijo...

Gracias! (:

Unknown dijo...

Hola RyP, hay alguna forma de comunicarse al modulo en forma remota con DDNS??? ya sea DynDNS o no-ip??? gracias!!!

Unknown dijo...

Felicitaciones buen proyecto,

Compile el código con las versiones de software mencionadas y funciono con normalidad,adicional pude leer más puertos analógicos (%u) y activar más salidas digitales, pero no he logrado que todo se vea en la misma página principal (index), es decir paso las lecturas de los puertos,pero no se actualizan automaticamente, me podrías dar alguna sugerencia ??

Gracias por la ayuda.

Robotypic dijo...

Wilson. Si amplias las salidas y lecturas con el mismo formato debería mostrarse. Prueba a dar mayor tiempo de refresco a la página.

Unknown dijo...

amigo buen dia, si necesito un programa para un proyecto donde te puedo contactar?

Robotypic dijo...

Hazlo por el formulario de contacto.

Unknown dijo...

Hello, i use crossed cable to connect ENC28j60 to my computer, is it wrong?
I use pic18f4620 and connect Direct Pin to enc28j60, is it wrong too??
pls help me :( i need your ans :D thanks alot, email me if u can :D
nhimspec@gmail.com
help me pls

Unknown dijo...

Hola RobotyPIc,

Gracias por compartir todos estos excelentes tutoriales. Nos ayudan muchisimo a todos.

Como puedes ver en varios comentarios, todas las personas que quieren editar las líneas de tú código, para experimentar incluyendo otras funciones del PIC, al intentar compilar con una versión de CCS distinta a la que tu utilizas en el proyecto, nos marca algún error. ¿Tú puedes intentar compilarlo en una versión más actualizada para que nos ayudes a solucionar el problema?


Gracias por tu tiempo.

Robotypic dijo...

Hola Antonio.

El programa incluye el stack TCP/IP. La versión del stack deberá ser compatible con la versión del compilador. Debeis buscar el stack compatible con vuestras versiones. Lo que no puedo es crear una versión para cada uno de vosotros según vuestros compiladores. Yo os muestro como hacerlo. Las modificaciones que tengáis que hacer para adaptarlo a vuestras necesidades corren a vuestra cuenta.
En cualquier caso, puedes consultar este otro artículo:
http://robotypic.blogspot.com.es/2015/07/ServidorWeb-PIC18f4620-enc28j60.html
Aquí tienes el ejemplo similar creado con una versión más actual del ccs (v5.015), el propio wizard te crea los archivos necesarios.

Unknown dijo...

Qué excelente que aclares nuestras dudas tan rápido! muchas Gracias.

Me he adaptado a tú ejemplo, descargando la versión 4.104 de CCS. Tal como lo muestras compila perfecto y lo puedo editar a gusto, pero tengo un problema:

Al abrir el Chrome y voy a 192.168.1.15 (la ip que tú asignaste para tú ejemplo) con el proteus (7.8 SP2) en PLAY, no logra acceder a la página.

Supongo que es un tema de configuración de la red. Lo he probado desconectado de internet y también conectado vía WIFI sin éxito (He instalado previamente el Winpcap). ¿Qué me sugieres?

Robotypic dijo...

Antonio.
Comienza probando el proyecto del artículo. Debería funcionar. Sino es que algo no has hecho igual.
Después ves haciendo los cambios que desees poco a poco.

Unknown dijo...

Sí, tal como dices eso fue lo primero que hice. De hecho monté en el proteus tu código .hex no el mio, pero no logro hacer que el navegador abra la página.

Unknown dijo...

Solucionado!!!

El problema tal como lo sospechaba estaba en la configuración del puerto.

Me maté configurando tanto el puerto físico cableado como el del adaptador WIFI y nada..... Resulta que me acabo de fijar que cuando se instala el WinpCap, este crea un puerto virtual, quien es el que conectará con proteus... A este puerto es al que debemos acceder en la configuración del adaptador de red y meter en el rango y dominio IP de nuestro PIC.

Ya simula y conecta perfecto... Robotypic muchas gracias...

Saludos.

Unknown dijo...

hola gracias por compartir!, logre replicar tu proyecto e interactar con la simulación desde el navegador donde corro la simulación, sin embargo al hacerlo con el navegador de otro dispositivo de la red local no funciona. que debo configurar para poder lograrlo? y posteriormente acceder desde la ip publica(ya configure el modem).
nota: ya instale el winpcap, el dommninio, ip y puerta de enlace ya los verifique.

Unknown dijo...

Hola tengo un problema pero no va conforme va el codigo ya que lo que quiero hacer es mediante pulsadores se encienda un led y en la pagina aparezca led 1 encendido como puedo hacer eso

Unknown dijo...

tengo otra duda el cable utp que se utiliza debe ser de la norma A o B o tiene que ser normal por ejemplo color por color sin cruzarlo espero su respuesta gracias RyP

Anónimo dijo...

cuando compilo me sale la ventana de compilacion pero en una parte me dice not found y marca una liga y al ultimo una carpeta PIC WEBSERVER. En este caso que hace falta o como creo esta carpeta o archivo

Robotypic dijo...

Hola.
Elimina todos los archivos generados por la compilación que yo entrego y compilalo desde cero. Solo los generados, no los correspondientes a las librerías.

Anónimo dijo...

Para dar de alta la pagina web como le hago, y en caso de que quiera acceder pero desde fuera osea internet no local, que tengo que hacer y si tuvieras una pagina que me ayude a realizarlo te lo agradeceria

Robotypic dijo...

MAN95, en esta misma página lo tienes explicado. Cómo configurar el router para hacer lo explicado dependerá de tu modelo de router.

Claudia dijo...
Este comentario ha sido eliminado por el autor.
Unknown dijo...

Disculpa una duda, que tan factible es usar este codigo para comunicar el modulo con labview? que cambios habria que hacerle?

KKK dijo...

Hi , how many external access point is possible simultaneously ?



Unknown dijo...

hola buenas noches, una duda tuviste que crear una pagina para poder verla y ponerla en el pic(en el codigo)?, gracias..

Jaime Lopez dijo...

Hola a todos !
Estuve tratando de realizar este proyecto y la simulacion me funciono muy bien solo con windows 7 e instalando NPCAP ya no WinCap, por mas que lo intente hacerlo en windows 10 nada mas no me deja conectar el puerto virtual ethernet ( no importa si instale , trate de hacer todo tipo de modificaciones (firewall, y nada, entonces solo tube exito con windows 7 ( no probe con otro mas que windows 7 y windows 10), pero en cuanto a la implementacion fisica no tube exito probablemente mi quemador esta mal, ya que revise todo lo demas y funciona muy bien. Voy a intentar con otro quemador y comentare si tube suerte , saludos y muchas gracias por tu muy buen aporte RobotyPic, espero pronto hacerlo funcionar en físico.

Nicolás8702 dijo...

Hola a todos

Primero que nada una felicitación para el desarrollador detras del proyecto.

Les comento que yo he podido realizar la implementación en físico del proyecto con cambiar la comunicaión SPI a software ya que es de saber que por hardware molesta mucho y mas usando CCS.

Enserio agradezco mucho por haber posteado el proyecto y más aún por compartirlo.

Unknown dijo...

Buen día, tengo un proyecto de enviar datos desde una pic a mas de 5km de distancia y me gustaría saber si este ejemplo me puede servir.

Related Posts Plugin for WordPress, Blogger...

CONTACTA - (Haz referencia del artículo sobre el que trata la consulta o comentario)