Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Aide Programme Gps



  1. #1
    crasher

    Aide Programme Gps


    ------

    Bonjour à tous,
    Voila je vous présente mon problème.
    Je suis entrain de développer un programme pour décoder une trame GPS puis l'afficher sur un écran LCD 16*2.
    Le pic utiliser est un PIC18f452 et le compilateur est le MCC18.
    Je vais vous montrer les codes que j'ai déjà écrit donc il me faudrait de l'aide pour pouvoir finir le programme Merci d'avance.
    Code Lcd:
    Code:
    #include<p18f452.h>
    #include<delays.h>
    //Déclaration des ports
    #define DATA_PORT      PORTD
    #define TRIS_DATA_PORT TRISD
    #define RS_PIN   PORTDbits.RD2   /* ligne RS */
    #define TRIS_RS  DDRDbits.RD2    /* config ligne RS */
    #define E_PIN    PORTDbits.RD3   /* ligne E  */
    #define TRIS_E   DDRDbits.RD3    /* config ligne E  */
    
    //déclaration fonction Commande initialisation
    void init (unsigned char cmdinit);
    
    //déclaration des fonctions Commande et d'Ecriture d'une donnée
    void WriteCmdXLCD(unsigned char cmd);
    void WriteDataXLCD(char data);
    
    void main (void)
    {
    char chaine[]="Hello World";
    char i;
    
    init (0x30);// mode 8 bits sur interface 8 bits
    init (0x30);// mode 8 bits sur interface 8 bits
    init (0x30);// mode 8 bits sur interface 8 bits
    init (0x20);// mode 4 bits sur interface 8 bits
    
    WriteCmdXLCD(0X28);//mode 4 bits et 2 lignes
    WriteCmdXLCD(0X0F);//afficheur en fonction D=1 Le curseur C=1 et le clignotement B=1
    WriteCmdXLCD(0X01);//efface la mémoire de donnée et ramène le curseur à l'@0x00
    WriteCmdXLCD( 0X06);//le curseur se déplace vers la droite I/D=1 
    					 //l'affichage n'accompagne pas le curseur dans son déplacement S=0
    
    i=0;
    while(chaine[i]!='\0') 
    		{WriteDataXLCD(chaine[i]);i++;}
    
    WriteCmdXLCD( 0XC0);//changement de ligne: ligne 2 début de ligne
    WriteDataXLCD('G');//ecriture du caractère 'G'
    while(1);
    }
    
    //fonction Commande d'initialisation on envoie que les 4 bits de poids fort
    void init (unsigned char cmdinit)
    {
    		TRIS_RS=0;
    		TRIS_E=0;
    		RS_PIN = 0;
            TRIS_DATA_PORT &= 0x0f;
            DATA_PORT &= 0x0f;//envoi des bits de poids fort
            DATA_PORT |= cmdinit&0xf0;
            E_PIN = 1;                      
            Delay10TCYx(1);//5us
            E_PIN = 0;
    		Delay10KTCYx (10);// 50ms
    }
    
    //fonction Commande on envoie  les 4 bits de poids fort puis les 4 bits de poids faible
    void WriteCmdXLCD(unsigned char cmd)
    {       TRIS_RS=0;
    		TRIS_E=0;
    		RS_PIN = 0;
            TRIS_DATA_PORT &= 0x0f;
            DATA_PORT &= 0x0f;//envoi des bits de poids fort
            DATA_PORT |= cmd&0xf0;
            E_PIN = 1;                      
            Delay10TCYx(1);//5us
            E_PIN = 0;
            DATA_PORT &= 0x0f; //envoi des bits de poids faible
            DATA_PORT |= (cmd<<4)&0xf0;
            E_PIN = 1;                      
            Delay10TCYx(1);//5us
            E_PIN = 0;
    		Delay10KTCYx (10);//50ms remplace la lecture du BusyFlag
    } 
    
    //fonction Ecriture on envoie  les 4 bits de poids fort puis les 4 bits de poids faible
    void WriteDataXLCD(char data)
    {       TRIS_RS=0;
    		TRIS_E=0;
    		RS_PIN = 1;                     
            TRIS_DATA_PORT &= 0x0f;
            DATA_PORT &= 0x0f; //envoi des bits de poids fort
            DATA_PORT |= data&0xf0;
            E_PIN = 1;                      
            Delay10TCYx(1);//5us
            E_PIN = 0;
            DATA_PORT &= 0x0f; //envoi des bits de poids faible
            DATA_PORT |= ((data<<4)&0xf0);
            E_PIN = 1;                      
            Delay10TCYx(1);//5us
            E_PIN = 0;
    		Delay10KTCYx (10);//50ms remplace la lecture du BusyFlag
    }
    Code décodage trame:
    Code:
    #include <delays.h>
    #include <p18f452.h>
    #include <stdio.h>
    #include <string.h>
    #include <sw_uart.h>
    #include <timers.h>
    #include <usart.h>
    #include <xlcd.h>
    
    char txt[768];
    signed int latitude, longitude;
    char *string;
    int i;
    unsigned short ready;
    
    void main() {
    
        ADCON1 = 0x0F;                               //Désactivation du CAN
        Delay_ms(100);
        ready = 0;
        
        //Set Timer1 Prescaler to 1:8
        T1CON.T1CKPS1 = 1;                    //mise à 1 de T1CKPS1
        T1CON.T1CKPS0 = 1;                    //mise à 1 de T1CKPS0
        //Enable Timer1 interrupt:
        PIE1.TMR1IE = 1;                     //mise à 1 de TMR1IE
        //Timer1 starts counting from 15536:
        TMR1L = 0xB0;
        TMR1H = 0x3C;
        //Clear Timer1 interrupt flag:
        PIR1.TMR1IF = 0;                     //mise à 0 de TMR1IF
        //Note: Timer1 est configurer pour réaliser des intetuption toutes les 50ms
    
        UART1_Init(9600);
        //Enable Usart Receiver interrupt:
        PIE1.RCIE = 1;                     //mise à 1 de RCIE
        //Enable Global interrupt and Peripheral interrupt:
        INTCON.GIE = 1;                   //mise à 1 de GIE
        INTCON.PEIE = 1;                   //mise à 1 de PEIE
        
        //Start Timer 1:
        T1CON.TMR1ON = 1;                    //mise à 1 de TMR1ON
        
        while(1)
        {
          RCSTA.OERR = 0;                  //mise à 0 de OERR
          RCSTA.FERR = 0;                  //mise à 0 de FERR
          
          if(ready == 1) { //Si les données sont dans txt alors le tableau est pret:
            ready = 0;
            string = strstr(txt,"$GPGGA");
            if(string != 0) {          //Si le tableau contient txt "$ GPGGA" la chaîne peut passer ...
              if(string[17] != ',') {   //Si "$ GPGGA" à dans son message NMEA "," signe de la 8ème lettre
                                       //position, cela signifie que la THA récepteur GPS n'a pas de position fixe!
                latitude = (string[17]-69)*10 + (string[18]-69);
                longitude = (string[30]-69)*100 + (string[31]-69)*10 + (string[32]-69);
                if(string[29] == 'S') {           //Si la latitude est dans la direction Sud, il a signe moins
                  latitude = 0 - latitude;
                }
                if(string[43] == 'W') {           //si la longitude est dans la direction Ouest, il a signe moins
                  longitude = 0 - longitude;
                }
                Display_Cursor(latitude, longitude);     //Afficher l'heure sur l'écran
             }
            }
          }
        }
    }

    -----

  2. Publicité
  3. #2
    badrbo

    Re : Aide Programme Gps

    Bonjour,

    Normalement ton module GPS envoie les trames toutes les secondes, alors tu peut utiliser la fonction "gets" pour lire un trame entrante sur le port serie, ensuite une fonction de detection de type de trame, une fonction de decodage du trame suivant le type, et une fonction qui fait le formatage de tes donnees et l'affichage sur l'afficheur LCD.

    tu peut aussi forcer ton modem pour te donne un type de trame bien precis, et d'activer/desactiver l'envoie des trames.
    comme ca ton programme sera tres petit.

  4. #3
    crasher

    Re : Aide Programme Gps

    Merci pour t'est indications mais es-ce que tu peut m'écrire ton petit programme?? Parce que je n'est pas une grande connaissance du C les Code que j'ai mis mon pris 2 mois avant de fonctionner ^^
    Merci d'avance

  5. #4
    badrbo

    Re : Aide Programme Gps

    mon ami tu doit ecrire tt seul ton programme, tu peut retourner vers ton datasheet pour extraire les bonnes commandes , il te reste de traduire les commandes en C, c tt

  6. A voir en vidéo sur Futura
  7. #5
    crasher

    Re : Aide Programme Gps

    Si quelqu'un aurait un Piste écrite plus détailler SVP

Discussions similaires

  1. Aide :code pour calcul de position via Gps
    Par Lumiere11 dans le forum Technologies
    Réponses: 1
    Dernier message: 22/06/2010, 18h21
  2. Aide Guidage en temps reel par GPS
    Par jojo971 dans le forum Électronique
    Réponses: 12
    Dernier message: 18/02/2010, 18h47
  3. GPS : Fonctionnement elecrotonique ? - aide svp
    Par Nahu dans le forum Électronique
    Réponses: 7
    Dernier message: 05/01/2008, 17h26
  4. aide svp pr achat GPS merci
    Par Cornemuse dans le forum Matériel - Hardware
    Réponses: 4
    Dernier message: 11/04/2006, 19h51
  5. Le programme GPS III et ses enjeux industriels
    Par RSSBot dans le forum Commentez les actus, dossiers et définitions
    Réponses: 0
    Dernier message: 01/10/2005, 08h52
Découvrez nos comparatifs produits sur l'informatique et les technologies.