Flasher data dans EEPROM PIC en C
Répondre à la discussion
Affichage des résultats 1 à 24 sur 24

Flasher data dans EEPROM PIC en C



  1. #1
    invitead51e543

    Flasher data dans EEPROM PIC en C


    ------

    Bonjour,

    J'ai su qu'il était possible d'écrire des données dans l'EEPROM du PIC directement à son démarrage, sans passer par toute la procédure qu'on trouve dans le datasheet. Savez vous quelles sont les instructions adéquates? J'ai cherché sur le net, je n'ai rien trouvé de particulier.
    Pour info, je travaille avec un PIC18F4431 avec MPLABX et XC8 comme compilo.

    Merci d'avance, et bonne journée

    -----

  2. #2
    invitead51e543

    Re : Flasher data dans EEPROM PIC en C

    J'ai trouvé cette page, l'instruction assembleur serait 'DE', existe-t-il une équivalence en C?

    http://fabrice.sincere.pagesperso-or...m84/eeprom.htm

  3. #3
    invitef86a6203

    Re : Flasher data dans EEPROM PIC en C

    regarde sur ce site;
    http://electronics.stackexchange.com...n-xc8-compiler


    sinon il y a la méthode asm , tu met ce que tu veux dedans (plutôt à la fin pour l'eeprom data);
    http://www.mikroe.com/download/eng/d...eclaration.htm

  4. #4
    invitead51e543

    Re : Flasher data dans EEPROM PIC en C

    Ok, merci du lien, je vais tenter en C. par contre simple question, où vois tu dans la datasheet à quelle adresse commence ton EEPROM?

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

    Re : Flasher data dans EEPROM PIC en C

    c etait sur ton lien en asm avec les DE !

    ORG 0x2100 généralement à vérifier sur le datasheet que tu utilise.
    (je ne l'ai pas chargé)

  7. #6
    invitead51e543

    Re : Flasher data dans EEPROM PIC en C

    Justement, c'est que je ne trouve pas sur ma datasheet ^^.

  8. #7
    invitef86a6203

    Re : Flasher data dans EEPROM PIC en C

    effectivement pas trop explicite

    Section 7 pour l'utilisation.

    J'ai pas vu d'adresse , a se demander si c est accessible en ISD ?

  9. #8
    invitef86a6203

    Re : Flasher data dans EEPROM PIC en C

    c est surement pas 2100h puisqu'il peut aller jusqu'à 16K !

    peut être 4100h mais c est écrit unused sur le datasheet.

    Microchip répond aux mails, si on leur pose une question technique.

  10. #9
    invitef86a6203

    Re : Flasher data dans EEPROM PIC en C


  11. #10
    invitead51e543

    Re : Flasher data dans EEPROM PIC en C

    Merci pour les infos freepicbasic .

    Autre petite question, j'ai réalisé un simple petit programme ou j'écris une valeur dans mon EEPROM. Le programme fonctionne en mode simulation, mais pas en mode debug sur mon PIC, sais tu d'où cela peut venir? Je peux le poster ci besoin.

  12. #11
    invitead51e543

    Re : Flasher data dans EEPROM PIC en C

    J'ai parlé trop vite ; quand j'écris cette instruction :

    Code:
    const unsigned char abc1 @ 0xF00000 = 0x05; // Écrit dans la première case de l'EEPROM la valeur 0x09 au démarrage
    au lieu de m'écrire seulement dans la 1ère case de l'EEPROM, mon programme écrit :

    Nom : Sans titre.png
Affichages : 156
Taille : 3,0 Ko

    Comment écrire seulement dans la 1ère case? Et quelle instruction mettre pour écrire d'une autre valeur dans la 2ème case?

    Quand je mets cette instruction :

    Code:
    const unsigned char abc1 @ 0xF00001 = 0x05; // Écrit dans la première case de l'EEPROM la valeur 0x09 au démarrage
    Voici le message d'erreur :

    :0: error: psect "_abc1_const" not relocated on 0x2 byte boundary

  13. #12
    invitead51e543

    Re : Flasher data dans EEPROM PIC en C

    Pour faire une "synthèse" des mes problèmes :

    - Celui cité sur le message ci-dessus ; j'ai l'impression que cette instruction :

    Code:
    const unsigned char abc0 @ 0xF00000 = 0x05; // Écrit dans la première case de l'EEPROM la valeur 0x05 au démarrage
    écrit sur 2 octets au lieu d'un seul, d'où l'erreur quand j'écris l'instruction suivante :

    Code:
    const unsigned char abc1 @ 0xF00001 = 0x05; // Écrit dans la première case de l'EEPROM la valeur 0x09 au démarrage
    :0: error: psect "_abc1_const" not relocated on 0x2 byte boundary
    Comment écrire seulement sur un octet? Pourtant unsigned char correspond à un octet?!?

    - 2ème problème : le programme ci-dessous écrit mes données en EEPROM en simulation, mais pas en debug sur mon PIC? Savez vous pourquoi? Le problème ne vient pas de mes bits de config, ils sont tous en "no code-protected".

    Code:
    unsigned char valeur1 = 5;
    unsigned char valeur2 = 10;
    
    void ecriture_valeur_eeprom (void)
    {
        EEADR = 0x00; // Ecriture adresse
        EEDATA = valeur1;
        EECON1bits.EEPGD = 0; // Access data EEPROM memory.
        EECON1bits.CFGS = 0; // Acces program flash or data EEPROM memory.
        EECON1bits.WREN = 1; // Allows erase/ write cycles.
        INTCONbits.GIE = 0; // Disable interrupts.
        EECON2 = 0x55;
        EECON2 = 0xAA;
        EECON1bits.WR = 1; // Initiates a data EEPROM erase/write cycle
        while (EECON1bits.WR == 1)
        {
        }
        EECON1bits.WREN = 0; // Inhibs erase/ write cycles.
    
        EEADR = 0x01; // Ecriture adresse 
        EEDATA = valeur2;
        EECON1bits.EEPGD = 0; // Access data EEPROM memory.
        EECON1bits.CFGS = 0; // Acces program flash or data EEPROM memory.
        EECON1bits.WREN = 1; // Allows erase/ write cycles.
        //INTCONbits.GIE = 0; // Disable interrupts.
        EECON2 = 0x55;
        EECON2 = 0xAA;
        EECON1bits.WR = 1; // Initiates a data EEPROM erase/write cycle
        while (EECON1bits.WR == 1)
        {
        }
        EECON1bits.WREN = 0; // Inhibs erase/ write cycles.
        INTCONbits.GIE = 1; // Enable interrupts.
    }
    
    int main(int argc, char** argv)
    {
        Config_Init();
        ecriture_valeur_eeprom();
        while(1)
        {
        }
    
    }

  14. #13
    invitead51e543

    Re : Flasher data dans EEPROM PIC en C

    L'écriture se fait en initialisation.Je viens de retester en simul, c'est ok, par contre en mode in situ, ça ne marche pas..

    Code:
    const unsigned char mesPagesRom [] @ 0XF00000 ={0x1, 0x0, 0x01, 0x0}; // 
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <xc.h>
    
    unsigned char adresse_basse = 6;
    unsigned char adresse_haute = 9;
    
    
    void ecriture_adr_eeprom (void)
    {
        EEADR = 0x00; // Ecriture adresse  basse
        EEDATA = adresse_basse;
        EECON1bits.EEPGD = 0; // Access data EEPROM memory.
        EECON1bits.CFGS = 0; // Acces program flash or data EEPROM memory.
        EECON1bits.WREN = 1; // Allows erase/ write cycles.
        INTCONbits.GIE = 0; // Disable interrupts.
        EECON2 = 0x55;
        //Nop();
        EECON2 = 0xAA;
        EECON1bits.WR = 1; // Initiates a data EEPROM erase/write cycle
        while (EECON1bits.WR != 0)
        {
        }
        EECON1bits.WREN = 0; // Inhibis erase/ write cycles.
    
        EEADR = 0x01; // Ecriture adresse haute
        EEDATA = adresse_haute;
        EECON1bits.EEPGD = 0; // Access data EEPROM memory.
        EECON1bits.CFGS = 0; // Acces program flash or data EEPROM memory.
        EECON1bits.WREN = 1; // Allows erase/ write cycles.
        //INTCONbits.GIE = 0; // Disable interrupts.
        EECON2 = 0x55;
        EECON2 = 0xAA;
        EECON1bits.WR = 1; // Initiates a data EEPROM erase/write cycle
        while (EECON1bits.WR != 0)
        {
        }
        EECON1bits.WREN = 0; // Inhibis erase/ write cycles.
        INTCONbits.GIE = 1; // Enable interrupts.
    
    }
    
    int main(int argc, char** argv)
    {
        ecriture_adr_eeprom();
        while(1)
        {
            EEADR = 0;
            EECON1bits.EEPGD = 0; // Access data EEPROM memory.
            EECON1bits.CFGS = 0; // Access program Flash or data EEPROM memory.
            EECON1bits.RD = 1; // Initiates a memory read (EEPROM read)
            adresse_basse = EEDATA;
            EEADR = 1;
            EECON1bits.EEPGD = 0; // Access data EEPROM memory.
            EECON1bits.CFGS = 0; // Access program Flash or data EEPROM memory.
            EECON1bits.RD = 1; // Initiates a memory read (EEPROM read)
            adresse_haute = EEDATA;
        }
    
    }


    Et voilà ce que j'obtiens, pas logique !!Ça n'a pas écrit, sais tu pourquoi?

    Nom : Sans titre.png
Affichages : 134
Taille : 5,5 Ko

  15. #14
    invitef86a6203

    Re : Flasher data dans EEPROM PIC en C

    Tu as quoi dans le Hex ?

    Pas sur que le compilateur sache faire
    ou le programmateur sache lire cette adresse à rallonge ...

    regarde le hex je suis curieux de voir comment il s'en sort

    normalement c est du 16 bits.

  16. #15
    invitead51e543

    Re : Flasher data dans EEPROM PIC en C

    Il faut mettre quoi comme adresse alors?
    Comment récupère tu ton .hex?

  17. #16
    invitef86a6203

    Re : Flasher data dans EEPROM PIC en C

    Le hex est généré par le compilo il faut voir où il le met met.
    Généralement il y a un menu avec une ligne "préférence" mais je ne connais pas ton compilo.
    possible qu'il y ai possibilité de choisir le format 32 au lieu de 16

    Il faudrait chercher la doc de programmation du chip chez Microchip, pas le datasheet mais comment on programme en ISD


    https://fr.wikipedia.org/wiki/HEX_%28Intel%29
    c est peut être du inh32

  18. #17
    invitead51e543

    Re : Flasher data dans EEPROM PIC en C

    Ce que je ne comprends pas :

    - Pourquoi j'arrive bien à écrire dans mon EEPROM en la flashant en début de programme, et lorsque je veux modifier les valeurs en cours de programme, elles ne changent pas? Pourtant le programme a été vérifié et fonctionne en mode "simulateur".

    SI quelqu'un a déjà été confronté à ce problème...

  19. #18
    RISC

    Re : Flasher data dans EEPROM PIC en C

    Salut,
    Oublie le simulateur pour ce qui concerne l'E2PROM. Seul le debug sur la version réelle du chip.
    Essaye les méthodes données ici : http://microchip.wikidot.com/faq:36
    a+

  20. #19
    invitead51e543

    Re : Flasher data dans EEPROM PIC en C

    Salut RISC,

    Aucune méthode ne fonctionne...

  21. #20
    invitef86a6203

    Re : Flasher data dans EEPROM PIC en C

    L'écriture est elle autorisée dans les bits de config ?

  22. #21
    RISC

    Re : Flasher data dans EEPROM PIC en C

    Salut,

    Peux-tu confirmer que tu fais les essais sur le vrai PIC et pas sur le simulateur ?
    Essayes les méthodes décrites ici.

    a+

  23. #22
    invitead51e543

    Re : Flasher data dans EEPROM PIC en C

    Oui RISC, j'ai fais les essais sur le PIC.

    J'ai essayé de suivre la discussion sur ton lien, quel est le but?Enfin quel est le rapport avec mon problème?

  24. #23
    RISC

    Re : Flasher data dans EEPROM PIC en C

    Salut,

    Il y a plusieurs sujets dans les forums Microchip.
    Apparemment celle la montre du code qui fonctionne pour un PIC18.

    a+

  25. #24
    invitead51e543

    Re : Flasher data dans EEPROM PIC en C

    Merci de l'info RISC, je vais jeter un coup d'oeil.

Discussions similaires

  1. [VB] ou [C] conversion wav et sauvegarde data dans un .TXT en binaire
    Par inviteeae25a15 dans le forum Programmation et langages, Algorithmique
    Réponses: 22
    Dernier message: 23/05/2014, 02h01
  2. memoire non volatile (EEPROM integrée au µp, seriel EEPROM, FRAM, ...)
    Par invitebd358db9 dans le forum Électronique
    Réponses: 3
    Dernier message: 22/10/2012, 12h49
  3. Variable dans l'EEPROM
    Par invite68e98c84 dans le forum Électronique
    Réponses: 1
    Dernier message: 15/04/2011, 15h10
  4. transfert data dans l'eau
    Par invite8ebef38f dans le forum Électronique
    Réponses: 4
    Dernier message: 03/05/2006, 11h21
  5. Eeprom data
    Par inviteeab0141b dans le forum Électronique
    Réponses: 1
    Dernier message: 12/08/2005, 18h33
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...