TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: Abago en 14 de Julio de 2003, 21:41:00
-
Ya he visto por hay el simulador de GPS que se os ha ocurrido para engañar al tinytrack...
Ahora viene mi nueva idea....
Me gustaría leer los datos que suelta un GPS NMEA...
Y poder deglosar la trama $GPRMC para saber la velocidad a la que va mi coche... 
Supongo que con todos los genios que hay por aqui... no será muy dificil... 
Muchas gracias a todos los que colaboreis...
-
Hola
Norberto (TODOPIC) lo puso por algun lado en el foro pero no me acuerdo donde. Si pones NMEA en google con un poco de paciencia vas a encontrar la explicacion de las sentencias.
Saludos
Luis
-
No... Si las tramas mnea, las entiendo a la perfección....
Pero el proyecto es el inverso al del emulador GPS -tinytrack. 
Mi idea es leer por puerto serie del GPS las tramas nmea que tira el GPS, y desglosarlas.... Para saber sus parametros por separado...
Luego con estos parametros... Podemos hacer muchas cositas...
Por ejemplo... MAndar un SMS con las cosdenadas por donde va nuestro coche.... O la velocidad... 
-
No entiendo que necesitas
-
Buenas:
Leer los datos del gps e interpretarlos es sencillo, por lo menos latitud, longitud y hora, es mas ,en algun lugrar puse un programa para mostrar la hora UT y la corregida para Argentina, para sacar los datos al celular, hbria que ver como ingresar el sms en el celular.-
Jorge
-
Buenas:
De primera intención tendrías que tratar de conseguir copiar algunas tramas del mensaje del gps, Yo por algun lado tengo las descripciones del protocolo, solo es cuestión de encontrarlo, pero la idea es ver el protocolo que recibis para poder simularlo con la PC y probar el programa del micro.-
Mi gps solo me tira un tipo de datos.-
Seguimos en contacto
Jorge
-
La idea es descartar las tramas que no sean GPRMC
Porque con interpretar las tramas GPRMC, tenemos casi todos los datos que nos pueden ser de utilidad
Se os ocurre alguna forma de leer los datos serie, y descartar los que no sean de utilidad???
Yo tengo info sobre las tramas mnea... Y las entiendo a la perfección....
Pero aún, no se como hacer lectura con el pic... Y descartar las tramas que no sean útiles...
de momento, para ir empezando, seria muy util... Hacer un programilla en PBP que lea el gps... descarte las tramas que no sean GPRMC... y las que si lo sean... las tire hacia el puerto serie del PC para poder leerlas con el Hyperterminal... y ver los resultados... 
Si esto funciona.... Vamos por buen camino 
Una vez que esto funcione... Solo tenemos que hacer algo para desglosar la trama... y tirar los datos al hyperterminal pero con un formato que no sea mnea...
algo asi como
Latitud xxx.xxxxxxx - Longitud xxx.xxxxxxx - Altitud xxx.xxx
Velocidad xxx.xx ETC...
A ver si alguien aporta algo de PBP con lo que podamos ir ESTUDIANDO!!!!
Y desarrollando!!! 
Saludos a todos...
-
Para que te des una idea de como salen las tramas nmea del GPS conectalo al hyperterminal puesto en 4800 8N1 y las vas a ver en pantalla.
Cada trama empieza con $GP y luego GGA o RMC o cualquier otro encaveado valido. POr ejemplo para recibir solamente una sentencia RMC tenes que buscar que te aparezca $GPRMC. Como esos cararteres viene de a uno, tenes que hacer comparaciones anidades es decir ves si es $ luego si es G etc. Cuando se cumplan esas condiciones tenes la sentencia que buscas.
Saludos
Luis
-
El problema que tengo, es que no se como las lee el pic
Me he hecho un programilla en VB que me lee las tramas como un hyperterminal....
Y desecha las que no son GPRMC

