Autor Tema: Leer datos GPS  (Leído 6365 veces)

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

Desconectado juanelete

  • PIC12
  • **
  • Mensajes: 74
Leer datos GPS
« en: 27 de Octubre de 2004, 04:10:00 »
Hola a tod@s:

Tengo un GPS Garmin 95, y quiero leer los datos por medio de un PIC. Los datos estan en formato NMA0183, y consiste en una tramas de datos parecidos a esto:

$GPRMC,182047,A,3745.76,N,00129.28,W,015.0,125.7,231003,002.6,W*78

Baudios=4800, Paridad=None, Bits=8

Probe primero con PIC Basic, y todo fue muy bien, conseguia leer los datos perfectamente, pero conforme fue creciendo el programa, se hacia muy lenta la ejecucion...

Ahora estoy haciendolo con C, concretamente con CCS C Compiler, pero lo unico que sale por la pantalla LCD son caracteres extraños...

Que estoy haciendo mal...


#INCLUDE <16F876.H>

#fuses HS,NOWDT,NOPROTECT,NOLVP

#use delay(clock=16000000)
#use RS232(BAUD=4800,RCV=PIN_A4,PARITY=N,BITS=8)
#include "miLCD.c"


void main()
{
   char c;
   
   lcd_init();
   lcd_putc("fPreparado...
");

   while(TRUE)
   {  
      if (kbhit())
      {
          c=getc();
          lcd_putc(c);
          delay_ms(200);
      }      
   };
}


Gracias anticipadas.

Saludos.:-)

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Leer datos GPS
« Respuesta #1 en: 27 de Octubre de 2004, 04:34:00 »
pues creo que ese retardo de 200mseg no estara muy bien pruebalo y di alguna cosa ok?

Por cierto solo te envia el RMC o todos los comandos?  Idea
- T0ni0 -
30RCF112

Desconectado juanelete

  • PIC12
  • **
  • Mensajes: 74
RE: Leer datos GPS
« Respuesta #2 en: 27 de Octubre de 2004, 06:02:00 »
Hola T0ni0:

Lo del retardo es simplemente para poder ver lo que saca por el LCD, ahora mismo me da igual que se pierdan caracteres, lo que quiero ver es que lee algo.

Efectivamente va enviando varios comandos secuencialmente...

Ahora mismo lo unico que me preocupa es que lea caracteres correctos, luego ya implementare cargar en variables los datos que necesite.

Saludos Sonrisa

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Leer datos GPS
« Respuesta #3 en: 27 de Octubre de 2004, 08:01:00 »
Creo que sería mejor que capturases lo que entra por usart mediante el uso de su correspondiente interrupción

#int_rda
void recepcion_serie()    // Rutina de interrupción por recepción serie
   {
    buffer[j] = getc();      
    j++;
   }

void main()
   {
    int j;
    char cadena[17];
    char *buffer = cadena;
    j = 0;
    enable_interrupts(INT_RDA);
    enable_interrupts(GLOBAL);
    while( j < 15 )  // No salimos hasta que tengamos 16 caracteres en el buffer
       {
       if (j == 15)
         {
         disable_interrupts(INT_RDA);
         }
       }
    printf(lcd_putc,"%s",buffer); // Sacamos todo por el lcd
   }

Con esto se supone que capturarás los primeros 16 caracteres que mande el gps y después te saldrán por el lcd.Suerte

Desconectado juanelete

  • PIC12
  • **
  • Mensajes: 74
RE: Leer datos GPS
« Respuesta #4 en: 28 de Octubre de 2004, 06:30:00 »
Hola Modulay:

Tu ejemplo no lo puedo compilar, me da error, dice que la variable buffer de recepcion_serie() no esta declarada.

Mi a ver si lo puedes solucionar, y despues lo pruebo.

De todas formas ahora mismo no me preocupa tanto el que se pierdan caracteres en recepcion (ya lo arreglare despues), lo que realmente me preocupa es poder leer caracteres correctos, hasta ahora solo saco caracteres extraños por el LCD, y no se si el problema esta en el GPS, en la lectura o en la visualizacion.

Me gustaria que alguno de los "master" de por aqui me confirmara si el programa que he utilizado es correcto para visualizar en el LCD caracteres leidos del GPS (los que sean) o tiene algun fallo. Si el programa es correcto tendre que centrarme en la config. del GPS o en las conexiones...etc.

Gracias a todos.

Saludos Rebotado

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: Leer datos GPS
« Respuesta #5 en: 28 de Octubre de 2004, 11:17:00 »
quizas te interese el ejemplo que colgue en mi web respecto a la recepcion por el puerto serie con CCS

saludos

Desconectado juanelete

  • PIC12
  • **
  • Mensajes: 74
RE: Leer datos GPS
« Respuesta #6 en: 28 de Octubre de 2004, 12:02:00 »
Hola Pacalaconcusro:

Me parece genial lo visto en tu pagina, sin duda lo utilizare mas adelante.Sonrisa

Pero mi problema ahora es que no consigo visualizar ningun caracter normal (letras, numeros, comas, ....) por el modulo LCD, solo salen caracteres raros, y no se si el problema es de la recepcion, de la visualizacion...etc.

