ya he podido inicializar el gps para que solo envie la trama GLL y la trama por defecto luego de que se ha ubicado correctamente.
la trama que envia es del tipo
$GNGLL,3150.6792,N,11711.9345,E,032946.000,A,A*4C
la trama por defecto
$GPTXT,01,01,02,ANTSTATUS=OK*3B
y otra trama de un tamaño menor que la anterior, y esto ocurre cada 1 seg, asi el micro ya no esta saturado con tanto bytes.
Adjunto el main que estoy compilando
VOID MAIN()
{
FPUTS("\nRESET\n\r",UART1);
ESTADO=0;
BUFFER_INDEX=0;
SET_PULLUP(TRUE, PIN_B7 );
SET_PULLUP(TRUE, PIN_B8 );
ENABLE_INTERRUPTS(INT_EXT0);
ENABLE_INTERRUPTS(INT_RDA2);
ENABLE_INTERRUPTS(INT_RDA);
ENABLE_INTERRUPTS(GLOBAL);
// $GNGLL,3150.6792,N,01711.9345,E,032946.000,A,A*4C<CR>
WHILE(TRUE)
{
IF(TRAMA_READY==1)
{
TRAMA_READY=0;
FPUTS("$PMTK314,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\n\r",UART2);
GET_GPSPOINT();
FPRINTF(UART1,"%4.5f\n\r",LATITUD);
}
Este es el codigo con el que recibo los datos del gps, detecto la cabecera que me interesa y almaceno, cuando la trama es valida siempre se espera un numero fijo y conocido de bytes, por lo tanto puedo saber cuando la trama esta completa, cuando esta completa entonces pongo la variable TRAMA_READY=1.
VOID ADD_TO_BUFFER(UNSIGNED CHAR DATO_GPS)
{
DATA_GPS=DATO_GPS;
SWITCH(ESTADO)
{
CASE 0: IF(DATA_GPS=='$')
{
ESTADO++;
}
ELSE
{
RESET_FSM();
}
BREAK;
CASE 1: IF(DATA_GPS=='G')
{
STORE_IN_BUFFER();
ESTADO++;
}
ELSE
{
RESET_FSM();
}
BREAK;
CASE 2: IF((DATA_GPS=='N') | (DATA_GPS=='P') )
{
STORE_IN_BUFFER();
ESTADO++;
}
ELSE
{
RESET_FSM();
}
BREAK;
CASE 3: IF(DATA_GPS=='G')
{
STORE_IN_BUFFER();
ESTADO++;
}
ELSE
{
RESET_FSM();
}
BREAK;
CASE 4: IF(DATA_GPS=='L')
{
STORE_IN_BUFFER();
ESTADO++;
}
ELSE
{
RESET_FSM();
}
BREAK;
CASE 5: IF(DATA_GPS=='L')
{
STORE_IN_BUFFER();
ESTADO++;
}
ELSE
{
RESET_FSM();
}
BREAK;
CASE 6: IF((DATA_GPS==CR) | (DATA_GPS==LF) )
{
IF(BUFFER_INDEX>BUFFER_LENGTH)
{
TRAMA_READY=1;
BUFFER_INDEX=0;
RESET_FSM();
}
ELSE
{
RESET_FSM();
CLEAR_BUFFER_GPS();
}
}
ELSE
{
GPS_BUFFER[BUFFER_INDEX++]=DATA_GPS;
}
BREAK;
}//FINI SWITCH
}//FIN FUNCION ADD
VOID GET_GPSPOINT()
{
UNSIGNED CHAR LAT_ASCII[10]; //9 CARACTERES EN LATITUD + NULL= 10
UNSIGNED CHAR LON_ASCII[11]; //10 CARACTER EN LONGI + NULL= 11
UNSIGNED CHAR CONT_LAT=6; //COORDENADA LAT INICIA EN GPS_BUFFER[6]
UNSIGNED CHAR CONT_LON=18; //COORDENADA LAT INICIA EN GPS_BUFFER[18]
UNSIGNED CHAR I=0;
FOR(CONT_LAT=6;CONT_LAT<=14;CONT_LAT++)
{
LAT_ASCII[I]=GPS_BUFFER[CONT_LAT];
I++;
}
I=0;
FOR(CONT_LON=18;CONT_LON<=27;CONT_LON++)
{
LON_ASCII[I]=GPS_BUFFER[CONT_LON];
I++;
}
LATITUD=ATOF(LAT_ASCII);
LONGITUD=ATOF(LON_ASCII);
LONGITUD*=-1;
}
Sin embargo sigue reseteandose
![redhot :5]](http://www.todopic.com.ar/foros/Smileys/default/redhot.gif)
, lo peor es que se resetea y queda bloqueado sin hacer nada mas, no vuelve a imprimir nada