Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

GPS Android <-> PIC18F
Claudius
Avatar de l’utilisateur
Passionné
Passionné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#21 Message par Claudius » dim. 28 août 2016 13:04

Re,

Allez, nous allons faire le calcul ensemble:
Informations de ton GPS: Latitude: 4550.72709 E + Long: 00502.32503 N

- De 4550.72709 on extrait 45° et 50.72709'; 50.72709' = (50.72709' / 60) = 0.8454515°
- De 00502.32503 on extrait 5° et 2.32503'; 2.32503' = (2.32503' / 60) = 0.0387505°

correspondant bien à la localisation de Google Earth: 45.8454515 + 5.0387505 que tu indiques => Ta localisation dans le département de l'Ain (à confirmer / infirmer :-) )

Question: Je ne comprends pas le "alors que ma mesure me donne 40Kms plus au sud ??? et 1kms plus à L'ouest ?". Est-ce à dire que le GPS de ton mobile Android indique cette localisation ? Auquel cas, c'est ton GPS "maison" qui présente des problèmes ou que la trame GPGGA est mal décortiquée ?!..

NB: Si tu le souhaites, je peux publier une trace avec ta localisation exacte que je te ferai parvenir par message privé pour préserver ta vie privée et on verra bien l'exactitude ou non des calculs !...

@ "Pas aussi simple que la soluce GPS Android !": Bienvenu au club :-)

Edit: S'il y a effectivement 40 kms de différence vers le sud, cela correspond à un écart de (40 / 111) = 0.36° sur la latitude et 1 km à l'ouest donne un écart de (1 / 111) * 0.707 = 0.006° sur la longitude (en considérant en 1ère approximation que la latitude est voisine de 45° car cos(45°) = sqrt(2) / 2 = 0.707 - cf. Méridien -> Propriétés)

GPS Android <-> PIC18F
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#22 Message par paulfjujo » dim. 28 août 2016 15:21

OK pour les calculs, mais cela ne repond pas à mes 2 questions..
bref, PB resolu ..
je me suis servi de U-CENTER qui affiche les trames GPGGA et aussi les coordonnees en degres

d'ou le bout de code (bien étalé !)
permettant de retouver les bonnes coordonnees et unites

Code : Tout sélectionner


     UART1_Write_CText
("  Long: "); 
            
//   UART1_Write_Text(Longitude);
            //  UART1_Write(TAB);
              lon= atof(Longitude);
              f1=lon/100.0;
              f1=floor(lon/100.0);
              f2=(lon/100)-f1;
              lon=f1+f2*100/60;
              fltToa (lon,txt,6);
              UART1_Write_Text(txt);
              UART1_Write(' ');UART1_Write(NSid);
              UART1_Write(TAB);
 


je sors maintenant sur mon terminal les donnees "corrigées" au lieu des coordeonnees brutes NMEA


Code : Tout sélectionner


 Init ADC1
 Arme IT UART1 
& UART2
BP1
=1   ;BP2=1    ; EA1=   627
GPS NEO
-6M : $GPGGA,130207.00,4550.72598,N,00502.32675,E,1,07,1.26,199.9,M,47.3,M,,*56
Trame GPS recue 
:
Utc: 130207.00    Long: 5.038765 N         Latitude: 45.845403 E           Altitude: 199.9         Satel.: 07       Fix: 1
Decodage Partiel OK
....
BP1=1   ;BP2=1    ; EA1=   625
GPS NEO
-6M : $GPGGA,130527.00,4550.72219,N,00502.32313,E,1,07,1.55,196.0,M,47.3,M,,*5A
Trame GPS recue 
:
Utc: 130527.00    Long: 5.038715 N         Latitude: 45.845355 E           Altitude: 196.0         Satel.: 07       Fix: 1
Decodage Partiel OK


Correspondance_lecture_nmea_position_degres.jpg


l'ecart Lat et Lon est maintenant < 10M, GPS à l'interieur à 1,5M d'une fenetre (sans ANTenne)

nota:

l'altitude coté U-Center est alt =234.3m (HAE)
et ALT=195m (MSL) trame NMEA .. mais c'est celle ci qui m'interesse (idem google earth)
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

GPS Android <-> PIC18F
Claudius
Avatar de l’utilisateur
Passionné
Passionné
Messages : 260
Âge : 69
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#23 Message par Claudius » dim. 28 août 2016 15:48

Ok, content pour toi que tu saches et confirmes ... où tu es à 10 mètres près ;-)

Sinon, entièrement d'accord avec le bout de code (qui pourrait être optimisé entre nous)

Code : Tout sélectionner

