modo1bibing.us.es/proyectos/abreproy/50027/fichero/pfc+ivan...localizador gps-gsm iván rodríguez...

26
2.5.2. MODO1: Consola de Datos 2.5.2.1. Introducción 2.5.2.2. Capturando el NMEA GPRMC 2.5.2.3. Extrayendo Campos 2.5.2.4. Mostrando Campos 2.5.2.5. Comunicación con el móvil 2.5.2.5.1. Almacenamiento de la Posición 2.5.2.5.1.1. Formar el mensaje 2.5.2.5.1.2. Codificación a PDU y cabeceras 2.5.2.5.1.3. Configurar destino y envío 2.5.2.5.2. Envío de SMS con Posición 2.5.2.5.3. Uso de la Posición

Upload: others

Post on 26-Apr-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

2.5.2. MODO1: Consola de Datos

2.5.2.1. Introducción

2.5.2.2. Capturando el NMEA GPRMC

2.5.2.3. Extrayendo Campos

2.5.2.4. Mostrando Campos

2.5.2.5. Comunicación con el móvil

2.5.2.5.1. Almacenamiento de la Posición

2.5.2.5.1.1. Formar el mensaje

2.5.2.5.1.2. Codificación a PDU y cabeceras

2.5.2.5.1.3. Configurar destino y envío

2.5.2.5.2. Envío de SMS con Posición

2.5.2.5.3. Uso de la Posición

Page 2: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 52

2.5.2.1. Introducción

Si pulsamos el botón izquierdo cuando estamos en el menú de inicio, pasamos al modo DISPLAY. En este modo se pondrá en funcionamiento la recepción de datos del GPS y se irán mostrando en el display todos los datos que éste nos proporciona. En concreto se visualizará toda la información que contiene el mensaje NMEA, GPRMC.

Antes de ver cual es la forma en que se muestran estos datos, recordemos el formato del mensaje GPRMC y a continuación explicaremos como se realiza la recepción y tratamiento del mismo. La estructura del mensaje GPRMC es la siguiente:

Campo Unidad Descripción $GPRMC Cabecera mensaje

142231.235 hhmmss.sss Posición UTC A Estado A� válido; V � válido

3641.2356 ddmm.mmmm Latitud N N=norte S=sur

00641.5687 dddmm.mmmm Longitud W W=Oeste E=este

0.13 nudos Velocidad 258.56 grados Rumbo 100505 ddmmaa Fecha

grados Variación magnética *15 CheckSum

<CR><LF>

Page 3: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 53

Los parámetros de la comunicación serie del GPS que están por defectos son 4800 baudios, sin paridad, 8 bits de datos y 1 de parada. Con lo cual si abrimos una ventana de HyperTerminal de Windows, podríamos ver los mensajes que nos devuelve el GPS:

La secuencia de envío es la siguiente:

GPGGA-GPGSA-GPRMC (cada segundo) GPGSV (cada 5 segundos)

Tanto la secuencia de envío desde el GPS como la velocidad del puerto serie pueden

ser configuradas bien a través del protocolo SiRF, con el programa que proporciona el fabricante SiRFdemo.exe o bien con el envío del comando Id.129 con sus parámetros. Para más información acudir al manual de usuario del RGM3000.

Nosotros vamos a capturar el mensaje GPRMC ya que este contiene toda la información

que nos es necesaria, pero podríamos realizar lo mismo para cualquier otro mensaje y mostrar la información de cada uno de sus campos.

Page 4: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 54

2.5.2.2. Capturando el mensaje GPRMC

En primer lugar decir que debido a que el 16F877 tiene un solo puerto serie, ha sido necesario multiplexarlo ya que tanto el GPS como la comunicación con el móvil es a través de puerto serie. Por ello debemos tener en cuenta antes de la recepción en que puerto está conectado el GPS para tener habilitada la entrada correspondiente a la UART del microcontrolador. Una vez dicho esto y sabiendo que el envío desde el GPS es automático y cada segundo, la tarea que nos preocupa a programar en el PIC es la recepción de las tramas llegadas desde el GPS, detección del comienzo de GPRMC y almacenamiento en memoria hasta el retorno de carro que indica su final.

