CURSO DE PROGRAMACIÓN NDEL MÓDULO Ó SITEPLAYER SP1 I C A M 38 A R G Quinto capítulo. O R P
Curso de programación y utilización del módulo SitePlayer TM SP1. El integrado que incorpora constituye un auténtico Web Server que permite interactuar con cualquier dispositivo electrónico a través de una página de Internet absolutamente normal. El objetivo del presente Curso es dar a conocer la técnica de programación del módulo a través de diversos ejemplos prácticos que utilizan la red para comunicar con diversos dispositivos remotos.
RESISTOR
por Roberto Nogarotto
P
roseguimos con el análisis de los programas preparados para la demoboard FT497K. Recuérdese que conviene reunir todos los programas en un directorio específico.
Programa Demo 4 Este programa pretende mostrar cómo enviar informaciones desde una página web al módulo SitePlayer y cómo transferirlas al microcontrolador PIC. Abriendo el archivo index-htm con un buscador (como Explorer o Netscape) se observa que la página web contiene dos casillas
de selección, correspondientes a Led1 On y Led2 Off, así como un
pulsador de Enter. Cada vez que se acciona este pulsador, el Led1 de la
38-45Curso Site Player
22/8/05
14:04
Página 39
DEMO 4 Ejemplo de gestión de una salida digital: la demo permite encender y apagar el led LD1.
DEMO 4: DEFINICIONES ;DEMO4.SPD ;DEFINITIONS $Devicename “Futura elettronica Demo4” $DHCP $DHC P off $DownloadPassword “” $SitePassword “” $InitialIP “192.168.0.250” $PostIRQ on $Sitefile “C:\Programmi\SitePlayer\demoboard\demo4\demo4.spb” $Sitepath “C:\Programmi\SitePlayer\demoboard\demo4\root” ;OBJECTS org 05h LED db 0 demoboard se enciende o apaga según qué casilla de selección esté activada. Es más: cuando se activa este pulsador se abre una nueva ventana desde la cual puede volverse a la ventana principal clicando sobre el link correspondiente. Vamos a analizar con cierto detalle los archivos que se utilizan con este programa. El primero de ellos es index.htm, cuyo listado se muestra en la página siguiente. Como siempre, para no perdernos en la “selva”
html, hemos aislado la parte que ejecuta la función que interesa, que es el envío de datos en respuesta al accionamiento del pulsador: El mecanismo de envío de los datos se basa en la utilización de una estructura específica del lenguaje HTML llamada FORM. Como puede puede verse, todo el bloque que nos interesa está contenido entre un . Normalmente, la directiva action especifica a dónde deben
enviarse los datos, mientras que la directiva method, que puede valer “get” (como en este caso) o “post”, se refiere al tipo de elaboración de los datos a enviar. Con method=get se indica que los datos a enviar se situarán tras la dirección, que en este caso se representa por el nombre del archivo fi.spi. Contrariamente, los datos que se han de enviar al módulo se especifican mediante algunos elementos de form. En el presente caso hemos utilizado un elemento de selección denominado input type “radio”. Se observa que se ha dado el mismo nombre a dos elementos (name=LED). Si se selecciona el primero, este elemento valdrá 1; por el contrario, si se selecicona en segundo, el elemento pasará a valer 2. Aparece después un último elemento definido por input type=”subit”, que representa el pulsador de envío de los datos. En resumen: cada vez que se acciona el pulsador ENTER, los datos correspondientes a las casillas de selección se envían con el nombre de archivo fi.spi al módulo SitePlayer, que los asigna al objeto definido con el mismo nombre. En el caso que nos ocupa se envía el valor del objeto LED, que se encuentra definido en el archivo de definiciones demo4.spd. El
‘Comunicazión con el Site Player SYMBOL SYMBO L TX23 TX2322 = PORTA.2 PORTA.2 SYMBOL SYMBO L RX232 = PORT PORTA.5 A.5 ‘Interrupt dal Site Player SYMBOL SYM BOL INT INTSP SP = POR PORT TA.4 ‘Definición I/O ADCON1=%00000100 ADCON0=%10000001 OUTP OU TPUT UT LE LED1 D1 OUTP OU TPUT UT LE LED2 D2 OUTP OU TPUT UT LE LED3 D3 OUTP OU TPUT UT LE LED4 D4 OUTP OU TPUT UT LE LED5 D5 OUTP OU TPUT UT LE LED6 D6
‘Dip INPUT INPU T INPU IN PUT T INPU IN PUT T INPU IN PUT T INPU IN PUT T INPU IN PUT T INPU IN PUT T INPU IN PUT T
DIP1 DIP1 DIP2 DI P2 DIP3 DI P3 DIP4 DI P4 DIP5 DI P5 DIP6 DI P6 DIP7 DI P7 DIP8 DI P8
‘Portb con los pull up internos OPTION_REG.7 = 0 INPU IN PUT T Po Port rta. a.00 INPU IN PUT T Po Port rta. a.11 INP NPU UT INTS TSP P START: Gosub SEND20 TEMP TEM P= 0 Pause 100 START0: ASM START00 BTFSC Porta.4 Goto START00 ENDASM INDIRIZZO = 5 Gosub SENDREADREQUE SENDREADREQUEST ST Pauseus 50 Gosub READDATO If FLAGOK = 1 then If DATOIN = 1 then LED1 = 1 Endif If DATOIN = 2 then LED1 = 0 Endif Endif Pause 100 Goto START0 ‘Rutina de envío de 20 bytes 0 para inicialización SEND20: For TEMP TEMP = 1 to 20
Serout TX232,T9600,[0] Pause 5 Next TEMP Return ‘Rutina de escritura de un byte ‘Invia : Comando di write (128), INDIRIZZO, DATOOUT WRITEDATO: Pause 10 Serout TX232,T9600,[128] Pause 5 Serout TX232,T9600,[INDIRIZZO] Pause 5 Serout TX232,T9600,[DATOOUT] Pause 20 Return ‘Rutina de orden de lectura de un byte ‘Enviar: Orden de read (192), INDIRIZZO SENDREADREQUEST: Pause 10 Serout TX232,T9600,[192] Pause 5 Serout TX232,T9600,[INDIRIZZO] Return ‘Rutina de lectura de un byte (tras haver enviado ‘SENDREADREQUEST ‘En salida: DATOIN, FLAGOK = 1 si tiene buen fin la ‘lectura, si no, 0 si transcurre el timeout (300 mseg) READDATO: FLAGOK = 0 Pauseus 100 Serin RX232,T9600,300,READDATO1,D ATOIN FLAGOK = 1 Return READDATO1: FLAGOK = 0 Return
N Ó I C A M 41 A R G O R P RESISTOR
38-45Curso Site Player
22/8/05
14:04
Página 42
DEMO 5 Ejemplo de gestión de una salida digital: la demo permite encender y apagar el led LD1.
N Ó I C A M 42 A R G O R P
DEMO 5: DEFINICIONES
RESISTOR
;DEMO5.SPD ;DEFINITIONS $Devicename “Futura elettronica Demo5” $DHCP off $DownloadPassword “” $SitePassword “” $InitialIP “192.168.0.250” $PostIRQ on $Sitefile “C:\Programmi\SitePlayer\demoboard\demo5\demo5.spb” $Sitepath “C:\Programmi\SitePlayer\demoboard\demo5\root” ;OBJECTS org 05h LED db 0
archivo fi.spd también contiene el nombre de la página html que se envía al buscador, que este caso hemos denominado risposta.htm. Esta es la página web que se visualiza cada vez que se envían los datos al módulo SitePlayer accionando el pulsador ENTER, y contiene el link a clicar para volver a la página principal. Una vez conocido cómo pueden enviarse los datos al módulo SitePlayer a través de una página web, pasamos a analizar el programa desde el
lado del PIC, que se incluye en el recuadro Demo4, Listado Basic. Dejando aparte la descripción de las inicializaciones, accedamos al corazón del programa, que se extiende a partir de la etiqueta STA START0. RT0. Se observa inmediatamente la introducción de la directiva ASM, que permite insertar instrucciones en Assembler en el interior del programa escrito en Basic. El porqué de utilizar Assembler es que el impulso generado por el módulo SitePlayer por su patilla 11, conectado a la puer-
ta RA4 del PIC, sólo dura 5 microsegundos. Dado que cada instrucción del PIC en Assembler dura r ciclos de reloj, cada instrucción precisa de 1 microsegundo para ser ejecutada. Escribiendo en Basic las instrucciones necesarias para detectar la presencia de este impulso, existirçia el riesgo de no detectarlo a su llegada y, por tanto, de no poder actualizar correctamente el encendido y apagado del led LD1. El pequeño bucle en Assembler que tantea el estado de RA4 dura 3 microsegundos, lo que hace prácticamente imposible que el programa no contemple la posible presencia de un impulso sobre RA4. Al detectar la presencia de este impulso, el programa activa el procedimiento de lectura de un dato en el SitePlayer.. Ante todo debe enviarse SitePlayer un comando para que se proceda a la lectura, lo que tiene lugar desde la rutina SENDREADREQUEST, que envía el comando de lectura (192) y la dirección de la célula de memoria que se desea leer. Acto seguido el SitePlayer debería responder enviando el contenido de la célula de memoria en cuestión, cosa de la que se ocupa la rutina READDATO, que permanece en espera durante 300 milisegundos a contar desde la llegada de un dato
;File DEMO5.BAS TEMP DATOIN DA TOIN DATOOUT INDIRIZZO FLAGOK TEMPER TEM PERA ATUR TURA A TRIMMER
var var var var var var var
byte byte byte byte bit byte byte byte
Include “modedefs.bas”
N Ó I C A M 44 A R G O R P RESISTOR
‘LED SYMBOL SYMBO L SYMBOL SYMBO L SYMBOL SYMBO L SYMBOL SYMBO L SYMBOL SYMBO L SYMBOL SYMBO L SYMBOL SYMBO L SYMBOL SYMBO L
LED1 = PORT PORTC.0 C.0 LED2 = PORT PORTC.1 C.1 LED3 = PORT PORTC.2 C.2 LED4 = PORT PORTC.3 C.3 LED5 = PORT PORTC.4 C.4 LED6 = PORT PORTC.5 C.5 LED7 = PORT PORTC.6 C.6 LED8 = PORT PORTC.7 C.7
‘DIP SYMBOL SYMBO L SYMBOL SYMBO L SYMBOL SYMBO L SYMBOL SYMBO L SYMBOL SYMBO L SYMBOL SYMBO L SYMBOL SYMBO L SYMBOL SYMBO L
‘Comunicación con el Site Player SYMBOL SYMBO L TX232 = PORT PORTA.2 A.2 SYMBOL SYMBO L RX232 = PORT PORTA.5 ‘Interrupt dal Site Player SYMBOL SYM BOL INT INTSP SP = POR PORT TA.4 ‘Definición I/O ADCON1=%00000100 ADCON0=%10000001 OUTP OU TPUT UT LE LED1 D1 OUTP OU TPUT UT LE LED2 D2 OUTP OU TPUT UT LE LED3 D3 OUTP OU TPUT UT LE LED4 D4 OUTP OU TPUT UT LE LED5 D5 OUTP OU TPUT UT LE LED6 D6 OUTP OU TPUT UT LE LED7 D7 OUTP OU TPUT UT LE LED8 D8 OUTPU OU TPUT T TX2 TX232 32 INP NPU UT RX RX23 2322 ‘
Dip
INPUT INPU T INPU IN PUT T INPU IN PUT T INPU IN PUT T INPU IN PUT T INPU IN PUT T INPU IN PUT T INPU IN PUT T
DIP1 DIP1 DIP2 DI P2 DIP3 DI P3 DIP4 DI P4 DIP5 DI P5 DIP6 DI P6 DIP7 DI P7 DIP8 DI P8
‘Portb con los pull up internos OPTION_REG.7 = 0 INPU IN PUT T Po Port rta. a.00 INPU IN PUT T Po Port rta. a.11 INP NPU UT INTS TSP P
START: Gosub SEND20 TEMP TEM P= 0 Pause 100 START0: ASM START00 BTFSC Porta.4 Goto START00 ENDASM INDIRIZZO = 5 Gosub SENDREADREQU SENDREADREQUEST EST Pauseus 50 Gosub READDATO If FLAGOK = 1 then If DATOIN = 0 then LED1 = 0 Endif If DATOIN = 1 then LED1 = 1 Endif Endif Pause 100 Goto START0 ‘****************************************** ‘Rutina de envío de 20 bytes 0 para inicialización SEND20: For TEMP TEMP = 1 to 20 Serout TX232,T9600,[0] Pause 5 Next TEMP Return ‘Rutina de escritura de un byte ‘Envíar : Orden de escritura (128), INDIRIZZO, DATOOUT WRITEDATO: Pause 10 Serout TX232,T9600,[128] Pause 5 Serout TX232,T9600,[INDIRI TX232,T9600,[INDIRIZZO] ZZO] Pause 5 Serout TX232,T9600,[DATOOUT] Pause 20 Return ‘Rutina de pregunta de ledtura de un byte ‘Enviar: Orden de lectura (192), INDIRIZZO SENDREADREQUEST: Pause 10 Serout TX232,T9600,[192] Pause 5 Serout TX232,T9600,[INDIRI TX232,T9600,[INDIRIZZO] ZZO] Return ‘Rutina de lectura de un byte (tras haber enviado ‘SENDREADREQUEST ‘En la salida: DATOIN, FLAGOK = 1 si la lectura ha tenido buen fiin; ‘si no, 0 si ha transcurrido transcurrido el timeout (300 mseg) READDATO: FLAGOK = 0 Pauseus 100 Serin RX232,T9600,300,READDATO1,DATOIN FLAGOK = 1 Return READDATO1: FLAGOK = 0 Return RADDATO1:
38-45Curso Site Player
22/8/05
14:04
por la línea serie. Cuando llega este dato, se coloca en la variable DATOIN y la variable FLAGOK pasa a 1: al volver el programa al programa principal, esto señalará la presencia de un dato válido. Contrariamente, una vez transcurridos los 300 milisegundos la subrutina retorna al programa sin haber activado FLAGOK. El programa principal encuentra FLAGOK a 1 y enciende o apaga el led LD1 según el valor de DATOIN. Esta variable puede valer 1 ó 2, que eran los dos posibles valores previstos en la página web para los elementos input type=”radio”.
Programa Demo 5 Con este programa se intenta ver cómo transmitir otra información adicional de una página web al módulo SitePlayer, aunque utilizando una técnica diferente de la que se vió al desarrollar en Demo4. Si visualizamos el archivo index.htm de la Demo5 con un buscador, comprobaremos que esta ventana contiene una sola casilla para puntear.. Si no se activa la casilla de puntear LED1 ON y se acciona el pulsador ENTER, se apaga el Led 1 de la demoboard. Contrariamente, activan-
Página 45
1 ON
do la casilla y accionando ENTER, se enciende el led. A primera vista, esta Demo puede parecer muy similar a la anterior. Pero en el objeto html hay una diferencia sustancial que obliga a dar un pequeño rodeo: en realidad, los check boxes (denominación original de las casillas a puntear) sólo dan paso al envío de datos cuando están seleccionadas. Escribiendo el código html del archivo index.htm e insertando normalmente la check box se observará que, al accionar el pulsador ENTER, sólo se procede al envío de los datos cuando se ha seleccionado previamente la casilla, encendiendo el led. Pero con este procedimiento nunca podría apagarse el led, ni siquiera pulsando ENTER. La solución arbitrada en este caso es la inserción de un campo escondido (hidden), el cual se envía cada vez que se pulsa ENTER. Así, cuando no se ha seleccionado la check box se enviará un solo dato y cuando lo esté se enviarán dos, que
serán el campo escondido y el valor del check box. Por tanto, será el software del microcontrolador el que deba interpretar los datos de llegada y distinguir los diversos casos posibles. En esta página se reproduce el código completo del archivo index: la parte que nos interesa ahora es: Como puede observarse, hemos definido un elemento del tipo “hidden” cuyo valor es 0, y una check box cuyo valor es 1 cuando está seleccionada. Ambas se llaman “LED”, lo que permite utilizar un solo objeto en la definición de los objetos del SitePlayer. En la práctica, si no se ha seleccionado al check box, en cuyo caso sólo se envía el campo escondido, que es 0, por lo que LED valdrá 0. Si, por el contrario, se ha seleccionado la casilla, primeramente LED será puesto a 0 y luego a 1, valor en que quedará fijado. El archivo de definiciones y el archivo a insertar en el PIC se reproducen en estas páginas.
DISPONIBILIDAD DEL MATERIAL El módulo SitePlayer está disponible montado y verificado (cód. SP1) al precio de Eur 42,00: el conjunto híbrido resultante implementa un Web Server, un controlador Ethernet 10baseT, una memoria Flash para almacenar las páginas Web y un dispositivo de interfaz se rie. Para mejorar el aprendizaje aprendizaje del SitePlayer se dispone dispone del circuito demoboard/programador en kit (cód. FT497K) al precio de Eur 48,00. El kit incluye la placa de circuito imprso taladrada y serigrafiada, serigrafiada, un PIC16F876, 8 leds, 1 dip-switch de 8 polos, 1 trimmer, 1 sensor de temperatura, salida PWM, salida analógica, conector Ethernet, conector para programación “in-circuit” del PIC. El kit comprende todos los componentes y los listados de demostración a nivel fuente (fuente Basic para PIC; páginas HTML; archivos de definición SPD), etc. El kit no comprende el módulo SitePlayer, el alimentador de red y el programador del PIC (cód. FT386K, Eur 86,00). Los precios incluyen el IV IVA. A.