Autor Tema: Desesperado con string caracteres del gps y las int_rda  (Leído 2700 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Diego Gonzalez

  • PIC18
  • ****
  • Mensajes: 323
    • Visita mi web sobre electronica,fisica,mecanica y demas temas....
Desesperado con string caracteres del gps y las int_rda
« en: 09 de Noviembre de 2011, 05:01:23 »
Hola a todos.

Llevo dos dias peleandome con un gps y no consigo escribir bien un vector de caracteres... :? Me he ayudado de webs y de la propia web de Diego_Redpic pero no hay manera. Os muestro el codigo por si podeis apreciar algo que se me escape, yo ya no se que mas hacer.

Código: [Seleccionar]
#include <18f46k22.h>  //archivo de cabecera
#DEVICE ADC=8
#fuses INTRC,MCLR,NOWDT,NOPROTECT,NOLVP,NOPBADEN,NODEBUG // fuses  configurados

// el fuse que configuramos anteriormente
#use delay(internal=4M)     // el clock que tendremos a la entrada del CPU
#use rs232(baud=4800, xmit=PIN_C6, rcv=PIN_C7,stream=HOSTPC)
#use rs232(baud=4800, xmit=PIN_D6, rcv=PIN_D7,stream=GPS)
#use i2c(Master,sda=PIN_B0,scl=PIN_B1)          //Configuración I2C para 24LC512
#define LCD_DB4   PIN_B7
#define LCD_DB5   PIN_B6
#define LCD_DB6   PIN_B5
#define LCD_DB7   PIN_B4
#define LCD_RS    PIN_B3
//#define LCD_RW    PIN_B2
#define LCD_E     PIN_B2
#define LED0 PIN_A0
#define LED1 PIN_A1
#define LED_ON output_high
#define LED_OFF output_low


#include "flex_lcd.c"
#include "mcp9804.c"

int const lengbuff=100;
int xbuff=0;
    char gpsbuff[lengbuff],d,b,cbuff[lengbuff];   // último carácter recibido
int i=0;
int flagcommand=0;
void iniciabuffer(void);
void addcbuff(char c);

#int_RDA
void serial_isr1() {
  b=0x00;
output_toggle(LED0);
b=fgetc(HOSTPC);
fputc(b,HOSTPC); //Hacemos un ECO
}

#int_RDA2
void serial_isr2() {
  d=0x00;
output_toggle(LED1);
if(kbhit(GPS)){                        // Si hay algo pendiente de recibir ...
      d=fgetc(GPS);                  // lo descargo y ...
      addcbuff(d);               // lo añado al buffer y ...
   }
fputc(d,HOSTPC); //paso a COM1

}

void iniciabuffer(void)
{ // Inicia a \0 cbuff -------------------
int j;
for(j=0;j<lengbuff;j++)
{ // Bucle que pone a 0 todos los
cbuff[j]=0; // caracteres en el buffer
}
xbuff=0; // Inicializo el indice de siguiente caracter
}

void addcbuff(char c)
{
switch(c)
{
case 0x0A:
flagcommand=1;
break;
default:
cbuff[xbuff++]=c;
if(xbuff>lengbuff)
{ xbuff=lengbuff; }
}
}


void main() {
flagcommand=0;
enable_interrupts(int_rda); // Habilita Interrupción RDA
  enable_interrupts(int_rda2); // Habilita Interrupción RDA
setup_adc_ports(sAN0);      // Configura canales usados por el ADC.
    setup_adc(ADC_CLOCK_DIV_64);
enable_interrupts(global);
iniciabuffer();
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"Iniciando sensor  ");

fprintf(HOSTPC,"\rPIC18F46K22 talking rs232 COM1\n");
fprintf(GPS,"\rPIC18F46K22 talking rs232 COM3 RF CHANNEL\n");
   
tempsensor_init();
delay_ms(1000);
lcd_gotoxy(1,1);
printf(lcd_putc,"Leyendo sensor    ");
fprintf(HOSTPC,"\rLeyendo sensor\n" );
fprintf(GPS,"\rDatos del GPS:\n" );
 while(1){
if(flagcommand==1)
{
flagcommand=0;
for(i=0;i<(xbuff);i++)
{
lcd_gotoxy(i,1);//Primero columna, segundo fila
printf(lcd_putc,"%c",cbuff[i]);
fprintf(GPS,"%c"cbuff[i] );
}
iniciabuffer();
enable_interrupts(int_rda);
enable_interrupts(int_rda2);
}
//while(1){output_toggle(LED0);}//Esperamos
}
}
 