En la página siguiente vemos el diagrama de flujo de esta tarea y a continuación la implementación del mismo que corresponde con la rutina recepción_GPS.

* En la inicialización configuramos el puerto serie y elegimos en el multiplexor el canal del GPS. También preparamos la rutina para la detección del time out (interrupciones configurables). * Entramos en un bucle en el que miramos si recibimos algún carácter. Si éste es “R” indica el comienzo del GPRMC y pasamos al siguiente bucle de recepción. En caso de no ser este carácter quedamos a la espera hasta que el timeout de 2,5 segundos nos obligue la salida de la rutina indicando el mensaje de error: GPS NO DETECTADO. *En este bucle de recepción nos quedamos hasta que recibamos el terminador del mensaje “CR” y vamos almacenando la trama completa en la memoria del microcontrolador. Dentro del mapa de memoria se ha elegido el banco 1 para almacenar dicho mensaje a partir de la dirección 0x0A (gps_entrante) * Para terminar, añadimos al final del mensaje el carácter nulo [0], para poder controlar cuando acaba el mensaje en su posterior tratamiento.

Page 5: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 55

‘R’/ TimeOUT

Recibe Serie

Inicializa

Almacena R

CR ?

Recibe Serie

Delimitador

‘R’

NO

SI

NO

Time OUT

Almacena

recepcion_GPS bsf PORTA,5 call Inicializa_SERIE call serie_GPS

RX_otro_caracter call time_out bsf RCSTA,CREN ; habilitar recepcion

muestrea_gps btfsc PIR1,RCIF ; esperar a recepcion goto algo_recibido btfsc TIMES,5 ; espera 2,5 seg goto GPS_no_TX goto muestrea_gps

Page 6: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 56

algo_recibido bcf INTCON,T0IE ; paramos timer0 movf RCREG,0 ; recibido a W bcf RCSTA,CREN ; deshabilitar recepcion

movwf dato bcf STATUS,Z movlw 'R' ; si recibimos "R" almacenamos lo que venga hasta \r subwf dato,0 btfss STATUS,Z goto RX_otro_caracter

; a memorizar hasta el "/r" movlw gps_entrante ; direccion de comienzo movwf FSR bcf STATUS,IRP bsf FSR,7 ; banco 1 movlw 'R' movwf INDF incf FSR,F

mas_carac_gps_1 call RECIBE_SERIE movwf dato ; guardamos el caracter recibido movwf INDF incf FSR,F bcf STATUS,Z movlw d'13' ; CR subwf dato,0 btfss STATUS,Z ; si es uno -> \r recibido goto mas_carac_gps_1

bcf PORTA,5 movlw 0 return

GPS_no_TX bcf INTCON,T0IE ; paramos timer0 bcf PORTA,5 movlw 1 return

Tras la ejecución de esta parte de código tendríamos el mensaje en el mapa de memoria del microcontrolador como vemos en la captura del entorno de programación.

Page 7: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 57

2.5.2.3. Extrayendo Campos

Una ve z que tenemos en memoria todo el mensaje completo podremos visualizar en el display cualquiera de ellos. Si recordamos el mensaje completo y lo dividimos por campos, es decir, por las comas, obtenemos lo siguiente:

RMC,191210.123,V,4543.4315,N,98342.4254,E,0.56,210.43,110505,23,*1E

Nº campo 1 2 3 4 5 6 7 8 9 10 11 Mensaje 191210.123 V 4543.4315 N 98342.4254 E 0.56 210.43 110505 23 *1E

Si nos fijamos el número de campo, indica cuantas comas debemos saltarnos dentro del mensaje hasta llegar al campo en cuestión, así pues, para extraer el indicador de longitud debemos saltarnos 6 comas antes de extraer dicha información.

