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
    flolarajasse

    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

    -----
    Java is the best!

  2. #2
    flolarajasse

    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
    Java is the best!

  3. #3
    freepicbasic

    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
    A+, pat

  4. #4
    flolarajasse

    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?
    Java is the best!

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

    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é)
    A+, pat

  7. #6
    flolarajasse

    Re : Flasher data dans EEPROM PIC en C

    Justement, c'est que je ne trouve pas sur ma datasheet ^^.
    Java is the best!

  8. #7
    freepicbasic

    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 ?
    A+, pat

  9. #8
    freepicbasic

    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.
    A+, pat

  10. #9
    freepicbasic

    Re : Flasher data dans EEPROM PIC en C

    A+, pat

  11. #10
    flolarajasse

    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.
    Java is the best!

  12. #11
    flolarajasse

    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 : 140
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
    Dernière modification par flolarajasse ; 01/10/2015 à 13h50.
    Java is the best!

  13. #12
    flolarajasse

    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)
        {
        }
    
    }
    Java is the best!

  14. #13
    flolarajasse

    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 : 118
Taille : 5,5 Ko
    Java is the best!

  15. #14
    freepicbasic

    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.
    Dernière modification par freepicbasic ; 02/10/2015 à 11h42.
    A+, pat

  16. #15
    flolarajasse

    Re : Flasher data dans EEPROM PIC en C

    Il faut mettre quoi comme adresse alors?
    Comment récupère tu ton .hex?
    Java is the best!

  17. #16
    freepicbasic

    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
    A+, pat

  18. #17
    flolarajasse

    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...
    Java is the best!

  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
    flolarajasse

    Re : Flasher data dans EEPROM PIC en C

    Salut RISC,

    Aucune méthode ne fonctionne...
    Java is the best!

  21. #20
    freepicbasic

    Re : Flasher data dans EEPROM PIC en C

    L'écriture est elle autorisée dans les bits de config ?
    A+, pat

  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
    flolarajasse

    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?
    Java is the best!

  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
    flolarajasse

    Re : Flasher data dans EEPROM PIC en C

    Merci de l'info RISC, je vais jeter un coup d'oeil.
    Java is the best!

Discussions similaires

  1. [VB] ou [C] conversion wav et sauvegarde data dans un .TXT en binaire
    Par genocyber dans le forum Programmation et langages, Algorithmique
    Réponses: 22
    Dernier message: 23/05/2014, 01h01
  2. Réponses: 3
    Dernier message: 22/10/2012, 11h49
  3. Variable dans l'EEPROM
    Par Jack52 dans le forum Électronique
    Réponses: 1
    Dernier message: 15/04/2011, 14h10
  4. transfert data dans l'eau
    Par invite8ebef38f dans le forum Électronique
    Réponses: 4
    Dernier message: 03/05/2006, 10h21
  5. Eeprom data
    Par jo-electrons dans le forum Électronique
    Réponses: 1
    Dernier message: 12/08/2005, 17h33
Découvrez nos comparatifs produits sur l'informatique et les technologies.