Me gustaria que me comentarais si el programa que he hecho tiene algun problema o es correcto (lo suficiente para leer algunos caracteres) y mostrarlos en el LCD. Con ver letras y numeros en el LCD me doy por contento, ya implementare despues todo lo demas...

Gracias por tu interes.

Saludos Rebotado

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Leer datos GPS
« Respuesta #7 en: 28 de Octubre de 2004, 12:09:00 »
Perdona juanelote tienes razon.
Lo que tienes que hacer es declarar "cadena" y "*buffer" de forma global para que sean visibles desde cualquier parte del código.
Las puedes declarar justo después de las directivas de preprocesado.
Mediante interrupción es la forma más segura y eficaz.Prueba y nos cuentas.
Un saludo

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: Leer datos GPS
« Respuesta #8 en: 28 de Octubre de 2004, 12:41:00 »
como sabes el numero de caracteres a imprimir mejor asi:
siendo caracteres tipo int8 y datos [] un array de char

lcd_putc("f"Giño;
 for(aux=0;aux<caracteres ;aux++)
         {
         printf(lcd_putc,"%C",datos[aux]);
         }

saludos

Desconectado peddrorolo

  • PIC12
  • **
  • Mensajes: 56
RE: Leer datos GPS
« Respuesta #9 en: 29 de Octubre de 2004, 01:26:00 »
Hola Juanelete.
No estoy seguro de que la respuesta sea la correcta, pero por si acaso, verificalo.
¿es posible que lo que estás leyendo sea codigo hexadecimal y lo que estás envando al LCD no sea código ascii sino hexadecimal? si esto es correcto, lo que ves es el código ascii correspondiente a la entrada hexadecimal, coje un tabla de ascii en la red y como sabes lo que estas recibiendo, que debe ser la trama que pusistes al principio del foro, compruebala en la tabla.

Espero haberte sido de ayuda.

Saludos al foro

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Leer datos GPS
« Respuesta #10 en: 29 de Octubre de 2004, 04:24:00 »
Estoy completamente de acuerdo con peddrorolo...
Yo ya hice mis pinitos con las comunicaciones serie en PBP, y me encontré con este mismo problema...
creo recordar que lo que recibes del GPS o de una consola, es el valor ascii del caracter...

intenta mirarlo, guardando lo que recibes en la eeprom interna del pic.
hay encontrarás la solución


Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Leer datos GPS
« Respuesta #11 en: 29 de Octubre de 2004, 13:26:00 »
Escrito originalmente por pacalaconcurso
quizas te interese el ejemplo que colgue en mi web respecto a la recepcion por el puerto serie con CCS

saludos


Hombre Félix, por fin te decidiste a explicar lo de la recepción con una estructura ... era una promesa pendiente, te acuerdas?

He estado estudiando el programita y me gusta. Tiene muchas posibilidades.

Una observación, creo que te falta definir en la estructura: trama[MAX]

Una curiosidad: ¿qué números sueles poner en MAX para el tamaño del buffer?


Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: Leer datos GPS
« Respuesta #12 en: 29 de Octubre de 2004, 17:53:00 »
efectivamente me habia "soplao" tramaSonrisa Gigante al borrar otros datos de la estructura....

me alegro que te guste pocher, la verdad es que es la mejor forma de tratar la comunicacion cuando se hace en modo binario, donde no se puede (o no es cómodo) usar un determinado carqacter como fin de la cadena... y aunque se use siempre es necesario implementar un timeout.

el tamaño de buffer depende de la aplicacion, suelo poner [50] como partida.

la verdad es que esta forma optimiza mucho la comunicacion, sobre todo cuando usas un micro con dos usart... ahi te das cuenta de la necesidad de optimizar las interrupciones.

por cierto, a ver si os animais y cuelgas algo de lo que guardas en la mangaFlash

saludos

Desconectado juanelete

  • PIC12
  • **
  • Mensajes: 74
RE: Leer datos GPS
« Respuesta #13 en: 04 de Noviembre de 2004, 06:30:00 »
Hola a todos:

Llevo varios dias de pruebas... y nada...

He conseguido hacer funcionar el ejemplo de "Modulay", pero no se activa la interrupcion, osea que no recibe nada por el pin correspondiente. He probado cambiando a otros pines, he probado con otras velocidades...pero no se activa la interrupcion.

Estoy desesperado....Llorica

He vuelto a probar con PicBasic PLus y funciona perfectamente. Por lo tanto, el GPS transmite bien, el PIC lee bien, el circuito esta bien diseñado y conectado...etc.

Donde esta el problema?

Me falta alguna intruccion en el programa?

Me falta algun parametro en la instruccion #use RS232 ?

Para que sirve la instruccion USE_IO_FAST ?

Veis algun motivo para que no se active la interrupcion #int_rda ?

Ayuda please.

Gracias a todos por vuestra ayuda.Rebotado

Saludos

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Leer datos GPS
« Respuesta #14 en: 04 de Noviembre de 2004, 07:27:00 »
Puedes poner el codigo tal como lo tienes ahora? así podré probar alguna cosa ok? yo tengo un GPS conectado a un PIC en estos momentos haber si lo solucionamos
- T0ni0 -
30RCF112


 

anything