Lo que hago es crearme un buffer de recepción que recive unos 300 caracteres cuando se llena.... busco la trama MC
Y luego la desgloso.... 
Esto en VB es facil... Pero con el pic... No se por donde empezar... Estoy empezando a comprender el PBP... 
La entrade de datos al pic, es secuencial??? dato a dato???
por ejemplo???
lee
1.- &
2.- G
3.- P
4.- R
5.- M
6.- C
????
porque asi, creo que no debe de ser dificil Hacerlo....
Pero necesito HELP... 
-
Si, es paso a paso, un caracter por vez
-
Bueno, vamos entendiendo, te comento que la instruccion serin en PBP, tiene un modificador "wait", que estera que le llegue cierto tipo de mensaje para recibir luego lo que le sigue del mensaje, asi que te pedirias que copies un trozo de trama de la que te interesa, incluendo unos caracteres de la trama anterior y de la posterior.
Luego hacemos la salida hacia la PC,pero inclui esa trama para ver el mensaje.
Saludos
Jorge
-
$GPRMB,,,,,,,,,,,,,*66
$GPRMC,042109,V,2721.0241,S,15303.2849,E,0.0,188.0,261100,11.3,E*46
$GPGGA,042109,2721.0241,S,15303.2849,E,0,0,0.80,0,M,,,,*17
$GPGSA,A,1,,,,,,,,,,,,,1.69,0.80,1.49*0A
$GPGSV,3,1,12,23,56,170,,17,47,113,,21,47,259,,15,43,210,*74
$GPGSV,3,2,12,29,33,342,,3,32,230,,6,23,21,,26,14,140,*46
$GPGSV,3,3,12,9,12,87,,22,10,287,,28,8,255,,31,,215,*47
$GPAPB,,,,,,,,,,,,,,*44
$GPGLL,2721.0241,S,15303.2849,E,042110,V*24
Estas tramas las tira consecutivamente... Os adjunto un ficherito con una lectura de unos minutos... 
de todas estas tramas... la que nos interesa es la
$GPRMC,042109,V,2721.0241,S,15303.2849,E,0.0,188.0,261100,11.3,E*46

El principio de la trama, es el $GPRMC, .... Pero el final, es el checksum del nmea creo que siempre son 4 digitos... Pero el valor es variable...
De momento el valor que me interesa en el que está después de ,E,0.0, El valor el 188.0
Es la velocidad del vehículo...
-
Usa las comos (,) como ayuda ya que son separadores de campo. Si te interesa la velocidad dejas pasar 8 comas (si no conte mal) y lees todos los caracteres hasta la proxima coma y ya tenes la velocidad
-
Para que me puede ser util la velocidad???
Estoy un poco perdidillo con el procedimiento que utiliza PBP 
Mi GPS suelta datos NMEA 2.0 con los siguientes parametros serie.
Velocidad: 4800
Bits de datos: 8
paridad: No
Bits de stop: 1
Control de Flujo: No
4800 8 n 1 0
con estos parámetros....
Y los datos que os puse antes en los otros posts...
Como se irian leyendo los datos por serie???
Algun ejemplo???
Help!!! 
he estado hechando un vistazo al codigo del simulador gps para tinytrack
SERIN2 PORTA.1,16572,10000,hola,[b0(0), b0(1),b0(2),b0(3),b0(4),b0(5),b0(6),b0(7),b0(8),b0(9),b0(10)]
SERIN2 PORTA.1,16572,10000,hola,[b0(11), b0(12),b0(13),b0(14),b0(15),b0(16),b0(17),b0(18),b0(19),b0(20),b0(21)]
con este comando, almacenamos en el array B0 los datos que vienen del gps o del simutrack...!!! 
como leeriamos los datos 1 a 1 para identificar el simbolo $
y seguidamente
GPRMC ???
Una vez encontrado el principio de la trama... ya debe ser facil desglosar los datos latitud, longitud, altura, velocidad......

ALgun alma caritativa que deje por aqui algo de código de ejemplo???

