Autor Tema: Ayuda GPS PARALLAX 28146  (Leído 2038 veces)

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

Desconectado GAMCH333

  • PIC10
  • *
  • Mensajes: 8
Ayuda GPS PARALLAX 28146
« en: 29 de Mayo de 2012, 17:17:00 »
 :(Reciba usted un cordial saludo, deseandole de antemano el mejor de los exitos, si me lo permite puedo comentarle que mi nombre es Gustavo A. Martinez, y hace ya casi un año,  gracias a su ayuda pude acreditar mi clase de Microntroladores, hecho que le agradezco mucho ya que la intencion era capturar los datos de un modulo GPS Parallax 28146 y presentar los datos en un lcd de 4x16 y via rs232 a la Hiperterminal, este es el codigo usado...

************************************************************

#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)

// SE DEFINE LA DIRECCION DEL PUERTO A,B,C COMO ELEMENTO DE ENTRADA SALIDA.
// ASI COMO LA DIRECCION DE MEMORIA DE CADA UNO DE LOS DEMAS PUERTOS A,B,C.
// DICHA INFORMACION SE ENCUENTRA ESPECIFICADA EN EL REGISTRO DE MEMORIA DEL PIC.
// (MAYOR INFORMACIÓN DATA SHEET DE MICROCHIP WWW.MICROCHIP.COM
#use fast_io (b)
#use fast_io (c)
#use fast_io (d)
#byte porta = 5
#byte portb = 6
#byte portc = 7


// SE DEFINE LA DIRECCION DEL PUERTO BO PARA ENTRDA GPS PARALLAX .

#use rs232(baud=4800, xmit=PIN_B0, rcv=PIN_B1, bits=8, stream=GPS)

// SE DEFINE LA DIRECCION DEL PUERTO C PARA TX RS232 A  PC

#use rs232(baud=4800, xmit=PIN_C6, rcv=PIN_C7, bits=8, stream=CENTRAL)


void main()
{
   char data[30];
   char flag;
   int i;
   delay_ms(2000);

   
   while(true)
   {
      flag=getch();
     
      if(flag=='G')
      {
         flag=getch();
         if(flag=='G')
         {
            flag=getch();
            if(flag=='A')
            {
               for(i=0;i<30;i++)
               {
             
                  data =getc();
                  if(data==',')
                     data =getc();
               }     
                 
                  lcd_gotoxy(1,1);
                  printf(lcd_putc,"%c%c:%c%c:%c%c",data[0],data[1],data[2],data[3],data[4],data[5]);
                 lcd_gotoxy(1,2);
                  printf(lcd_putc,"%c%c %c%c%c%c%c%c%c %c",data[6],data[7],data[8],data[9],data[10],data[11],data[12],data[13],data[14],data[15]);
                  lcd_gotoxy(1,3);
                printf(lcd_putc,"%c%c%c %c%c%c%c%c%c%c %c",data[16],data[17],data[18],data[19],data[20],data[21],data[22],data[23],data[24],data[25],data[26]);
                lcd_gotoxy(1,4);
                 printf(lcd_putc,"%c, %c%c",data[27],data[28],data[29]);


//Para mandar los datos via RS232.

                 fprintf("%c%c:%c%c:%c%c",data[0],data[1],data[2],data[3],data[4],data[5]);
                 
                  fprintf("%c%c %c%c%c%c%c%c%c %c",data[6],data[7],data[8],data[9],data[10],data[11],data[12],data[13],data[14],data[15]);
                 
                 fprintf("%c%c%c %c%c%c%c%c%c%c %c",data[16],data[17],data[18],data[19],data[20],data[21],data[22],data[23],data[24],data[25],data[26]);
               
                 fprintf("%c, %c%c",data[27],data[28],data[29]);
            }

            }
         }     
      }       
   }


**********************************************************

En aquel tiempo unicamente pude lograr  mandar los datos a un LCD DE 4X16 LINEAS, ya que  nunca pude resolver la situacion de como enviar los datos via serie usando el protocolo rs232, ya que inicialmente creia que al colocar la instruccion Printf los datos se desplegarian de forma automatica en la hiperterminal, estos son los codigos usados para la configuracion de la comunicacion.

#use rs232(baud=4800, xmit=PIN_B0, rcv=PIN_B1, bits=8, stream=GPS)
#use rs232(baud=4800, xmit=PIN_C6, rcv=PIN_C7, bits=8, stream=CENTRAL)

Y estos los codigos para mandar los datos via LCD y RS232

 lcd_gotoxy(1,1);
                  printf(lcd_putc,"%c%c:%c%c:%c%c",data[0],data[1],data[2],data[3],data[4],data[5]);
                 lcd_gotoxy(1,2);
                  printf(lcd_putc,"%c%c %c%c%c%c%c%c%c %c",data[6],data[7],data[8],data[9],data[10],data[11],data[12],data[13],data[14],data[15]);
                  lcd_gotoxy(1,3);
                printf(lcd_putc,"%c%c%c %c%c%c%c%c%c%c %c",data[16],data[17],data[18],data[19],data[20],data[21],data[22],data[23],data[24],data[25],data[26]);
                lcd_gotoxy(1,4);
                 printf(lcd_putc,"%c, %c%c",data[27],data[28],data[29]);


Para mandar los datos via RS232.

                 fprintf("%c%c:%c%c:%c%c",data[0],data[1],data[2],data[3],data[4],data[5]);
                 
                  fprintf("%c%c %c%c%c%c%c%c%c %c",data[6],data[7],data[8],data[9],data[10],data[11],data[12],data[13],data[14],data[15]);
                 
                 fprintf("%c%c%c %c%c%c%c%c%c%c %c",data[16],data[17],data[18],data[19],data[20],data[21],data[22],data[23],data[24],data[25],data[26]);
               
                 fprintf("%c, %c%c",data[27],data[28],data[29]);
            }