En definitiva, esta es la tarea que debe realizar el micro cuando vayamos a mostrar un campo determinado.

* Pasamos como parámetro en el registro dato1, el número del campo a extraer. * Vamos extrayendo desde la posmem gps_entrante (0x0A) caracteres y comparando con “,”. Si es una coma decrementamos el registro dato1 mientras que si no lo es seguimos extrayendo caracteres consecutivos. * Cuando hayamos extraído dato1 comas copiamos en otra zona de memoria RAM del banco 2 (dato_gps 0x110) los caracteres hasta el siguiente carácter delimitador “,”, añadiendo el carácter nulo al final del mensaje.

El diagrama de flujo de este proceso es el siguiente:

Page 8: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 58

“,” ?

Extrae Carácter

dato1= nº campo

Dec. dato1

Delimitador

SI

NO

SI

NO

Cambia Pos

dato1=0 NO

Extrae Carácter

“,” ?

La función que realiza este proceso es extrae_campos.

extrae_campos

movwf dato1 ; numero de comas que debemos encontrar antes de coger el campo movlw gps_entrante movwf direccion_RAM_entrante

extrae_otro_dato movf direccion_RAM_entrante,W bcf STATUS,IRP movwf FSR bsf FSR,7 movf INDF,W movwf dato incf direccion_RAM_entrante,F bcf STATUS,Z movlw ','

Page 9: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 59

subwf dato,W btfss STATUS,Z goto extrae_otro_dato decfsz dato1,F goto extrae_otro_dato

movlw dato_gps movwf direccion_RAM_saliente

coger_campo ; sacamos del banco1 y guardamos en el banco2 (dat_gps=110h) movf direccion_RAM_entrante,W bcf STATUS,IRP movwf FSR bsf FSR,7 movf INDF,W movwf dato bcf STATUS,Z movlw ',' subwf dato,W btfsc STATUS,Z goto fin_extrae_campo

; almacena dato bsf STATUS,IRP movf direccion_RAM_saliente,W movwf FSR bcf FSR,7 movf dato,W movwf INDF incf direccion_RAM_saliente,F incf direccion_RAM_entrante,F goto coger_campo

fin_extrae_campo bsf STATUS,IRP movf direccion_RAM_saliente,W movwf FSR bcf FSR,7 movlw 0 movwf INDF

return

Vemos con este ejemplo como nos hemos quedado con el campo Latitud del GPRMC, situado a partir de la posmem 0x110

Page 10: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 60

2.5.2.4. Mostrando Campos

Como el display que disponemos es de dos líneas haremos un menú rotativo con los diferentes campos del mensaje. Para ir moviéndonos por las diferentes pantallas usaremos la palanca situada a la derecha del display que irá incrementando/decrementando el registro muestra_pantalla para que cada vez que llamemos a la rutina actualiza_pantalla, se extraigan los campos correspondientes y se posicionen los mensajes en el display de la forma correcta.

Así, las pantallas del menú quedarían de la siguiente manera:

Pantalla 1 2 3 4 5 6 7

Línea 1 LAT LON UTC FECHA Vel NUDOS Vel Km Rumbo Línea 2 LON UTC FECHA Vel NUDOS Vel. Km Rumbo LAT

En el caso de una pantalla determinada (pantalla n) tendremos el siguiente diagrama de flujo.

Page 11: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 61

A continuación mostramos parte del código de la rutina actualiza_pantalla

actualiza_pantalla

movf muestra_pantalla,W bcf STATUS,Z sublw 5 btfsc STATUS,Z goto pantalla5

... pantalla5

clrf PCLATH call LCD_Clr movlw vel movwf direccion_FLASH movlw 0x15 clrf PCLATH call ENVIA_CADENA_LCD movlw 7 clrf PCLATH call extrae_campos movlw 2 movwf resto movlw dato_gps movwf temp clrf PCLATH call ENVIA_CADENA_LCD_RAM

