Autor Tema: Interpretar comandos NMEA con el pic?  (Leído 4781 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2034
Interpretar comandos NMEA con el pic?
« 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:
Citar
$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:

Desconectado doppel

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1531
" Para ser exitoso no tienes que hacer cosas extraordinarias. Haz cosas ordinarias, extraordinariamente bien "

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2034
Re: Interpretar comandos NMEA con el pic?
« Respuesta #2 en: 06 de Febrero de 2011, 12:11:59 »
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  :?

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6759
Re: Interpretar comandos NMEA con el pic?
« Respuesta #3 en: 06 de Febrero de 2011, 12:42:37 »
Te envía caracteres ascii?
No contesto mensajes privados, las consultas en el foro

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2034
Re: Interpretar comandos NMEA con el pic?
« Respuesta #4 en: 06 de Febrero de 2011, 12:54:02 »
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:


Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6759
Re: Interpretar comandos NMEA con el pic?
« Respuesta #5 en: 06 de Febrero de 2011, 12:56:58 »
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!
No contesto mensajes privados, las consultas en el foro

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2034
Re: Interpretar comandos NMEA con el pic?
« Respuesta #6 en: 06 de Febrero de 2011, 14:25:04 »
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:

Citar
#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


 

anything