[PIC]-Lecture sauvegarde en EEPROM aléatoire
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

[PIC]-Lecture sauvegarde en EEPROM aléatoire



  1. #1
    jorg1n

    [PIC]-Lecture sauvegarde en EEPROM aléatoire


    ------

    Bonjour,

    je travaille avec un PIC18F6722, et je rencontre quelques soucis lorsque que je viens lire mes données en EEPROM, ça marche généralement bien (à 80%) mais parfois (toujours pour les mêmes valeurs), il récupère des informations mauvaises...
    Quel pourrait etre le probleme? Je sais qu'avec juste ça comme infos il est difficile pour vous de savoir, mais le programme est long!! alors si vous aviez deja rencontré ça...

    Je vous remercie d'avance

    -----

  2. #2
    DAUDET78

    Re : PIC]-Lecture sauvegarde en EEPROM aléatoire

    Citation Envoyé par jorg1n Voir le message
    (toujours pour les mêmes valeurs)
    les mêmes adresses ou données ? Tu n'aurais pas usé prématurément ces adresses par des écritures répétées?
    J'aime pas le Grec

  3. #3
    invite74b5b8f7

    Re : PIC]-Lecture sauvegarde en EEPROM aléatoire

    Salut,

    Quel est (ou quels sont) les types de données que tu sauvegarde?
    Comment les écrits-tu et les lis-tu? (pointeurs sur?)
    + mêmes questions que DAUDET

  4. #4
    jorg1n

    Re : PIC]-Lecture sauvegarde en EEPROM aléatoire

    Bonjour,

    Quel est (ou quels sont) les types de données que tu sauvegarde?
    voila ma façon pour lire:

    Code:
    char readEEPROM ( int addr )
    {
      EEADR=(addr);	        	// Extraction des 8 bits faible de addr et les placent dans EEADR	
      EECON1bits.EEPGD = 0;		// Access data EEPROM memory
      EECON1bits.CFGS = 0;		// Access Flash program or data EEPROM memory
      EECON1bits.RD = 1;		// Initiates an EEPROM read
    
    data = EEDATA;
    
    return data;
    }
    
    void ReadIntoEEPROM (unsigned short addr, unsigned char dataLen, unsigned char* pDest )
    {
      while (dataLen--)
        {
          *pDest++ = readEEPROM ( addr++ );
        }
    }
    et voila celle pour écrire :
    Code:
    void writeEEPROM ( unsigned short addr, char data)
    {
      static unsigned char GIE_Status;
      EEADR=(addr);	                	// Extraction des 8 bits faible de addr et les placent dans EEADR
      EEDATA = data;	        		// Data to be written in EEPROM
      EECON1bits.EEPGD = 0;		        // Access data EEPROM memory
      EECON1bits.CFGS = 0;		        // Access Flash program or data EEPROM memory
      EECON1bits.WREN = 1;		        // Allows write cycles to Flash program/data EEPROM
    
      GIE_Status = INTCONbits.GIE;      //Save global interrupt enable bit
      INTCONbits.GIE=0;                 //Disable global interrupts
    
      EECON2 = 0x55;	        		// Required sequence to start write cycle
      EECON2 = 0xAA;					// Required sequence to start write cycle
      EECON1bits.WR = 1;		        // Initiates a data EEPROM erase/write cycle
      while(EECON1bits.WR);		        // Wait for completion of write sequence
    
      INTCONbits.GIE=GIE_Status;        //Restore the original global interrupt status
    
      PIR2bits.EEIF = 0;		        //The write operation is not complete or has not been started
      EECON1bits.WREN = 0;		        //Inhibits write cycles to Flash program/data EEPROM
    }
    
    
    void SaveIntoEEPROM (unsigned short addr, unsigned char *ptr,  unsigned char dataLen)
    {
      while (dataLen--)
        {
          writeEEPROM ( addr++, *ptr++);
        }
    }
    et voila comment je les utilise :
    SaveIntoEEPROM (0x00A, (unsigned char*)&TOTO, sizeof(TOTO) );

    ReadIntoEEPROM ( 0x00A, sizeof(TOTO), (unsigned char*)&TOTO );
    et TOTO peut aussi bien etre un INT qu'un FLOAT.

    les mêmes adresses ou données ?
    il s'agit des variables fixées au même adresse et la données est toujours la même lorsqu'il y a un problème...

    Tu n'aurais pas usé prématurément ces adresses par des écritures répétées?
    C'est vrais, j'utilise depuis pas mal de temps le même µC (environ 10 mois) et vu que je travaille toute la journée dessus, et que je reprogramme et reteste a chaque fois... c'est peut etre pour ça?

    Merci d'avance

    PS: pouvez vous allez faire un petit tour sur ce sujet, il ne me manque pas grand chose pour avancer dans mon projet...
    http://forums.futura-sciences.com/el...us-un-pic.html

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

    Re : PIC]-Lecture sauvegarde en EEPROM aléatoire

    il s'agit des variables fixées au même adresse et la données est toujours la même lorsqu'il y a un problème...
    Et tu ne veux pas nous dire quelle est cette valeur et ce que tu lis?

    T´as un debbugger pour aller voir ce qu´il écrit à ces adresses?

    Je pense que c´est normal que ça ne fonctionne pas, il faut faire "abstraction" du type si tu veux lire un float en plusieurs fois.
    Ton ReadEEPROM renvoi un char (donc implicitement signé)!

    C'est vrais, j'utilise depuis pas mal de temps le même µC (environ 10 mois) et vu que je travaille toute la journée dessus, et que je reprogramme et reteste a chaque fois... c'est peut etre pour ça?
    Si tu ne nous dit pas combien de fois par jour (environ) tu les reprogrammes pas facile de repondre!
    Une EEPROM a un nombre de cycle limité à 100kcycles je crois

  7. #6
    jorg1n

    Re : PIC]-Lecture sauvegarde en EEPROM aléatoire

    Merci pour ta réponse..

    T´as un debbugger pour aller voir ce qu´il écrit à ces adresses?
    Si, mais j'ai du mal lorsque je suis en mode debugger a avoir le phénomène.

    Et tu ne veux pas nous dire quelle est cette valeur et ce que tu lis?
    Par exemple, au lieu de m'écrire une variable de type INT = 40, il m'écrit une variable = 610...

    Et lorsque c'est un Float, il m'écrit 0.00 au lieu de 16.00...

    Je pense que c´est normal que ça ne fonctionne pas, il faut faire "abstraction" du type si tu veux lire un float en plusieurs fois.
    Ton ReadEEPROM renvoi un char (donc implicitement signé)!
    je ne te suis pas!!!


    Si tu ne nous dit pas combien de fois par jour (environ) tu les reprogrammes pas facile de repondre!
    Une EEPROM a un nombre de cycle limité à 100kcycles je crois
    Je sais pas, entre 30 et 50 fois par jour... ma méthode de développement, n'est pas bonne je crois!!! je devrais inhiber les fonctions de travaille sur EEPROM...

  8. #7
    invite74b5b8f7

    Re : PIC]-Lecture sauvegarde en EEPROM aléatoire

    Salut,
    Si, mais j'ai du mal lorsque je suis en mode debugger a avoir le phénomène.
    Je ne comprend pas trop!normalement le fonctionnement est le même...

    Désolé, mais ton programme n´est pas très clair (pour moi), je n´utilise pas des incrémentations / décrémentation dans les boucles:
    Code:
     while (dataLen--)
        {
          writeEEPROM ( addr++, *ptr++);
        }
    Est ce que par exemple dataLen est décrémenté à la première boucle? Ce qui ferait que si dataLen = 2 il n´effectuera la boucle qu´une seule fois... ?
    Par exemple, au lieu de m'écrire une variable de type INT = 40, il m'écrit une variable = 610...

    Et lorsque c'est un Float, il m'écrit 0.00 au lieu de 16.00...
    Ce sont les vrais valeurs que tu obtiens?
    T´aurais pas un ou deux exemples en plus (qui marchent et qui marchent pas)?
    Il faut essayer de trouver le lien entre ces valeurs et pourquoi il lit y au lieu de x...

    C´est pour ça qu´avec le debugger, c´est plus imple, tu vas lire directement "avec tes yeux" ta mémoire et tu cherches ta valeurs sauvegardée (comme ça tu vois si elle est écrite à la mauvaise adresse, inversée, si elle n´est pas lá, etc...)

  9. #8
    jorg1n

    Re : [PIC]-Lecture sauvegarde en EEPROM aléatoire

    Je reviens vers vous car j'ai visualisé l'EEPROM lorsque je récupérai des informations aléatoire, et voila le problème:
    Je n'écris que sur les adresses qui vont de 000 à 0FFalors que j'écris des données sur les adresses jusqu'a 3C0.

    Et lorsque j'écris une donnée à une adresse supérieure à 0FF, il me ré-écrit sur des adresses comprises entre 0 et 0FF..et donc écraser des valeurs existantes mais qui n'ont rien a voir, et donc quand je viens lire ma donnée, je récupère une valeur erronée...


    D'ou viens le problème??? J'imagine que cela tourne autour de l'adressage... mais ou exactement???

    MErci d'avance

  10. #9
    jorg1n

    Re : [PIC]-Lecture sauvegarde en EEPROM aléatoire

    Bonjour à tous,

    auriez vous une petite idée pour résoudre ce problème, dans le post n°4, il y a mes fonctions de lecture et d'écriture, alors si vous pouviez jetez un oeil!!!

    Merci d'avance et bonne journée à tous

  11. #10
    invite74b5b8f7

    Re : [PIC]-Lecture sauvegarde en EEPROM aléatoire

    Citation Envoyé par code Jorg1n
    EEADR=(addr); // Extraction des 8 bits faible de addr et les placent dans EEADR
    Comment tu pourrais écrire à une adresse superieur à 0xFF si tu a une adresse sur 8 bit ???

    Il n´y a pas une histoire de pages sur les PICs?

    T´as lu ça?
    http://ww1.microchip.com/downloads/e...tes/01095b.pdf

  12. #11
    jorg1n

    Re : [PIC]-Lecture sauvegarde en EEPROM aléatoire

    Bonjour lil-vince,

    Comment tu pourrais écrire à une adresse superieur à 0xFF si tu a une adresse sur 8 bit ???
    c'est bien ce que je pensais... il y avait une erreur a ce niveau. En fait j'ai récupéré un morceau de soft pour ecriture sur un EEPROM de 256 octets et pas pour une de 1024...

    Il n´y a pas une histoire de pages sur les PICs?

    T´as lu ça?
    http://ww1.microchip.com/downloads/e...tes/01095b.pdf
    Non, je ne suis pas au courant, mais je vais m'informer de tout ça...
    Si tu as des infos ou même des routines je suis preneur...

    Merci encore lil-vince

  13. #12
    invite74b5b8f7

    Re : [PIC]-Lecture sauvegarde en EEPROM aléatoire

    C´est quand même pas bien difficile, il y a des notes d´appli pour presque tout, surtout pour les µC!

    Pour moi, ça prend moins de temps de lire une note d´appli correctement, donc de bien comprendre tous les principes et de faire SON programme (ce qui n´empêche pas de s´inspirer d´exemples ou de celui des autres), comme ça on comprend ce que l´on fait et quand ça ne marche pas, on comprend vite pourquoi...

    C´est d´ailleurs tout dit dans la datasheet paragraphe 8 (EEPROM), d´ailleurs c´est plutôt ça qu´il faut lire...
    http://ww1.microchip.com/downloads/e...Doc/39646c.pdf

    Si tu as des infos ou même des routines je suis preneur...
    Je t´ai déjà dit que je ne programmais pas sur PIC (mais sur MSP430 et maintenant sur STM32)...
    Mais même en ayant jamais approché un PIC, j´ai trouvé en 5min...
    Normalement, tu devrais toujours avoir la datasheet sous les yeux quand tu programmes et quand tu as commencé ton prog de sauvegarde des données en eeprom, la première chose que tu aurais du faire, c´est lire le paragraphe EEPROM et voir s´il n´y avait pas une note d´appli pour rentrer plus dans les détails si tu le voulais (ici je pense que la datasheet suffit)!
    C´est impossible de faire sans ou alors on ne comprend pas et on se retrouve bloqué un jour...

  14. #13
    jorg1n

    Re : [PIC]-Lecture sauvegarde en EEPROM aléatoire

    Merci lil-vince...

    c'est écrit noir sur blanc:
    The EEADRH:EEADR register pair is used to address
    the data EEPROM for read and write operations.
    EEADRH holds the two MSbs of the address; the upper
    6 bits are ignored. The 10-bit range of the pair can
    address a memory range of 1024 bytes (00h to 3FFh).
    Et moi je n'utilisais que le registre EEADR...

    je pense donc faire cela dans ma routine:

    Code:
      EEADR=(addr & 0x00FF);
      EEADR=((addr>>8)&0x0003);
    comme ça je récupère les bits de poids faible et je les mets dans EEADR, et ensuite les bits de poids forts que je stocke dans EEADRH.

  15. #14
    jorg1n

    Re : [PIC]-Lecture sauvegarde en EEPROM aléatoire

    Et bien ça marche parfaitement, merci encore lil-vince...
    Bonne fin de journée à tous

  16. #15
    invite74b5b8f7

    Re : [PIC]-Lecture sauvegarde en EEPROM aléatoire

    De rien, mais la prochaine fois lis la datasheet, t´aurais gagné une semaine ..

Discussions similaires

  1. probleme lecture mémoire EEPROM M952256
    Par invite0f39f32f dans le forum Électronique
    Réponses: 1
    Dernier message: 23/07/2007, 15h17
  2. ecriture et lecture eeprom
    Par invite1a90427b dans le forum Électronique
    Réponses: 2
    Dernier message: 21/03/2007, 10h22
  3. Accès en lecture EEPROM
    Par Toufinet dans le forum Électronique
    Réponses: 16
    Dernier message: 01/12/2006, 21h10
  4. Lecture Aléatoire
    Par invite33880528 dans le forum Technologies
    Réponses: 5
    Dernier message: 19/07/2006, 12h45
  5. Lecture et ecriture dans eeprom 24c02
    Par invite3d33f9e2 dans le forum Électronique
    Réponses: 2
    Dernier message: 29/06/2006, 19h32
Découvrez nos comparatifs produits sur l'informatique et les technologies.