clrf PCLATH call LCD_Line2 movlw vel2 movwf direccion_FLASH movlw 0x15 clrf PCLATH call ENVIA_CADENA_LCD

movlw 8 movwf PCLATH call convierte_km

goto fin_actualiza_pantalla

Además de los campos mostrados que nos envía directamente el GPS realizamos la conversión de nudos a km/h. Esta conversión no es tan inmediata y tenemos que acudir a otras rutinas que nos hagan este trabajo. La relación de conversión es multiplicar por 1,85 los nudos para tener los km/h, con lo cual se ha implementado una rutina de multiplicación de dos bytes con resultado de 16 bits y a continuación debemos pasar ese resultado al código ASCII del mismo para poder representarlo en el LCD.

Page 12: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 62

La secuencia de operaciones para mostrar en pantalla la velocidad en Km/h es la siguiente:

o Extraer campo NUDOS o Coger la parte entera o Pasar de ASCII a número o Realizar la multiplicación por 185 o Conversión de 16bits a su ASCII correspondiente

Una vez extraído el campo 7 (nudos) y comprobado que el mensaje es válido (campo

2=A), recorremos el mensaje hasta encontrarnos con el punto decimal y nos quedamos con la parte entera. Debemos ir almacenado el número de cifras que extraemos para posteriormente realizar la conversión a número.

extrae_part_entera movf direccion_RAM_entrante,W movwf FSR bcf FSR,7 ; banco 2 bsf STATUS,IRP movf INDF,W ; extraemos primer caracter

movwf dato bcf STATUS,Z sublw '.' btfsc STATUS,Z goto fin_entera

;almacenamos parte entera incf ind1,F movf direccion_RAM_saliente,W movwf FSR bsf FSR,7 ; banco 3 bsf STATUS,IRP movlw 0x30 subwf dato,W movwf INDF ; guardamos el caracter incf direccion_RAM_entrante incf direccion_RAM_saliente goto extrae_part_entera

fin_entera movf direccion_RAM_saliente,W movwf FSR bsf FSR,7 ; banco 3 bsf STATUS,IRP movlw 0 movwf INDF ; guardamos el delimitador

En la siguiente captura vemos la extracción del campo nudos y el almacenamiento de la parte entera.

Page 13: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 63

En función de cuantas cifras hayamos extraído, almacenadas en registros (centenas, decenas y unidades) debemos operar para obtener el número en un byte. Para ello se sumaran centenas veces 100 + decenas veces 10 + unidades veces 1, y posteriormente multiplicamos los 2 bytes (mula y mulb), quedándonos el resultado en H_byte y L_byte.

Con el valor en estos dos registros llamamos a la función to_5ascii para convertir el valor numérico a su equivalente ascii. Para implementar esta función y debido a la gran capacidad de memoria que tiene este micro se ha optado por hacer una tabla de valores y asignar el valor correspondientes a decenas de millar, unidades de millar, centenas, decenas y unidades el valor que le corresponde en función del nibble de los dos bytes que usamos.

Así podemos ver en la ventana del lateral el resultado de todas estas operaciones (35x185=6475). Para mostrar en el LCD dicho resultado correremos la coma dos posiciones y tenemos la velocidad en km/h.

Page 14: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 64

El resultado de todo eso es el disponer de un menú circular con las 7 pantallas posibles para mostrar al usuario la información que en ese momento sea requerida. En las imágenes siguientes vemos las pantallas que puede visualizar el usuario con la información deseada.

Pantalla 1 Pantalla 2

Pantalla 3 Pantalla 4

Pantalla 5 Pantalla 6

Pantalla 7

Page 15: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 65

2.5.2.5. Comunicación con el móvil