TNKS
-
Buenas:
Este programita interpreta datos del GPS y los envia convertidos
a una PC,para verlos a través de un programa terminal.-
No he podido probarlo con otros datos que no sea $GPRMC,pero
creo que debe funcionar sin inconvenientes.-
Esta pensado para funcionar con un 16F873.-
Saludos
Jorge
"****************************************************************
"* Name : Traductor_GPS *
"* Author : [jorge ansuini] *
"* Notice : Copyright (c) 2002 [jorge ansuini] *
"* : All Rights Reserved *
"* Date : 20/07/2003 *
"* Version : 1.0 *
"* Notes : Lee datos del GPS y la presenta en una *
"* : PC como hora UT,latitud y longitud *
"****************************************************************
device 16f873
DEFINE OSC 4
BAUDGPS VAR BYTE
GPSin VAR PORTB.7 ;entrada de datos
GPSout VAR PORTc.6 ;salida hacia la PC
baudGPS = 188 ;4800,8N1 CON MAX232
"baudGPS CON 16572 ;4800,8N1 sin MAX232
H VAR BYTE ;decenas de hora
M VAR BYTE ;decenas de minuto
S VAR BYTE ;decenas de segundo
H1 VAR BYTE ;hora
M1 VAR BYTE ;minuto
S1 VAR BYTE ;segundo
L VAR BYTE ;latitud
L1 VAR BYTE
L2 VAR BYTE
L3 VAR BYTE
L4 VAR BYTE
L5 VAR BYTE
L6 VAR BYTE
L7 VAR BYTE
L8 VAR BYTE
L9 var byte
Lo VAR BYTE ;longitud
Lo1 VAR BYTE
Lo2 VAR BYTE
Lo3 VAR BYTE
Lo4 VAR BYTE
Lo5 VAR BYTE
Lo6 VAR BYTE
Lo7 VAR BYTE
Lo8 VAR BYTE
Lo9 Var byte
lo10 var byte
lo11 var byte
GPS:
Serin2 portb.7,baudGPS,3000,errr,[ wait("$GPRMC,"
,H,H1,M,M1,_
S,S1,L,L,L,L,L,L,L,L1,L2,L3,L4,L5,L6,L7,L8,L9,Lo,Lo,Lo1,_
Lo2,Lo3,Lo4,Lo5,Lo6,Lo7,Lo8,Lo9,Lo10]
serout2 portc.6,baudGPS,["Hora U.T.> ",H,H1," : ",M,M1," : ",S,S1,13]
serout2 portc.6,baudGPS,["Latitud> ",l,l1,L2,L3,L4,L5,L6,L7,L8,L9,13]
serout2 portc.6,baudGPS,["Longitud> ",lo,lo1,Lo2,Lo3,Lo4,Lo5,Lo6,_
Lo7,Lo8,Lo9,Lo10,13]
goto GPS
errr:
serout2 portc.6,baudGPS,["error"]
goto gps
-
Ante todo, dar las gracias a jorgeansuini por el codigo que dejó en el anterio post....

Gracias jorge, con este código, he podido comprender como actua el serin en pbp....
Poco a poco, voy aprendiendo... 
Viendo el código, creo poder interpretar que con el comando wait, espera a que aparezca la cabezera $GPRMC, por lo que deduzco que descartará las demas tramas que tire el gps....
Con esto está todo solucionado... Por lo menos en la teoria....
De todos modos, en estos dias... Os pondré un poco de documentación sobre las tramas genericas GPS... A ver si vamos todos aprendiendo nuevas cosas...
Supongo que a alguien le será de utilidad para sus proyectos....
Ahora, quiero agradecer a los demas que estais participando en el foro, vuestro apollo... creo que es imprescindible para que todos leamos... y podamos aprender unos de otros....
Os cuento mi última idea:
Se me ha ocurrido, hacer un circuitillo.. que me sirva para detener mi coche... en pricipio, la idea era hacer un cuenta KM digital Por GPS... Pero dandole vueltas a la cabeza... he pensado que puede ser de gran utilidad hacer un modulo de detención de vehículo...
La idea es leer los datos GPS... y si la velocidad es durante unos 15 segundos 0 KM/H y activamos una de las patillas del pic...
El vehículo se para por medio de un cortacorrientes...
La idea de que lea la velocidad a 0 KM/H durante 15 o 20 segundos, es para detener el coche con seguridad, aunque el que nos lo ha robado, no lo merezca. 
De momento con un cortacorrientes... Porque me he puesto a comentar la idea con unos amigos teleco, y hemos pensado hacer un circuitillo que sature el código de la llave dal coche, e inhabilite el cógigo.... del transponder....
No se si se podrá hacer... pero vamos a intentarlo....
Si teneis alguna idea de como hacerlo.... Pués nada... A ayudar con el proyecto....
-
Aqui os dejo un ficherito con documentación sobre las tramas NMEA...
Lo prometido es deuda...
-
device 16f876
DEFINE OSC 4
DEFINE LCD_BITS 4 "define display de 4 bits
DEFINE LCD_LINES 2 "cantidad de lineas del display
DEFINE LCD_DREG PORTB "portb control del display
DEFINE LCD_DBIT 0 "comienzo de bit del puerto
DEFINE LCD_RSREG PORTB "linea select
DEFINE LCD_RSBIT 4 "bit de comando de select
DEFINE LCD_EREG PORTB "puerto de habilitacion
DEFINE LCD_EBIT 5 "bit de habilitacion
BAUDGPS VAR BYTE
GPSin VAR PORTA.2 "entrada de datos
GPSout VAR PORTC.6 "salida hacia la PC
baudGPS = 188 "4800,8N1 CON MAX232
"baudGPS CON 16572 "4800,8N1 sin MAX232
" $GPRMC,HHMMSS.SSS,A,DDMM.MMMM,N,DDDMM.MMMM,W,????,DDD.DD,DDMMYY,W,CCC
H0 VAR BYTE "UTC tIME
H1 VAR BYTE
M2 VAR BYTE
M3 VAR BYTE
S4 VAR BYTE
S5 VAR BYTE
pUNTO1 VAR BYTE
SD6 VAR BYTE
SD7 VAR BYTE
SD8 VAR BYTE
STAT VAR BYTE "STADO DE LA TRAMA
DLAT0 VAR BYTE "LATITUD
DLAT1 VAR BYTE
MLAT2 VAR BYTE
MLAT3 VAR BYTE
PUNTO2 VAR BYTE
MDLAT4 VAR BYTE
MDLAT5 VAR BYTE
MDLAT6 VAR BYTE
MDLAT7 VAR BYTE
ORLAT VAR BYTE "N/S INDICADOR
DLON0 VAR BYTE "LONGITUD
DLON1 VAR BYTE
DLON2 VAR BYTE
MLON3 VAR BYTE
MLON4 VAR BYTE
PUNTO3 VAR BYTE
MDLON5 VAR BYTE
MDLON6 VAR BYTE
MDLON7 VAR BYTE
MDLON8 VAR BYTE
ORLON VAR BYTE "E/W INDICADOR
VEL0 VAR BYTE "VEOCIDAD
VEL1 VAR BYTE
VEL2 VAR BYTE
VEL3 VAR BYTE
COG0 VAR BYTE "CURSO DIRECCIÓN
COG1 VAR BYTE
COG2 VAR BYTE
PUNTO4 VAR BYTE
COG3 VAR BYTE
COG4 VAR BYTE
DIA0 VAR BYTE "FECHA GPS
DIA1 VAR BYTE
MES0 VAR BYTE
MES1 VAR BYTE
YEAR0 VAR BYTE
YEAR1 VAR BYTE
MV VAR BYTE "VARIACIÓN MAGNETICA
CK0 VAR BYTE "CHECKSUM DE LA TRAMA
CK1 VAR BYTE
CK2 VAR BYTE
GPS:
Serin2 portb.7,baudGPS,3000,errr,_
[ wait("$GPRMC,",H0,H1,M2,M3,S4,S5,punto1,SD6,SD7,SD8,STAT,DLAT0,DLAT1,_
MLAT2,MLAT3,PUNTO2,MDLAT4,MDLAT5,MDLAT6,MDLAT7,ORLAT,DLON0,DLON1,DLON2,_
MLON3,MLON4,PUNTO3,MDLON5,MDLON6,MDLON7,MDLON8,ORLON,VEL0,VEL1,VEL2,VEL3,_
COG0,COG1,COG2,PUNTO4,COG3,COG4,DIA0,DIA1,MES0,MES1,YEAR0,YEAR1,MV,CK0,CK1,CK2)]
"Muestra las lecturas en un LCD 2x16 conectado en 4 bits al
"portB
lcdout $fe,1,"$GPRMC,",H0,H1,M2,M3,S4,S5,punto1,SD6,SD7,SD8,STAT,DLAT0,DLAT1,_
MLAT2,MLAT3,PUNTO2,MDLAT4,MDLAT5,MDLAT6,MDLAT7,ORLAT,DLON0,DLON1,DLON2,_
MLON3,MLON4,PUNTO3,MDLON5,MDLON6,MDLON7,MDLON8,ORLON,VEL0,VEL1,VEL2,VEL3,_
COG0,COG1,COG2,PUNTO4,COG3,COG4,DIA0,DIA1,MES0,MES1,YEAR0,YEAR1,MV,CK0,CK1,CK2"
goto GPS
ERRR:
goto GPS
Algo que comentar??? al menos como teoría???
tengo una dudilla!!!! 
wait("$GPRMC,",H0
el tema de las comas.....
tenemos la primera coma dentro de las comillas
"$GPRMC,"
es corecto el poner otra vez la coma fuera de las comillas
para enlazar con H0???

no se porque sale el simbolo / si yo no lo he escrito!!!!! 
Bueno, ya sabeis.... omitie este simbolo!!!
-
El código del anterior post, está basado en el standart nmea...
No se si estarás muy puesto en el tema de los GPS, pero si lees el
documento que colgé sobre como funcionan estas tramas, seguro que te aclaras un poco mas...
Si tu GPS, no usa el standart NMEA, creo que no voy a poder ayudarte demasiado... 
-
Hola a todos:
gracias a Jorge y su programa en basic he podido interfacear un Pic16F628 con un modulo FV12 con protocolo NMEA,
pero no logro captar latitud ni longitud, pues permanentemente me informa que tengo un satalite en vista pero no engancha (tracking) ninguno. La antena es una Trimble magnetica , quisiera saber si hay que inicializar de alguna manera el modulo, a dicho modulo lo compre en Cekit Argentina. He esperado por espacio de 20min para que enganche y nada.
Gracias
-
Tu idea de hacer el modulo para parar el coche en al caso de robo, me parece muy buena, pero tienes que tener en cuenta que hay servicios de éste que no funcionan sin corriente, véase el ABS, la dirección asistida, o los airbags. Sería una buena forma de pararlo, pero a lo mejor no de recuperarlo en buen estado.
Otro aspecto a tener en cuenta, es en dónde situar el cortacorrientes, ya que si lo haces directamente en la batería y el osado ladrón es un poco havil puede arrancarlo con la propia inercia.
Imagino que todo esto ya lo habrás pensado tu, pero por si las moscas te lo recuerdo...
Besotes a todos
-
Escrito originalmente por isabelino
Hola a todos:
gracias a Jorge y su programa en basic he podido interfacear un Pic16F628 con un modulo FV12 con protocolo NMEA,
pero no logro captar latitud ni longitud, pues permanentemente me informa que tengo un satalite en vista pero no engancha (tracking) ninguno. La antena es una Trimble magnetica , quisiera saber si hay que inicializar de alguna manera el modulo, a dicho modulo lo compre en Cekit Argentina. He esperado por espacio de 20min para que enganche y nada.
Gracias 
Vallamos por partes....
Lo primero antes de trabajar con tu gps, es cerciorarte, de que funciona por si solo, sin conectarlo a tu circuito...
Supongo que el módulo sacará los datos nmea, en modo ttl.
Conecta el gps a un max232, y a su vez al puerto serie del pc...
y verifica que el gps, hace su función correctamente...
Cuando veas que el gps, funciona... Ya te pones a cacharrear con tu circuito..
AH!! y perdona por haber tardado tanto en responder...
-
hola amigos tengo una pregunta como la trama obtenida por el gps a un dato que me de
latitud y longuitud que formula aplico o no se me podrian dar un ejemplito
muchas gracias a todos
esta es una excelente pagina
-
yo me hice un programa en asm con el MPLAB que lee los datos nmea del gps con un 16f84 , identifica los datos y los coloca en un lcd .
en pantalla puedo elegir cualquiera de los datos que entrega el nmea. por ejemplo:
altura, coordenadas N S , velocidad, y mediante una de los datos poner en pantalla que no hay señal de satelite.
si aun te interesa puedo pasarte la informacion.
saludos.
Ariel.
Madrid- 23/9/2004