TODOPIC
FORO TÉCNICO => Telefonía, GPS y Microcontroladores => Mensaje iniciado por: RALF2 en 06 de Febrero de 2011, 11:29:51
-
Buenas amigos!
Tengo un gps parallax el cual quiero utilizar para leer comandos NMEA pero no entiendo vien como desglosar las tramas que ellos envian :?
Tomemos como ejemplo este codigo:
$GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68
225446 Time of fix 22:54:46 UTC
A Navigation receiver warning A = Valid position, V = Warning
4916.45,N Latitude 49 deg. 16.45 min. North
12311.12,W Longitude 123 deg. 11.12 min. West
000.5 Speed over ground, Knots
054.7 Course Made Good, degrees true
191194 UTC Date of fix, 19 November 1994
020.3,E Magnetic variation, 20.3 deg. East
*68 mandatory checksum
En esta partecita: 12311.12,W Longitude 123 deg. 11.12 min. West
Cuantos bytes contieneesa trama?
Como desgloso los minutos(11.12)?
La coma(,) me supongo que la puedo detectar como el caracter (44) para saber de donde a donde va cada campo dentro de la trama?
Les agradesco por su ayuda :mrgreen:
-
algunos links:
Decodificacion NMEA (inglés)http://www.qsl.net/dl4yhf/speclab/gps_decoder.htm (http://www.qsl.net/dl4yhf/speclab/gps_decoder.htm)
Decodificacion Nmea para arduino (http://www.maartenlamers.com/nmea/) y la libreria NMEA library (desarrollo) (http://www.maartenlamers.com/nmea/nmea.html#decode)
espero te sirva
-
Hola doppel!
El progrma lo voy a realizar en CCS con un pic18f252, pero eso es lo de menos.
Lo que no me queda claro es cuantos bytes aparecen el ejemplo que coloque arriba 12311.12, en este me parecen que son 3 bytes :? donde el 3 byte me parecen que son las decimas de minuto :huh:
Necesito saber que es cada butes para asi poder mostrar la informacion en una lcd :mrgreen:
He alli mi dilema :?
-
Te envía caracteres ascii?
-
Hola suky!
Buena tu pregunta :mrgreen:
Me parece que si, aunque no lo he probado
Ya que si son caracteres ascii el problema esta resuelto!
Lo voy a probar a ver si es asi :mrgreen:
-
Hola suky!
Buena tu pregunta :mrgreen:
Me parece que si, aunque no lo he probado
Ya que si son caracteres ascii el problema esta resuelto!
Lo voy a probar a ver si es asi :mrgreen:
Por lo que leí rápidamente de un documento de la web, si son caracteres ascii imprimibles :lol:
Saludos!
-
Perfecto suky es correcto son caracteres ascii lo que envia el gps :-/ :mrgreen:
Gracias por el dato :mrgreen:
Ya probe capturando la hora y funciona a la perfeccion :mrgreen:
Coloco codigo de prueba:
#include <18F252.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES PUT //Power Up Timer
#FUSES NOBROWNOUT //Reset when brownout detected
#use delay(clock=10000000)
#define LCD_ENABLE_PIN PIN_C0
#define LCD_RS_PIN PIN_C1
#define LCD_RW_PIN PIN_C2
#define LCD_DATA4 PIN_C4
#define LCD_DATA5 PIN_C5
#define LCD_DATA6 PIN_C6
#define LCD_DATA7 PIN_C7
#include "lcd420.c"
#USE RS232(BAUD= 4800,XMIT= PIN_B0,RCV= PIN_B0,FLOAT_HIGH,TIMEOUT=3000)
void main()
{
char hora[8];
char flag[4];
int i;
delay_ms(2000);
lcd_init();
while(true)
{
do{
for(i=0;i<3;i++)
flag= getc();
if((flag[0]=='R')&&(flag[1]=='M')&&(flag[2]=='C'))
{
for(i=0;i<7;i++)
hora= getc();
lcd_gotoxy(1,2);
printf(lcd_putc,"%c%c:%c%c:%c%c",hora[1],hora[2],hora[3],hora[4],hora[5],hora[6]);
}
}while(true);
}
}
Saludos