Probleme EEPROM 18f4550
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Probleme EEPROM 18f4550



  1. #1
    invite69c9340e

    Probleme EEPROM 18f4550


    ------

    Bonjour,
    J'ai un projet qui est de rendre un chariot de golf automatique, c'est a dire que il suis le joueur sur le green.
    Je rencontre un problème quand je veux rentrer des paramètres fixe dans l'EEPROM (gain moteurs, consigne, limite sup, ect), en effet soit le programme n’écrit pas dans l'EEPROM soit il ne lit pas les infos. Quoi que ce soit tout mes paramètres restent à 0 alors que ils devrais être ceux que je met dans l'EEPROM.

    J'utilise comme compilateur MikroC PRO et mon Pic est un 18f4550

    Voici le morceau de programme qui gère l’écriture/lecture dans l'EEPROM:

    Code:
    Gain_Gauche=1;        
       Gain_Droite=1;
       Gain_Avance=1,9;
       Gain_Rotation=13;
       consigne=35;
       Limite_Sup=200;
       Const_Avance=65;     
       rotation_forte=30;   
       poids=0;
       retard=0;            
    
    
       memorise_float(0,Gain_Gauche);
       memorise_float(4,Gain_Droite);
       memorise_float(8,Gain_Avance);
       memorise_int(12,Gain_Rotation);
       memorise_int(14,consigne);      // En dessous le robot est à l'arrêt
       memorise_int(16,Limite_Sup);    // Au dessus le robot s'arrête
       memorise_int(18,Const_Avance);  // quand distance=consigne, avance=Const_Avance
       memorise_int(20,rotation_forte);
       memorise_int(22,poids);
       memorise_int(24,retard);
    
    
    
       lecture_float(0,&Gain_Gauche);  // Lecture des paramètres en mémoire EEPROM
       lecture_float(4,&Gain_Droite);  
       lecture_float(8,&Gain_Avance);  
       lecture_int(12,&Gain_Rotation); 
       lecture_int(14,&consigne);      
       lecture_int(16,&Limite_Sup);   
       lecture_int(18,&Const_Avance);  
       lecture_int(20,&rotation_forte);
       lecture_int(22,&poids);
       lecture_int(24,&retard);
    
    
       Limite_Inf=consigne;

    et la librairie utilisée:

    Code:
    // Librairie mémoire EEPROM
    
    
    void memorise_float(unsigned short adresse,float var)
    {
      eeprom_write(adresse,lo(var));
      eeprom_write(adresse+1,hi(var));
      eeprom_write(adresse+2,higher(var));
      eeprom_write(adresse+3,highest(var));
    }
    
    void lecture_float(unsigned short adresse,float *var)
    {
     unsigned short tab[4];
     float *p;
    
     tab[0]=eeprom_read(adresse);
     tab[1]=eeprom_read(adresse+1);
     tab[2]=eeprom_read(adresse+2);
     tab[3]=eeprom_read(adresse+3);
    
     p=&tab[0];
     *var=*p;
    }
    
    void memorise_int(unsigned short adresse,int var)
    {
      short *p;
    
      p=&var;
      eeprom_write(adresse,*p);
      p++;
      eeprom_write(adresse+1,*p);
    }
    
    void lecture_int(unsigned short adresse,int *var)
    {
     unsigned short tab[2];
     int *p;
    
     tab[0]=eeprom_read(adresse);
     tab[1]=eeprom_read(adresse+1);
    
     p=&tab[0];
     *var=*p;
    
    }

    Voila, je ne sais pas pourquoi ça ne marche pas, si quelqu'un sais ou a le même problèmes =).
    Si vous avez des questions ou des réponses merci de les poser.

    Je vous remercie d'avance =).

    -----

  2. #2
    fdamien12

    Re : Probleme EEPROM 18f4550

    Salut,
    ce topic m'intéresse aussi, car j'ai été confronté au même problème.
    Impossible de stocker le moindre octet en EEPROM avec la lib de MikroC avec un PIC18F4550. j'utilisais MikroC 4.60 et je n'ai pas essayé d'autre référence de PIC, mais le problème apparaissait quel que soit l'exemplaire du 4550.

    Dans mon cas, le problème pouvant être facilement contournable, je me suis passé de la EEPROM mais je me rappelle très bien m'être arraché les cheveux deux heures avant de constater que manifestement, même avec le code le plus simple qui soit, ça ne fonctionnait pas...

    Tu peux essayer de manipuler directement les registres comme spécifié dans le datasheet.

    Tiens moi au courant

    A+
    Dernière modification par fdamien12 ; 21/03/2012 à 18h37.

  3. #3
    invite69c9340e

    Re : Probleme EEPROM 18f4550

    Bonjour,
    Alors il sembleraid que ce soit un probleme de tempo, il suffirrais de rajouter des delay de 20 ms pour corriger le probleme, voici mon nouveau code qui marche nickel mon robot est opérationnel =):

    Code:
     Gain_Gauche=1.0;        // se bout de code pour remplir l'EEPROM vierge
       Gain_Droite=1.0;
       Gain_Avance=1.9;
       Gain_Rotation=13;
       consigne=35;
       Limite_Sup=200;
       Const_Avance=65;     // 70 sur herbe 3-4 cm
       rotation_forte=30;   // 30 sur herbe 3-4 cm
       poids=0;
       retard=0;            // ce paramètre ne semble pas avoir beaucoup d'effet ?!?
       delay_ms(20);
    
       memorise_float(0,Gain_Gauche);
       memorise_float(4,Gain_Droite);
       memorise_float(8,Gain_Avance);
       memorise_int(12,Gain_Rotation);
       memorise_int(14,consigne);      // En dessous le robot est à l'arrêt
       memorise_int(16,Limite_Sup);    // Au dessus le robot s'arrête
       memorise_int(18,Const_Avance);  // quand distance=consigne, avance=Const_Avance
       memorise_int(20,rotation_forte);
       memorise_int(22,poids);
       memorise_int(24,retard);
       delay_ms(20);
    
    
       lecture_float(0,&Gain_Gauche);  // Lecture des paramètres en mémoire EEPROM
       lecture_float(4,&Gain_Droite);  // Ces paramètres, déterminés de façon
       lecture_float(8,&Gain_Avance);  // empirique, déterminent le comportement
       lecture_int(12,&Gain_Rotation); // du robot, et son a ajuster en fonction
       lecture_int(14,&consigne);      // du poid et du type de sol.
       lecture_int(16,&Limite_Sup);    // Le robot zigzag plus ou moins, va plus
       lecture_int(18,&Const_Avance);  // ou moins vite, décroche plus ou moins.
       lecture_int(20,&rotation_forte);
       lecture_int(22,&poids);
       lecture_int(24,&retard);
       delay_ms(20);
    
       Limite_Inf=consigne;
    Voila en espérant que cela t'aidera =)

Discussions similaires

  1. probleme usb 18F4550 avec winform visual c++
    Par invitec871b1d7 dans le forum Électronique
    Réponses: 2
    Dernier message: 20/03/2012, 12h38
  2. probleme 2 interruptions pull up sur 18F4550
    Par inviteac751535 dans le forum Électronique
    Réponses: 1
    Dernier message: 13/02/2012, 23h04
  3. probleme driver pic 18f4550
    Par invite0201cc99 dans le forum Électronique
    Réponses: 8
    Dernier message: 27/08/2011, 21h07
  4. I2C communication entre pic 18f4550 et EEPROM 24C64
    Par inviteac751535 dans le forum Électronique
    Réponses: 1
    Dernier message: 21/05/2010, 21h57
  5. probléme eeprom 16F628
    Par etronics dans le forum Électronique
    Réponses: 4
    Dernier message: 12/11/2003, 18h59
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...