Una vez que tenemos el GPS funcionando y nos está mostrando la información deseada podemos usar el terminal móvil como dispositivo de almacenamiento de dicha información o bien reenviarla vía SMS a otro móvil. Esto estaría indicado para aplicaciones donde debiera realizarse determinadas rutas y debiera quedar constancia de que se cumple correctamente. Con el almacenamiento de la posición en el móvil se pretende un manejo mayor de los comandos AT y si el usuario desea mantener salvada una posición determinada por algún motivo.

En la pantalla que mostramos a continuación se ve el menú que aparece cuando estamos en la visualización de datos y pulsamos una de las teclas laterales.

En este punto podremos elegir si Enviamos el mensaje o lo Almacenamos en el terminal. Si deseamos podemos volver al menú anterior pulsando la tecla central. Expliquemos ahora el envío y almacenamiento del mensaje más detalladamente.

2.5.2.5.1. Almacenamiento de la Posición

En primer lugar debemos indicar que el almacenamiento se puede realizar tanto en la memoria SIM del terminal o bien en la memoria interna del mismo. Esto se elige en el siguiente menú, pudiéndose cancelar dicha operación, pulsando de nuevo el botón central.

Page 16: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 66

Si elegimos cualquiera de las opciones de almacenamiento se deben desencadenar las siguientes operaciones:

o Formar el mensaje con la posición actual en formato ASCII o Convertir dicha cadena a formato PDU con el que trabaja el M55 junto con

las cabeceras y número de destino. o Configurar el destino del SMS, almacenamiento en SIM o en memoria

interna o Realizar el envío por el puerto serie

1.- Formar el mensaje

Una vez que tenemos en memoria el mensaje GPRMC del GPS, se extraerán los campos latitud y longitud y se ordenarán en memoria de tal forma que nos queda un mensaje tal como el siguiente:

lat: 4543.4315,N-lon:98342.4254,E

Para realizar esto llamamos a la rutina forma_SMS_GPS. Vemos como a partir del GPRMC en memoria en el banco 1 - 0x0A, se han colocado las cadenas lat y lon y los campos pertinentes para generar el mensaje completo que se almacenará o se enviará a través del terminal. (banco 2 - 0x110)

Page 17: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 67

2.- Codificación a PDU y cabeceras

Como ya explicamos en el apartado correspondiente, los modems GSM que aceptan comandos AT pueden trabajar en modo texto o en modo PDU. El M55 sólo admite modo PDU, con lo cual hay que realizar dicha conversión para que podamos enviarlo correctamente. Además de traducir el mensaje a enviar es necesario agregar las cabeceras donde se incluyen longitud SMC, longitud de la dirección destino, el número destino, id protocolo…

En el apartado dedicado al modem GSM, se ha explicado esto con más detalle con lo cual pasemos a ver como se implementa paso a paso esto en el micro. (rutina prepara_SMS). El mensaje a enviar se va a generar a partir de la dirección 0x190 de RAM situada en el banco 3.

En primer lugar copiamos la primera cabecera que la tenemos en memoria flash (FLASHaRAM_3).

A continuación viene el número de teléfono con el identificador +34 y ordenado de la forma indicada.

6 3 6 7 2 9 3 9 1

4 3 3 6 7 6 9 2 9 3 F 1

Page 18: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 68

Para ello usamos la rutina cod_num_tel que ordenará el número de teléfono destino almacenado en la EEPROM de esta forma, el resultado es el siguiente:

A continuación vendría la otra cabecera que nos indica el identificador de protocolo y el sistema de codificación (FLASHaRAM_3)

El campo que vendría ahora es la longitud del mensaje que viene a continuación pero esto solo lo podremos saber una vez realizada la conversión a PDU, con lo cual dejaremos 2 posiciones de memoria libre para introducirla posteriormente. Así que lo que sigue es la codificación del mensaje a PDU.

Vemos en la ventana Watch el tamaño del mensaje (0x20 = 32dec ) y como hemos dejado libre en la memoria RAM las dos posiciones de memoria

Page 19: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 69