...
lon= atof(Longitude);
f1=lon/100.0;
f1=floor(lon/100.0);
f2=(lon/100)-f1;
lon=f1+f2*100/60;
...

GPS Android <-> PIC18F
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#24 Message par paulfjujo » dim. 28 août 2016 15:52

Claudius a écrit :Sinon, entièrement d'accord avec le bout de code (qui pourrait être optimisé entre nous)


exit je m'attendais à ta réaction, c'est pourquui j'ai rajouté le terme "bout de code (bien étalé !)"
Aide toi, le ciel ou FantasPic t'aidera

GPS Android <-> PIC18F
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#25 Message par paulfjujo » dim. 28 août 2016 17:14

j'ai testé pour vous, la libray Nmea de mikroC ..
dont le programme de test est prevu pour un 18F46K22

adapté à ma carte clicker2 PIC18F87J50
sans preciser le type de GPS ..d'ailleurs.
mais avec 19200 bauds et UART2 sur GPS
..avec sortie sur UART1 Display PC via PL2303 USB ( car mon LCD est en I2C et non //))

la librairie doit etre instalée via Tools , Package Manager
et validée (cochée) de meme que UART




Code : Tout sélectionner

// ********************************************************************************
// ******************** NMEA Library Example for Clicker2 ************************
// ********************************************************************************
//
// Setup: 
// - GPS module should be connected to RG1 pin (UART2 RX)
// - Change the baud rate defined in preprocessor to match that of your GPS module
//
//*********************************************************************************

#define BAUD_RATE 19200   // was 9600

/* Begin LCD 2x16 mode connections
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD connections
*/

//  Specific Clicker2 18F

// specific to Clicker2 PIC18F87J50
sbit LD1 at LATD4_bit;
sbit LD2 at LATE4_bit;
sbit LD1_Direction at TRISD4_bit;
sbit LD2_Direction at TRISE4_bit;

sbit RE6_FAULT at RE6_bit;
sbit RE5_SENSEL at LATE5_bit;   // cde FET M1
sbit RJ5_Stat at RJ5_bit;
sbit RF6_VSENSE at RF6_bit;    // mesure


sbit Led_Rouge at LATD4_bit;
sbit Led_Rouge_Directiont at TRISD4_bit;

sbit BP1 at RD7_bit;
sbit BP2 at RH3_bit;
sbit BP1_Direction at TRISD7_bit;
sbit BP2_Direction at TRISH3_bit;



sbit NMEA_IntFlag at RC2IF_bit;  // NMEA Library RX Interrupt flag

char buffer[128];                // Primary buffer
char nmea[128];                  // NMEA sentence
char rcvd = 0;                   // NMEA sentence received flag


void CRLF1();



void CRLF1()
{
UART1_Write(13);
UART1_Write(10);
}





void interrupt() {
   NMEA_IntHandler();
}

// Callback function called on reception of NMEA sentence
void NMEA_DataReceived() {
   rcvd = 1;
}

void DisplayData(char * caption, char * txt) {
   UART1_Write_Text(caption);
   UART1_Write(9);
   UART1_Write_Text(txt);
   CRLF1();
 /*
   Lcd_Cmd(_LCD_CLEAR);
   Lcd_Out(1, 1, caption);
   Lcd_Out(2, 1, txt);
 */
   Delay_ms(1000);
}



 void Hardware_Init(void)
 {

  ANCON0=0xFD ; // AN1= analog
  ANCON1=0xFF; // No analog on AN15--AN10
  TRISA=0xFF;
  TRISA2_bit=0; // output for UART asm TX output
  TRISB=0xFF;
  TRISD=0xFF;
  TRISC=0xFF;
  TRISG=0xFF;

  TRISD6_bit=0;

  BP1_Direction = 1;         // Set direction for buttons
  BP2_Direction = 1;
  LD1_Direction = 0;        // Set direction for LEDs
  LD2_Direction = 0;
  LD1 = 0;                  // turn off LEDs
  LD2 = 0;
  //PPS_Direction=1;
  }

void main() {
   char gps_data[20];
   char tmp[2];

  // ANSELB = 0;
  // ANSELC = 0;
   Hardware_Init() ;

  // Lcd_Init();
  // Lcd_Cmd(_LCD_CLEAR);
  // Lcd_Cmd(_LCD_CURSOR_OFF);

   UART1_Init(38400);
   UART2_Init(BAUD_RATE);

   NMEA_Init(&UART2_Read, buffer, sizeof(buffer));

   RC2IE_bit = 1;   // UART2 Interrupt Enable
   PEIE_bit  = 1;   // Peripheral Interrupt Enable
   GIE_bit   = 1;   // Global Interrupt Enable
   UART1_Write_Text("Test NMEA library with clicker2 PIC18F87J50\r\n");
    UART1_Write_Text("GPS NEO-6M sur RG1 & RG2 UART2 at 19200 bds\r\n");
      UART1_Write_Text("Display via UART1 RC7 RC6 on TeraTeerm terminal 38400 bds\r\n");
   CRLF1();
   while(1) {
      if (rcvd) {
         strcpy(nmea, buffer);   // double buffering

         // If checksum is correct and sentence is GGA
         if (NMEA_IsValid(nmea) && strstr(nmea, "$GPGGA")) {
            // Display UTC time
            NMEA_Split(gps_data, nmea, ',', 1);
            DisplayData("UTC Time:", gps_data);

            // Display latitude
            NMEA_Split(gps_data, nmea, ',', 2);
            NMEA_Split(tmp, nmea, ',', 3);
            strcat(gps_data, tmp);
            DisplayData("Latitude:", gps_data);

            // Display longitude
            NMEA_Split(gps_data, nmea, ',', 4);
            NMEA_Split(tmp, nmea, ',', 5);
            strcat(gps_data, tmp);
            DisplayData("Longitude:", gps_data);

            // Display fix quality
            NMEA_Split(gps_data, nmea, ',', 6);
            DisplayData("Fix quality:", gps_data);

            // Display number of satellites
            NMEA_Split(gps_data, nmea, ',', 7);
            DisplayData("Num of sats:", gps_data);
           
            CRLF1
();
         }
         rcvd = 0;
      }
   }
}
/*


le resultat sur ecran

Code : Tout sélectionner



Test NMEA library with clicker2 PIC18F87J50
GPS NEO
-6M sur RG1 & RG2 UART2 at 19200 bds
Display via UART1 RC7 RC6 on TeraTeerm terminal 38400 bds

UTC Time
:       150447.00
Latitude
:       4550.72523N
Longitude
:      00502.32314E
Fix quality
:    1
Num of sats
:    10

UTC Time
:       150455.00
Latitude
:       4550.72499N
Longitude
:      00502.32306E
Fix quality
:    1
Num of sats
:    09



Attention!! à noter que LON et LAT sont en donnees brutes ! et que l'altitude n'y figure pas ?

C'est EASY avec la librairie , mais on n'apprend rien ! .. de ses propres echecs
Aide toi, le ciel ou FantasPic t'aidera

GPS Android <-> PIC18F
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#26 Message par Guest » dim. 28 août 2016 20:33

Bonsoir

Ici le détail et format de la NMEA0183 par exemple
http://www.dossiers-techniques.fr/geolo ... -0183.html

Après les degrés ,c'est des décimales de degrés .Pour avoir le format minute secondes il nous faut passer en décimale au centième de seconde, donc diviser par 60 , c'est ce que fait Claudis .et la finalité que j'ai donné en #17 .C'est la norme NMEA0180

Donc affaire réglée la suite

A+

GPS Android <-> PIC18F
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#27 Message par Guest » lun. 29 août 2016 08:00

c'est encore une histoire de conversion :wink:

A+

GPS Android <-> PIC18F
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 51
Enregistré en : août 2015
Localisation : Dans l'est de la France

#28 Message par sylvain54 » lun. 29 août 2016 11:35

Très intéressant tout ça. cela va m'aider dans mon projet à base de GPS que j'ai dans ma besace.

Merci !

GPS Android <-> PIC18F
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#29 Message par paulfjujo » lun. 29 août 2016 12:39

maï a écrit :Ici le détail et format de la NMEA0183 par exemple
http://www.dossiers-techniques.fr/geolo ... -0183.html


Merci, c'est bien l'info claire et détaillée que j'attendais pour comprendre cette syntaxe.
Trame_GPGGA.jpg



Aujourd'hui je test un autre GPS + COMPASS Ublox 7N
La partie GPS est quasi identhique au NE0-6M
GPS testé OK avec U-CENTER
Image2.jpg


COMPAS en I2C ... à suivre
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

GPS Android <-> PIC18F
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#30 Message par Guest » lun. 29 août 2016 18:20

bonjour
Il n'y pas de quoi Paul, très content que tu sois OK avec la NMEA .Puisque c'est une conversion,et que j'aime bien les conversions :wink: je suis assez tenté de faire cela en ASM , pour 18F, juste pour voir ...(performances)
Mais je dois finir ma commande de mes volets en analogique ,je posterais cela dans réalisation, Puis voir ma fille au Japon et de retour je mis colle

Allez

A+


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 131 invités