Tal y como está ahora las interrupciones son bien atendidas, pero no puedo rellenar el buffer que pretendo leer de una forma coherente. Es decir, creo que me esta entrando en interrupciones mientras leo, pero ¿que pasa si pongo en el main un disable_interrupts(global) o un disable_interrupts(int_rda)? pues pasa que el pic se cuelga (puede que se quede algun flag de interrupcion activado pero no se como desactivarlo.

Cual creeis que serian los pasos a seguir?? Encontre por internet una web que usa un codigo practicamente identico al mio, pero creo que dicho codigo falla... En su caso la interrupcion del puerto serie rellena el buffer y cuando esta lleno lo manda por usb. En mi caso con un usart hardware leo el gps e intento rellenar el buffer, y luego lo envio al ordenador para leer el buffer e imprimirlo en la lcd a su vez

Este es el codigo de internet:
Código: [Seleccionar]
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay(clock=48000000)
#USE RS232(BAUD=38400, XMIT=PIN_C6, RCV=PIN_C7, PARITY=N ,BITS=8, ERRORS,stream=RF,disable_ints)//Mediante HW
#define LEDV PIN_B4
#define LEDR PIN_B5
#define LED_ON output_high
#define LED_OFF output_low
int const lenbuff=90; // Tamaño del buffer de recepción
int xbuff=0; // Índice: siguiente char en cbuff
int8 cbuff[lenbuff]; // Buffer
char gpsbuff[lenbuff]; // Buffer GPS
char rcvchar=0; // Ultimo caracter recibido
int1 flagcommand=0; // Flag para indicar comando disponible
char c,d;
int i,j;
const int8 LF=10;

#include <usb_cdc.h>//Siempre va antes del include usb_desc_cdc.h
#include <usb_desc_cdc.h>

void inicbuff(void); // Borra buffer
void addcbuff(char c); // añade caracter recibido al buffer

#int_rda
void serial_isr()
{ // Interrupción USART
d=0;
LED_OFF(LEDR);
LED_ON(LEDV);
d=getchar(RF);
addcbuff(d);
}

void inicbuff(void)
{ // Inicia a \0 cbuff -------------------
int j;
for(j=0;j<lenbuff;j++)
{ // Bucle que pone a 0 todos los
cbuff[j]=0; // caracteres en el buffer
}
xbuff=0; // Inicializo el indice de siguiente caracter
}

void addcbuff(char c)
{
switch(c)
{
case 10:
flagcommand=1;
disable_interrupts(int_rda);
break;
default:
cbuff[xbuff++]=c;
if(xbuff>lenbuff)
xbuff=lenbuff;
}
}

void main() {

flagcommand=0;

LED_OFF(LEDV); //encendemos led rojo
LED_ON(LEDR);

enable_interrupts(int_rda); // Habilita Interrupción RDA
usb_cdc_init();
usb_init(); //inicializamos el USB
enable_interrupts(global); // Habilita interrupciones

usb_task();
usb_wait_for_enumeration();//Esta linea espera hasta que el usb esté conectado

LED_OFF(LEDR);
LED_ON(LEDV); //encendemos led verde

while (true)
{
if(usb_enumerated())
{
if(flagcommand==1)
{
flagcommand=0;
for(i=0;i<(xbuff);i++)
{
usb_cdc_putc(cbuff[i]);
}
usb_cdc_putc(10);
inicbuff();
LED_OFF(LEDR);
LED_OFF(LEDV); //encendemos led verde
enable_interrupts(int_rda);
}
}
}
}


Un afectuoso saludo y gracias gracias de antemano
Visita mi web sobre electronica,fisica,mecanica y demas temas....

http://sites.google.com/site/skygaps/Home

Desconectado Diego Gonzalez

  • PIC18
  • ****
  • Mensajes: 323
    • Visita mi web sobre electronica,fisica,mecanica y demas temas....
Re: Desesperado con string caracteres del gps y las int_rda
« Respuesta #1 en: 09 de Noviembre de 2011, 14:12:31 »
Mas informacion. Cambie una condicion

Código: [Seleccionar]
void addcbuff(char c)
{
switch(c)
{
case 0x24: //caso de $ si pongo caso 0x0A es que detecte un salto carro
flagcommand=1;
break;
default:
cbuff[xbuff++]=c;
if(xbuff>lengbuff)
{ //xbuff=lengbuff;
xbuff=0;
}
}
}

Este es un ECO de lo que el gps envia al pic. Se pueden ver todos los datos y eso
Código: [Seleccionar]
PIC18F46K22 talking rs232 COM1
$PSRFTXT,Version: XTrac2.1.1_2.4.13.18-C3P1.0 *13
$PSRFTXT,====================================================================================*63
$PSRFTXT,SW Version HTTP://TAOTAOHUO.TAOBAO.COM/    *35
$PSRFTXT,WANGWANG:sz_eming        *67
$PSRFTXT,MOBILE:13606212603       *4F
$PSRFTXT,QQ:674033  *5C
$PSRFTXT,TOW:  290602*1A
$PSRFTXT,WK:   1661*65
$PSRFTXT,POS:  4620792 -473069 4356742*3E
$PSRFTXT,CLK:  92575*21
$PSRFTLXT,CHNL: 1e2*73
$PSRyFTXT,Baude rate: 480n0  System dclock: 24o.553MHz*76
s$eGPGGA,1708n16.945,,,s,,0,00,50.o0,,M,,M,,0r000*62
$
GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPGSV,3,1,10,11,45,122,,20,82,355,,01,63,090,,32,55,051,*79
$GPGSV,3,2,10,17,44,299,,23,38,171,,13,13,186,,28,12,248,*78
$GPGSV,3,3,10,31,08,075,,04,05,294,*7E
$GPRMC,170816.945,V,,,,,,,091111,,,N*45
$GPGGA,170817.945,,,,,0,00,50.0,,M,,M,,0000*63
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPGSV,3,1,10,11,45,122,,20,82,355,,01,63,090,,32,55,051,*79
$GPGSV,3,2,10,17,44,299,,23,38,171,,13,13,186,,28,12,248,*78
$GPGSV,3,3,10,31,08,075,,04,05,294,*7E
$GPRMC,170817.945,V,,,,,,,091111,,,N*44
$GPGGA,170818.945,,,,,0,00,50.0,,M,,M,,0000*6C
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPGSV,3,1,10,11,45,122,,20,82,355,,01,63,090,,32,55,051,*79
$GPGSV,3,2,10,17,44,299,,23,38,171,,13,13,186,,28,12,248,*78
$GPGSV,3,3,10,31,08,075,,04,05,294,*7E
$GPRMC,170818.945,V,,,,,,,091111,,,N*4B
$GPGGA,170819.945,,,,,0,00,50.0,,M,,M,,0000*6D
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPGSV,3,1,10,11,45,122,,20,82,355,,01,63,090,,32,55,051,*79
$GPGSV,3,2,10,17,44,299,,23,38,171,,13,13,186,,28,12,248,*78
$GPGSV,3,3,10,31,08,075,,04,05,294,*7E
$GPRMC,170819.945,V,,,,,,,091111,,,N*4A
$GPGGA,170820.945,,,,,0,00,50.0,,M,,M,,0000*67
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPGSV,3,1,10,11,45,122,,20,82,355,,01,63,090,,32,55,051,*79
$GPGSV,3,2,10,17,44,299,,23,38,171,,13,13,186,,28,12,248,*78
$GPGSV,3,3,10,31,08,075,,04,05,294,*7E
$GPRMC,170820.945,V,,,,,,,091111,,,N*40
$GPGGA,170821.945,,,,,0,00,50.0,,M,,M,,0000*66
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPGSV,3,1,10,20,82,355,,01,63,090,,32,55,051,,11,45,122,*79
$GPGSV,3,2,10,17,44,299,,23,38,171,,13,13,186,,28,12,248,*78
$GPGSV,3,3,10,31,08,075,,04,05,294,*7E
$GPRMC,170821.945,V,,,,,,,091111,,,N*41
$GPGGA,170822.945,,,,,0,00,50.0,,M,,M,,0000*65
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPGSV,3,1,10,20,82,355,,01,63,090,,32,55,051,,11,45,122,30*7A
$GPGSV,3,2,10,17,44,299,,23,38,171,,13,13,186,,28,12,248,*78
$GPGSV,3,3,10,31,08,075,,04,05,294,*7E
$GPRMC,170822.945,V,,,,,,,091111,,,N*42
$GPGGA,170823.945,,,,,0,00,50.0,,M,,M,,0000*64
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPGSV,3,1,10,20,82,355,,01,63,090,,32,55,051,,11,45,122,31*7B
$GPGSV,3,2,10,17,44,299,,23,38,171,,13,13,186,,28,12,248,*78
$GPGSV,3,3,10,31,08,075,,04,05,294,*7E
$GPRMC,170823.945,V,,,,,,,091111,,,N*43

Y esto es lo que contiene el String que voy rellenando posicion a posicion
Código: [Seleccionar]
PIC18F46K22 talking rs232 COM3 RF CHANNEL
Datos del GPS:
945,,,,,0,00,50.0,,M,,M,,0000*62
GPGSA,A,1,,,,,,,,,,,,,50.082,355,,01,63,090,,32,55,051,*79
GPGSV,3,2,10,17,44,299,,23,38,171,,13,13,18,3,10,31,08,075,,04,05,294,*7E
GPRMC,170816.945,V,,,,,,,091111,,,N*45
GPGGA,170817.945,,,,,0,00,50.0,,M,,M,,0000*63
GPGSA,A,1,,,,,,,1,45,122,,20,82,355,,01,63,090,,32,55,051,*79
GPGSV,3,2,10,17,*78
GPGSV,3,3,10,31,08,075,,04,05,24,*7E
GPRMC,170817.945,V,,,,,,,091111,,,N*44
GPGGA,170818.945,,,,,0,00,50.0,,M,,M,,0000*6C
GPGSA,A,1,,,,,,,1,45,122,,20,82,355,,01,63,090,,32,55,051,*79
GPGSV,3,2,10,17,*78
GPGSV,3,3,10,31,08,075,,04,05,24,*7E
GPRMC,170818.945,V,,,,,,,091111,,,N*4B
GPGGA,170819.945,,,,,0,00,50.0,,M,,M,,0000*6D
GPGSA,A,1,,,,,,,1,45,122,,20,82,355,,01,63,090,,32,55,051,*79
GPGSV,3,2,10,17,*78
GPGSV,3,3,10,31,08,075,,04,05,24,*7E
GPRMC,170819.945,V,,,,,,,091111,,,N*4A
GPGGA,170820.945,,,,,0,00,50.0,,M,,M,,0000*67
GPGSA,A,1,,,,,,,1,45,122,,20,82,355,,01,63,090,,32,55,051,*79
GPGSV,3,2,10,17,*78
GPGSV,3,3,10,31,08,075,,04,05,24,*7E
GPRMC,170820.945,V,,,,,,,091111,,,N*40
GPGGA,170821.945,,,,,0,00,50.0,,M,,M,,0000*66
GPGSA,A,1,,,,,,,0,82,355,,01,63,090,,32,55,051,,11,45,122,*79
GPGSV,3,2,10,17,*78
GPGSV,3,3,10,31,08,075,,04,05,24,*7E
GPRMC,170821.945,V,,,,,,,091111,,,N*41
GPGGA,170822.945,,,,,0,00,50.0,,M,,M,,0000*65
GPGSA,A,1,,,,,,,0,82,355,,01,63,090,,32,55,051,,11,45,122,30*7A
GPGSV,3,2,*48,*78
GPGSV,3,3,10,31,08,075,,04,05,294,*7E
GMC,170822.945,V,,,,,,,091111,,,N*42
GPGGA,170823.945,,,,,0,00,50.0,,M,,M,,,,,50.0,50.0,50.0*05
GPGSV,3,1,10,20,82,355,,01,63,090,,32,55,051,,11,45,122,31*7B
GPG44,299,,23,38,171,,13,13,186,,28,12,248,*78
GPGSV,3,3,10,31,08,0

Sigue sin funcionar y no se muy bien por qué. Nadie se ha metido en estas historias nunca?? :(


Visita mi web sobre electronica,fisica,mecanica y demas temas....

http://sites.google.com/site/skygaps/Home

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Desesperado con string caracteres del gps y las int_rda
« Respuesta #2 en: 09 de Noviembre de 2011, 14:58:40 »
Primero que nada podrías mirar el datasheet del GPS para ver como configurar de recibir únicamente la trama que te interesa. Luego, si desactivas la interrupción y recibes mas de un dato sin ser atendido, ocurre un sobre-escritura en el buffer de recepción y se te bloquea la UART, a tener en cuenta  ;-) Eso está detallado en el datasheet del microcontrolador, en todo caso podes apagar la recepción.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Diego Gonzalez

  • PIC18
  • ****
  • Mensajes: 323
    • Visita mi web sobre electronica,fisica,mecanica y demas temas....
Re: Desesperado con string caracteres del gps y las int_rda
« Respuesta #3 en: 09 de Noviembre de 2011, 19:49:28 »
Hola a todos, y en especial a Suky.

al final borre todo el programa y fui rehaciendolo poco a poco. Luego probé mmanualmente enviando comandos con el terminal y pude verificar que el array se inicializa correctamente (perdi algunos minutos no obteniendo resultados hasta que me di cuenta que la inicializacion a "0" corresponde a ascii un caracter nulo, por tanto al leer el array inicializado no "veia nada". Como digo, probé el programa inicializando el array, y luego simulando entrada de caracteres (como si fueran por ejemplo las tramas del gps) y luego introduje un retorno de carro manualmente (0x0A) y como tengo en el programa en la condicion, lanzo la lectura del array por otro puerto usart distinto, y funciona a la perfeccion.

Creo, por tanto, que el problema está en como relleno el array, ya que temo que los retornos de carro no los pille "bien" y empiece a mezclar la informacion de todas las tramas. Ahora creo que me tengo que pelear para rellenar el array correctamente en funcion de la trama del GPS. ¿Que opinais?

Gracias por la ayuda
Visita mi web sobre electronica,fisica,mecanica y demas temas....

http://sites.google.com/site/skygaps/Home

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Desesperado con string caracteres del gps y las int_rda
« Respuesta #4 en: 09 de Noviembre de 2011, 20:21:55 »
Me parece a mi que el problema está en que quieres realizar muchas tareas con ese buffer de recepción cuando el GPS no espera a que termines a trabajarlo  :mrgreen:

O sea, recibes una trama hasta recibir el carácter 0x0A, y después de eso escribes ese buffer en un LCD y también los envías en la PC! Estoy seguro que a mitad de "camino" empiezas a sobre escribir la trama con otros datos  ;-) Por eso te planteaba en tema de configurar el GPS para recibir solo la trama que te interesa, para así liberarte de la cantidad de datos que te envia y que no utilizas. Luego puedes aumentar la velocidad de transmisión, así entre trama y trama tienes suficiente tiempo para tratar los datos.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Diego Gonzalez

  • PIC18
  • ****
  • Mensajes: 323
    • Visita mi web sobre electronica,fisica,mecanica y demas temas....
Re: Desesperado con string caracteres del gps y las int_rda
« Respuesta #5 en: 13 de Noviembre de 2011, 16:12:48 »
Hola a todos

Hola Suky.

Pues al final he optado por reducir las tramas enviadas por el gps y quedarme solo con la GPRMC, que me da geoposicion y velocidad. La verdad que desde que plantee la pregunta he estado sin descanso intentando buscar la mejor forma de intercomunicarme con el gps y al final he optado por leer una sola trama.  :(

No encuentro por ningun lado el fallo y me rindo. La solucion no ha sido la que yo hubiera esperado, pero ignoro porque no me mantiene un indice del vector de caracteres.

Como bien dices la rutina de interrupcion siempre hay que entrar y salir lo mas rapido posible. Eso en todos los tipos de interrupciones. En mi caso cojo el caracter, lo meto en el vector y salgo. Solo cuando detecto un retorno de carro activo una variable desde la interrupcion que lo imprime todo desde el main.

He de decir que por otra parte, y pese a la mediocre solucion, he aprendido bastante de la usart, de rellenar vectores y todo eso. Ahora continuare con ello. Mi agradecimiento a RedPic y a mucha otra gente que me ha ayudado directa e indirectamente.
continuará!

pd:Por si alguien le interesa el codigo, es el mismo que ahi arriba. Lo unico que tuve que cambiar la config del gps para que lanzara solo la trama que yo queria :oops:

Visita mi web sobre electronica,fisica,mecanica y demas temas....

http://sites.google.com/site/skygaps/Home

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Desesperado con string caracteres del gps y las int_rda
« Respuesta #6 en: 13 de Noviembre de 2011, 17:40:20 »
El problema base de no poder recibir o la mezcla de datos está aquí:

Me parece a mi que el problema está en que quieres realizar muchas tareas con ese buffer de recepción cuando el GPS no espera a que termines a trabajarlo   :mrgreen:

O sea, recibes una trama hasta recibir el carácter 0x0A, y después de eso escribes ese buffer en un LCD y también los envías en la PC! Estoy seguro que a mitad de "camino" empiezas a sobre escribir la trama con otros datos  ;-)

 ;-)