En el siguiente paso añadimos la longitud del mensaje y calculamos la longitud total del mensaje (lon_sms).

3.- Configurar el destino y envío

En este momento ya tenemos la trama completa en memoria y lo único que nos falta es indicarle al móvil donde debe almacenar dicho SMS. En función de si hubiéramos elegido SIM o memoria enviaremos el comando adecuado por el serie del GSM, seguido de un retorno de carro (13 dec)

SIM AT+CPMS=SM,SM,SM

Memoria AT+CPMS=ME,ME,ME

Ahora podemos enviar el comando de escritura seguido de la longitud total (lon_sms) , esperamos a que el móvil nos devuelva el carácter “>” y enviamos la cadena del mensaje en formato PDU que tenemos almacenada en memoria.

En la siguiente pantalla vemos las respuestas del móvil y el mensaje en la pantalla

del terminal una vez almacenado en la carpeta borradores.

- envío AT+CPMS=SM,SM,SM para guardar en SIM - envío At+CMGW=42 (el móvil nos devuelve “>”) - envío de la trama completa en formato PDU - respuesta con el identificador del SMS en la memoria y el OK.

Page 20: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 70

2.5.2.5.2. Envío de SMS con la Posición actual

La otra opción que podemos elegir en el menú es el envío de la posición actual a través de SMS a cualquier otro móvil. En la pantalla siguiente vemos que debemos pulsar la tecla izquierda.

A continuación se nos pide que introduzcamos el número destino. El numero que aparece por defecto es el anterior que pusiéramos o el que se recibiera como llamada entrante. Con las teclas izquierda/derecha nos posicionamos sobre los distintos dígitos y con la palanca subimos/bajamos hasta tener el número deseado.

Page 21: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 71

Mostrar LCD

EEPROM → RAM

Extrae digito ind1

inc ind1

act LCDact RAM

← dec ind1

↑ inc ind2

↓ dec ind2

OK

RAM → EEPROM

si

si

si

si

no

no

no

no

no

si

Para hacer esto es necesario tener por defecto un número en la EEPROM del micro que será el que se muestre por primera vez. Al igual que todas las cadenas, debe estar delimitada por el carácter nulo.

Al principio esta cadena se pasa a RAM para trabajar con ella e ir modificándola hasta que la hayamos completado y validemos. Para ello tenemos una rutina Num_envio que será la encargada de posicionar el cursor parpadeante sobre los distintos dígitos e ir cambiando su valor a medida que pulsamos con la palanca.

A continuación vemos el diagrama de flujo de esta rutina:

Page 22: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 72

Esperar si WR(banco 3)

NO

EEADR(banco 2)

EEDATA(banco 2)

Habilitar WR(banco 3)

EECON2=0x55 (banco 3)

EECON2=0xAA (banco 3)

Start WR(banco 3)

Cada vez que incrementamos o decrementamos tanto ind1 (posición) como ind2 (valor) debemos tener en cuenta los límites inferiores y superiores, asignando el valor si hay desbordamiento, es decir, después del 9 va el 0.

Otra rutina importante es la de grabación en la EEPROM, para que el número no se pierda cuando quitemos la alimentación al circuito. Este micro dispone de 256 bytes de EEPROM y va a ser usada para el almacenamiento permanente del número a enviar, teléfono master, claves…. y demás información que no deba ser eliminada tras su uso.

La lectura de un byte de EEPROM es similar a cuando leemos de RAM pero para grabar hay que seguir una secuencia de pasos determinada.

Veamos a continuación el diagrama de escritura en EEPROM de los PICs.

Page 23: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 73

Una vez dicho esto podemos continuar como sería el resto del proceso para conseguir el envío del SMS.

Tras la introducción del número destino, se formaría de nuevo la trama con la latitud y longitud actual, el número de teléfono anteriormente introducido y las cabeceras ya mencionadas en el apartado de almacenamiento del mensaje.