Si me lo permite estas fueran las ultimas actividades que he realizado, mismas que tienen su origen en el presente block , no obstante el compilador CCS Ver.4.0 que tengo me marca un error, en el sentido que al usar la intruccion fprintf el areglo de String esta fuera de rango este fue la instrucciones usadas, por lo que es fecha en que no puedo enviar los registros a la computadora.

 Ante este hecho, he estado cambiando los formatos de la instruccion printf en vez de caracteres, he colocado string %s %s, y algunos otros formatos de salida %xl, y %UL pero sin ningun resultado satisfactorio.

Por todo lo anterior me estoy tomando la libertad de molestarle una vez mas y pedirle su ayuda, en el sentido de como conseguir el enviar los datos  del GPS Parallax tanto al LCD 4x16 como Via serial a la computadora, de hecho estoy usando el PIC 16F877 y un Max 232, y he probado la conexion del USART y si se puede mandar texto, pero no puedo conseguir que los datos que se capturan por el puerto Bo del MODULO GPS  sean  tx por el pinC6 y c7 del PIC 16F877, YA QUE EL CODIGO MOSTRADO ANTERIORMENTE, AL QUITAR FPRINTF Y SUSTITUIRLO POR PRINTF SI PERMITE VISUALIZAR LOS DATOS UNICAMENTE EN EL LCD Y NO EN LA COMPUTADORA.

Agradecidiendo de antemano su ayuda, yo quedo de usted a sus ordenes en el presente Block y en  la siguiente Direccion, con cualquier tipo de orientacion que por favor me puedan brindar..

E_mail:gamartinezch@yahoo.com.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Ayuda GPS PARALLAX 28146
« Respuesta #1 en: 29 de Mayo de 2012, 17:37:12 »
Creo que tu problema es que para usar fprintf() debes decirle a que puerto estas enviando el dato, ya que seguramente de otro modo lo hara por vaya a saber cual...

Si ves la ayuda de CCS, encontraras la respuesta:

Citar
fprintf (stream, cstring, values...)

 
 
Parameters:
 String is a constant string or an array of characters null terminated. Values is a list of variables separated by commas, fname is a function name to be used for outputting (default is putc is none is specified. Stream is a stream identifier (a constant byte)

 

Debes decirle a que Sream va dirigido el mensaje, este Stream debera ser Central en tu caso.

Deberia quedarte algo asi:

Código: C
  1. fprintf(Central,"%c, %c%c",data[27],data[28],data[29]);

Suerte en las pruebas... :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Ayuda GPS PARALLAX 28146
« Respuesta #2 en: 30 de Mayo de 2012, 14:46:50 »
Hola a ambos.
Gamch333 subí nuevamente tu código usando geshi porque sospecho que hay caracteres que no se están visualizando en el post.
Saludos
Jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado GAMCH333

  • PIC10
  • *
  • Mensajes: 8
Gracias por la Ayuda GPS PARALLAX 28146
« Respuesta #3 en: 13 de Junio de 2012, 13:20:32 »
 :) :) :)

