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

Traduction



  1. #1
    invitef97198f3

    Traduction


    ------

    Bonjour j'ai besoin d'un peu d'aide.
    J'ai un morceau de programme qui me parait bizare.
    Mon professeur me la donner comme sa mais il n'est pas bon pour mon PIC.
    J'utilise un PIC 18F452, un compilateur MCC18 et j'écrit en C.
    voici le code à traduire pour mon PIC. Car je n'y arrive pas.
    Code:
    #include<delays.h>
    #include <memory.h> // Pour les memcpy entre autres
    #include <p18f452.h> // Pour le pic
    #include <stdio.h> // Pour le FILE
    #include <stdlib.h> // Pour les conversions
    #include <string.h> // strstr
    #include <sw_uart.h>
    #include <timers.h> // Pour les Timers
    #include <usart.h> // Pour la liaisons série
    #include <xlcd.h>
    
    #define MAXSIZE 256
    
    void main (void) {
    char stringRead[MAXSIZE]; // buffer pour recevoir les trames
    
    FILE *gpsFile; // Handle de fichier
    
    gpsFile = fopen("Log.TXT","r"); // Ouverture du ficher
    if(gpsFile == NULL)
    {
    printf("Erreur d'ouverture du fichier\n");
    return -1;
    }
    while(fgets(stringRead,MAXSIZE,gpsFile) !=NULL) // Lecture d'une trame ccomplète
    {
    if(memcmp(stringRead,"$GPGGA",6)==0) // Est-ce une GGA ?
    {
    decode_GPGGA(stringRead);
    }
    }
    fclose(gpsFile); // Fermeture du fichier
    return (0);
    } //fin main
    
    // ****************************
    // * Decodage de la trame GGA *
    // ****************************
    void decode_GPGGA(char *stringRead)
    {
    char *debut, *med,*fin, tmpbuff[32];
    int l;
    latitude maLatitude;
    temps monTemps;
    memset(tmpbuff,0x00,32); // Initialisation de tmpbuff à 0x00h
    debut = strstr(stringRead,",")+1; // On cherche la première ","
    // Décodage de l'heure
    fin = strstr(debut,","); // On cherche la première ","
    l = fin - debut;
    med = strstr(debut,"."); // On cherche le point "."
    
    memcpy(&tmpbuff,debut,2); // On l'heure (2 chiffres)
    monTemps.heure = atoi(tmpbuff); // On converti en numérique
    
    memcpy(&tmpbuff,debut+2,2); // Idem pour les minutes
    monTemps.minut = atoi(tmpbuff); // Idem
    
    memcpy(&tmpbuff,debut+4,2); // Idem pour les secondes pas de centièmes
    monTemps.secon = atoi(tmpbuff); // Convertion en numérique
    // Puis en affiche le tout
    printf("Heure %2d:%2d:%2d - ",monTemps.heure,monTemps.minut,monTemps.secon);
    
    // Décodage Latitude
    debut = strstr(debut,",")+1; // On cherche la première ","
    med = strstr(debut,"."); // On cherche le point "."
    fin = strstr(debut,","); // On cherche la suivante ","
    memcpy(&tmpbuff,debut,2); // Récupération des degés
    maLatitude.degre = atoi(tmpbuff); // On converti en numérique
    
    memcpy(&tmpbuff,debut+2,2); // Idem pour les minutes
    maLatitude.minut = atoi(tmpbuff); // ASCII => Numérique
    
    l = (fin - med); // Nombre de décimales pour les secondes (en degés)
    memcpy(&tmpbuff,debut+4,l); // On les récupère
    maLatitude.secon = (atof(tmpbuff))*60.0; // ASCII => Numérique => en secondes
    debut = strstr(debut,",")+1; // On cherche la première ","
    // On affiche le tout (y compris N/S)
    printf("Latitude %2d-%2d-%2.3f %1.1s\n",maLatitude.degre,maLatitude.minut,maLatitude.secon,debut);
    
    // Décodage Longiture ici
    debut = strstr(debut,",")+1; // On cherche la première ","
    med = strstr(debut,"."); // On cherche le point "."
    fin = strstr(debut,","); // On cherche la suivante ","
    memcpy(&tmpbuff,debut,2); // Récupération des degés
    maLatitude.degre = atoi(tmpbuff); // On converti en numérique
    
    memcpy(&tmpbuff,debut+2,2); // Idem pour les minutes
    maLatitude.minut = atoi(tmpbuff); // ASCII => Numérique
    
    l = (fin - med); // Nombre de décimales pour les secondes (en degrés)
    memcpy(&tmpbuff,debut+4,l); // On les récupère
    maLatitude.secon = (atof(tmpbuff))*60.0; // ASCII => Numérique => en secondes
    debut = strstr(debut,",")+1; // On cherche la première ","
    // On affiche le tout (y compris N/S)
    printf("Latitude %2d-%2d-%2.3f %1.1s\n",maLatitude.degre,maLatitude.minut,maLatitude.secon,debut);
    Merci d'avance

    -----

  2. #2
    freepicbasic

    Re : Traduction

    "fopen" tu as un disque sur ta carte?
    "fprintf" tu as une console sur ta carte ?
    ça se fini comment ton prog il n'y a pas de } à la fin ?
    A+, pat

  3. #3
    ftorama

    Re : Traduction

    je sens surtout que ça va mal finir

    ce programme "n'est pas bon" pour ton PIC...qu'est-ce que ça veut dire?

    ton PIC le recrache par le port B? tu as des erreurs de compilation? il se compile mais ne fonctionne pas?

    Sur ton PIC, elles viennent d'où les trames GPS?

    Je sens bien venir le coup du prof qui donne un exemple de décodage de trame sur PC, à partir d'un fichier, et toi, qui le copie bêtement en pensant que le PIC, par magie, va aller tout seul sur le port série chercher les trames.....c'est bien ça?
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

  4. #4
    invitef97198f3

    Re : Traduction

    J'ai oublier le }
    non je n'est pas de disque sur ma carte donc il faut que je mette la trame en mémoire dans une variable.
    Et non je n'est pas de console mais un écran LCD.
    Que faut-il modifier???

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

    Re : Traduction

    beaucoup de choses.....

    en gros, tu gardes la fonction de décodage decode_GPGGA et tu refais le main(), la gestion du port série, du LCD, etc.
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

  7. #6
    invitef97198f3

    Re : Traduction

    Merci ftorama sa me rassure si ya que le main a refaire.
    Le gps est connecter au port Série du PIC soir le PORT C broches 6 pour le TX et broche 7 pour le RX.
    L'écran LCD est Connecter au PORT D commander en mode 4 bits.

    Code:
    #include<delays.h>
    #include <memory.h> // Pour les memcpy entre autres
    #include <p18f452.h> // Pour le pic
    #include <stdio.h> // Pour le FILE
    #include <stdlib.h> // Pour les conversions
    #include <string.h> // strstr
    #include <sw_uart.h>
    #include <timers.h> // Pour les Timers
    #include <usart.h> // Pour la liaisons série
    #include <xlcd.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  */
    
    #define MAXSIZE 256
    
    //Déclaration de certaines variables
    char txt[768];
    signed int latitude, longitude;
    char *string;
    int i;
    unsigned short ready;
    
    //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);
    
    // Le format des données comme il faut
    typedef struct {
    int heure;
    int minut;
    int secon;
    } temps;
    
    typedef struct {
    int degre;
    int minut;
    double secon;
    char azimut;
    } latitude;
    
    typedef struct {
    int degre;
    int minut;
    double secon;
    char azimut;
    } longiture;
    
    // Les fonctions de décodage
    void decode_GPGGA(char *stringRead);
    void decode_GPRMC(char *stringRead);
    
    void interrupt() {
      if (PIR1.F0 == 1) {        //if interrupt is generated by TMR1IF
        //Stop Timer 1:
        T1CON.F0 = 0;                    //Set TMR1ON to 0
        ready = 1;                       //set data ready
        i = 0;                           //reset array counter
        PIR1.F0 = 0;                     //Set TMR1IF to 0
      }
      if (PIR1.F5 == 1) {        //if interrupt is generated by RCIF
        txt[i++] = UART1_Read();
        if (txt[i-1] == 0)
          i = 0;
        if (i == 768) i = 0;
        //Stop Timer 1:
        T1CON.F0 = 0;                    //Set TMR1ON to 0
        //Timer1 starts counting from 15536:
        TMR1L = 0xB0;
        TMR1H = 0x3C;
        //Start Timer 1:
        T1CON.F0 = 1;                   //Set TMR1ON to 1
        PIR1.F5 = 0;                     //Set RCIF to 0
      }
    }
    
    // Le main()
    void main(void) {
    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
    
    ???????????????????????????
    
    } //fin main
    
    // ****************************
    // * Decodage de la trame GGA *
    // ****************************
    void decode_GPGGA(char *stringRead)
    {
    char *debut, *med,*fin, tmpbuff[32];
    int l;
    latitude maLatitude;
    temps monTemps;
    memset(tmpbuff,0x00,32); // Initialisation de tmpbuff à 0x00h
    debut = strstr(stringRead,",")+1; // On cherche la première ","
    // Décodage de l'heure
    fin = strstr(debut,","); // On cherche la première ","
    l = fin - debut;
    med = strstr(debut,"."); // On cherche le point "."
    
    memcpy(&tmpbuff,debut,2); // On l'heure (2 chiffres)
    monTemps.heure = atoi(tmpbuff); // On converti en numérique
    
    memcpy(&tmpbuff,debut+2,2); // Idem pour les minutes
    monTemps.minut = atoi(tmpbuff); // Idem
    
    memcpy(&tmpbuff,debut+4,2); // Idem pour les secondes pas de centièmes
    monTemps.secon = atoi(tmpbuff); // Convertion en numérique
    // Puis en affiche le tout
    printf("Heure %2d:%2d:%2d - ",monTemps.heure,monTemps.minut,monTemps.secon);
    
    // Décodage Latitude
    debut = strstr(debut,",")+1; // On cherche la première ","
    med = strstr(debut,"."); // On cherche le point "."
    fin = strstr(debut,","); // On cherche la suivante ","
    memcpy(&tmpbuff,debut,2); // Récupération des degés
    maLatitude.degre = atoi(tmpbuff); // On converti en numérique
    
    memcpy(&tmpbuff,debut+2,2); // Idem pour les minutes
    maLatitude.minut = atoi(tmpbuff); // ASCII => Numérique
    
    l = (fin - med); // Nombre de décimales pour les secondes (en degés)
    memcpy(&tmpbuff,debut+4,l); // On les récupère
    maLatitude.secon = (atof(tmpbuff))*60.0; // ASCII => Numérique => en secondes
    debut = strstr(debut,",")+1; // On cherche la première ","
    // On affiche le tout (y compris N/S)
    printf("Latitude %2d-%2d-%2.3f %1.1s\n",maLatitude.degre,maLatitude.minut,maLatitude.secon,debut);
    
    // Décodage Longitude ici
    debut = strstr(debut,",")+1; // On cherche la première ","
    med = strstr(debut,"."); // On cherche le point "."
    fin = strstr(debut,","); // On cherche la suivante ","
    memcpy(&tmpbuff,debut,2); // Récupération des degés
    maLatitude.degre = atoi(tmpbuff); // On converti en numérique
    
    memcpy(&tmpbuff,debut+2,2); // Idem pour les minutes
    maLatitude.minut = atoi(tmpbuff); // ASCII => Numérique
    
    l = (fin - med); // Nombre de décimales pour les secondes (en degrés)
    memcpy(&tmpbuff,debut+4,l); // On les récupère
    maLatitude.secon = (atof(tmpbuff))*60.0; // ASCII => Numérique => en secondes
    debut = strstr(debut,",")+1; // On cherche la première ","
    // On affiche le tout (y compris N/S)
    printf("Latitude %2d-%2d-%2.3f %1.1s\n",maLatitude.degre,maLatitude.minut,maLatitude.secon,debut);
    
    }
    
    // ****************************
    // *   Initialisation écran   *
    // ****************************
    
    //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
    }
    Si quelqu'un a le courage de faire le main se serait un grand soulagement Merci.

  8. #7
    ftorama

    Re : Traduction

    si tu n'as pas le courage d'essayer par toi-même, je te conseille fortement de te ré-orienter. c'est un monde quand-même.

    Tu vas apprendre quoi en recopiant bêtement?
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

  9. #8
    invitef97198f3

    Re : Traduction

    Je vais apprendre à comprendre comment faire le seul problème c'est qu'il est trop tard pour me réorienter car je prépare mon thème pour mon BTS donc c'est trop tard ^^
    En tout cas merci de votre soutien

Discussions similaires

  1. traduction
    Par ABN84 dans le forum Électronique
    Réponses: 1
    Dernier message: 07/03/2010, 08h57
  2. traduction
    Par ABN84 dans le forum Santé et médecine générale
    Réponses: 4
    Dernier message: 05/03/2010, 19h00
  3. [Biologie Moléculaire] traduction
    Par invite0fc3bba4 dans le forum Biologie
    Réponses: 7
    Dernier message: 26/04/2009, 16h17
  4. traduction
    Par invitecd3a03fc dans le forum Biologie
    Réponses: 3
    Dernier message: 18/03/2007, 12h29
Découvrez nos comparatifs produits sur l'informatique et les technologies.