Lo único que difiere del proceso anterior es el comando que se le envía al terminal, siendo éste AT+CMGS

Pantalla hyperterminal de envío sms

2.5.2.5.3. Uso de la Posición

Con todo lo que hemos dicho hasta ahora solamente hemos conseguido tener un mensaje con las coordenadas latitud/longitud que sin más no da demasiada información acerca de la posición donde se encuentra nuestro localizador GPS. Para que esta aplicación tenga más sentido debe estar soportada por algo más que la simple captura de las coordenadas geográficas. En concreto deberemos hacer uso de mapas cartografiados para trasladar nuestra posición almacenada a un punto concreto dentro de la geografía mundial. Estas soluciones podrían ser de un tipo tradicional, como podrían ser mapas cartografiados en papel, o bien mediante aplicaciones informáticas que nos permitan acceder a mapas ya existentes. (PDAs, móviles de ultima generación…)

Page 24: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 74

Hay una gran variedad de estos programas como OziExplorer, GPSPositioner, GPS TrackMaker,….

Para realizar las primeras pruebas usando el modulo GPS se utilizó el primero de ellos, OziExplorer, probando algunas de sus características, como calibración de un nuevo mapa, visualización de los datos que nos manda el GPS, uso de Waypoints, …

En la siguiente captura vemos como se ha trazado la ruta en el recorrido Cádiz-Sevilla por la Autopista A-4, sobre una captura de un mapa sin digitalizar que tras la posterior calibración nos sirvió para ir mostrando la ruta que íbamos siguiendo.

Otra de las soluciones que aportamos en este proyecto es el uso de la aplicación realizada y que nos ayudaría a localizar la posición que tenemos almacenada en nuestro móvil. Como ya se dijo en el apartado explicativo de la aplicación, no se ha realizado una tarea excesiva en esta parte de la aplicación, ya que es mucho el software comercial que hay disponible al respecto.

Para finalizar con este apartado vamos a mostrar un ejemplo práctico del sistema en dos

plataformas diferentes, por un lado nuestra aplicación y por otro en el software libre que hay en la red y que se denomina GoogleEarth.

Page 25: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 75

Partimos de que tenemos una posición almacenada en el móvil como vemos en la imagen de la derecha.

En primer lugar vamos a introducir esta posición en el mapa Cádiz-Sevilla que tenemos calibrado en la aplicación GPS. Como ya se dijo en el apartado correspondiente, activamos en el menú superior la opción manual, y en las casillas latitud longitud introducimos las coordenadas que disponemos y pulsamos en el botón IR A. El resultado lo mostramos en la imagen siguiente.

Otra de las opciones que planteamos es el uso de GoogleEarth del que existe una versión gratuita y disponible en la página (http://earth.google.com/). Esta aplicación consiste en un gran conjunto de ortofotos digitales de todo el mundo. Entre las numerosas opciones que dispone, pueden citarse las de localización de lugares de interés, carreteras, almacenamiento de lugares determinados, … y todo ello a vista de pájaro con un calidad bastante buena. Los requerimientos son mínimos: un ejecutable de 10Mb y conexión a internet ya que es necesaria la comunicación con el servidor de Google para que vaya bajando las imágenes a medida que van siendo requeridas.

Una de las ventajas que nos ofrece es la posibilidad de poder entrar en el mapa con la posición en coordenadas latitud/longitud lo cual es de gran ayuda a la hora de visualizar de que posición estamos hablando.

Page 26: modo1bibing.us.es/proyectos/abreproy/50027/fichero/PFC+Ivan...Localizador GPS-GSM Iván Rodríguez Carmona 2.5.2. Consola de Datos - 53 Los parámetros de la comunicación serie del

Localizador GPS-GSM Iván Rodríguez Carmona

2.5.2. Consola de Datos - 76

En esta página vemos como introduciendo esta misma posición la imagen nos sitúa en la puerta de los laboratorios de la Escuela Superior de Ingenieros de Sevilla