Reciban ustedes un cordial saludo, de antemano muchas gracias  a todos ustedes por sus finas atenciones, a la vez que les ofrezco una disculpa,  ya que en semanas pasadas sufri un accidente en mi tobillo, que me imposibilito el poder seguir con mis estudios y estar en contacto, y hace un par de dias que he empezado a apoyar mi pie,  por lo que esta mañana me he conectado ha internet, he seguido sus indicaciones, y en efecto ya se han desplegado los datos via rs232 y lcd, gracias por su tiempo y sus valisas indicaciones, este es el codigo que se programo, y hace que el sistema funcione muy bien, me siento :-/ :-/ :-/ :-/.


************************************************************************************************************************************************

#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)

// SE DEFINE LA DIRECCION DEL PUERTO A,B,C COMO ELEMENTO DE ENTRADA SALIDA.
// ASI COMO LA DIRECCION DE MEMORIA DE CADA UNO DE LOS DEMAS PUERTOS A,B,C.
// DICHA INFORMACION SE ENCUENTRA ESPECIFICADA EN EL REGISTRO DE MEMORIA DEL PIC.
// (MAYOR INFORMACIÓN DATA SHEET DE MICROCHIP WWW.MICROCHIP.COM

#use fast_io (b)
#use fast_io (c)
#use fast_io (d)
#byte porta = 5
#byte portb = 6
#byte portc = 7


// SE DEFINE LA DIRECCION DEL PUERTO BO PARA ENTRDA GPS PARALLAX .

#use rs232(baud=4800, xmit=PIN_B0, rcv=PIN_B1, bits=8, stream=GPS)

// SE DEFINE LA DIRECCION DEL PUERTO C PARA TX RS232 A  PC

#use rs232(baud=4800, xmit=PIN_C6, rcv=PIN_C7, bits=8, stream=CENTRAL)


void main()
{
   char data[30];
   char flag;
   int i;
   delay_ms(2000);

   
   while(true)
   {
      flag=getch();
     
      if(flag=='G')
      {
         flag=getch();
         if(flag=='G')
         {
            flag=getch();
            if(flag=='A')
            {
               for(i=0;i<30;i++)
               {
             
                  data =getc();
                  if(data==',')
                     data =getc();
               }     
                 
                  lcd_gotoxy(1,1);
                  printf(lcd_putc,"%c%c:%c%c:%c%c",data[0],data[1],data[2],data[3],data[4],data[5]);
                 lcd_gotoxy(1,2);
                  printf(lcd_putc,"%c%c %c%c%c%c%c%c%c %c",data[6],data[7],data[8],data[9],data[10],data[11],data[12],data[13],data[14],data[15]);
                  lcd_gotoxy(1,3);
                printf(lcd_putc,"%c%c%c %c%c%c%c%c%c%c %c",data[16],data[17],data[18],data[19],data[20],data[21],data[22],data[23],data[24],data[25],data[26]);
                lcd_gotoxy(1,4);
                 printf(lcd_putc,"%c, %c%c",data[27],data[28],data[29]);


//Para mandar los datos via RS232.

     
              fprintf(Central, "%c%c:%c%c:%c%c",data[0],data[1],data[2],data[3],data[4],data[5]);
                 
                  fprintf(Central,"%c%c %c%c%c%c%c%c%c %c",data[6],data[7],data[8],data[9],data[10],data[11],data[12],data[13],data[14],data[15]);
                 
                     fprintf(Central,"%c%c%c %c%c%c%c%c%c%c %c",data[16],data[17],data[18],data[19],data[20],data[21],data[22],data[23],data[24],data[25],data[26]);
               
                          fprintf(Central,"%c, %c%c",data[27],data[28],data[29]);            }

            }
         }     
      }       
   }

**********************************************************************************************************************************************


Si me lo permiten, quisiera aprovechar la ocasion para preguntarles que mas se puede hacer con un GPS como este, ya que el dia Viernes me voy ha entrevistar con mi tutor y comentarle hasta  hoy lo que tenemos, y la verdad me siento desorientado, pues no se que mas provecho se puede obtener de este sisitema que empezo como un juego, con el modulo GPS de parallax, y ahora no se que mas se pueda realizar , escucho comentarios que se pueden guardar en una memoria usb, que se pueden graficar las coordenadas en Excell, en fin una serie de opiniones de mis amigos, pero en verdad quisera saber mas de meteorologia y sobre todo para que puede utilizarse un sistema como este.

Señores les agradezco una vez mas sus atenciones, y si me lo permiten por favor me pueden seguir enseñando esto de programacion de CCS , me parece muy interesente y muy bonito el aprender a programar micross....

Saludos desde Iztlan del Rio, Mexico... ((:-)) ((:-)) ((:-)) ((:-)) ((:-))