No contesto mensajes privados, las consultas en el foro

Desconectado Diego Gonzalez

  • PIC18
  • ****
  • Mensajes: 323
    • Visita mi web sobre electronica,fisica,mecanica y demas temas....
Re: Desesperado con string caracteres del gps y las int_rda
« Respuesta #7 en: 13 de Noviembre de 2011, 17:43:45 »
Hola Suky,

Lo sé, atender mas rapido la interrupcion no se puede. En realidad dentro de esa interrupcion no hay nada mas que un flag y una asignacion de caracter recibido a una posicion de un string. Luego el grueso de la tarea se hace fuera.

A ver si sigo peleandome con ello. Tienes razon voy a investigar

Gracias por las sugerencias y la ayuda!! :-/
Visita mi web sobre electronica,fisica,mecanica y demas temas....

http://sites.google.com/site/skygaps/Home

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Desesperado con string caracteres del gps y las int_rda
« Respuesta #8 en: 13 de Noviembre de 2011, 18:17:31 »
No entiendes.. No hay que aumentar la velocidad de atención de interrupción, sino que re-pensar las tareas a realizar con la trama recibida y de que tiempo se dispone, o utilizar 2 buffer, así mientras tratas uno recibís en el otro.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Diego Gonzalez

  • PIC18
  • ****
  • Mensajes: 323
    • Visita mi web sobre electronica,fisica,mecanica y demas temas....
Re: Desesperado con string caracteres del gps y las int_rda
« Respuesta #9 en: 13 de Noviembre de 2011, 18:21:00 »
Hola suky,

si, no te estaba entendiendo...Pense que te referias a lo que te comento. Ahora todo aclarado!! Voy a ver si implemento la idea y analizo esos detalles

un saludo
Visita mi web sobre electronica,fisica,mecanica y demas temas....

http://sites.google.com/site/skygaps/Home

Desconectado fenixariel

  • PIC10
  • *
  • Mensajes: 39
    • www.delphiandpic.jimdo.com
Re: Desesperado con string caracteres del gps y las int_rda
« Respuesta #10 en: 18 de Noviembre de 2011, 19:40:35 »
Como sabes cada segundo te llegan 7 tramas NMEA mas o menos grandes(unos 80 byte por trama), y si quieres tratarlas todas eso toma tiempo, por eso en este tipo de aplicaciones la velocidad de trabajo del micro es critica.
.
.
.
Primero prueba escribir tu buffer en el terminal de windows o puedes hacerte un terminal en C++ VB o Delphi, o si no usa este programita que lo encruentras por ahi  "Termite V2.4"
asi descartas que tu buffer se este llenando bien.

Se acostumbra usar 48Mhz para este tipo de aplicaciones, que no todos lo micros lo tienen, y si el costo no fuera mas alto ($) , se usarian micros mas veloces.......
.
.
.
Cuando tu buffer se llena con las 7 tramas NMEA, comienzas con en el envio hacia la PC y el LCD, y mientras eso sucede ya estan llegando las sigueintes 7 tramas..........

no hay como..................
.
.
.
La idea es capturar los datos que te interesen en esas tramas y tendras 1 segundo para hacer lo que quieras con esos datos antes que se reescriba el buffer.........
.
.
.
pero si aun quieres siempre tener tu buffer, no se podrias usar 2 buffers.....
.
.
.
Saludos............
« Última modificación: 21 de Noviembre de 2011, 03:14:08 por fenixariel »