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

programme d'écriture/lecture d'EEPROM pic16F877A



  1. #1
    olivier_elec

    programme d'écriture/lecture d'EEPROM pic16F877A

    Bonjour,

    j'ai récupéré un bout de programme que j'ai adapté à ma sauce en langage C. Ce programme écrit dans l'eeprom de mon pic (16f) et lit une valeur qui se traduit par un allumage de led (sur une carte "PICDEM 2 PLUS").

    Ce que je voudrais faire c'est d'arriver à écrire dans l'eeprom et de lire la valeur écrite dans l'eeprom grâce à un autre programme...

    Je pense que ce qui se passe c'est que:
    1. le programme est exécuté
    2. une valeur est écrite dans la mémoire
    3. l'autre programme s'exécute (et écrase la valeur qui est inscrite en mémoire)
    4. la valeur est lu (mais cette valeur est fausse car le programme à inscrit par défaut "FF" dans la case mémoire)

    je vous livre mon programme mais je pense qu'il me faut un registre avec un bit qui "verrouille" cette saleté d'eeprom, si quelqu'un sait faire autrement ou connait le registre en question je suis preneur !!!

    #include "int16CXX.h"
    #pragma origin 4

    /**********test led*************************/
    void initled (void)
    {
    TRISB=0x00; //port B en sortie
    PORTB=0xFF; //toutes led alumées
    }

    /**********ecriture EEPROM******************/
    void ecrire_EEPROM (uns16 adresse,uns8 valeur)
    { //adresse sur 16 bits et valeur sur 8 bits
    while(WR==1); //flag
    EEADR=adresse; //passage du paramètre "adresse" dans le buffer
    EEDATA=valeur; //passage du paramètre "valeur" dans le buffer
    EEPGD=0; //acces EEPROM
    WREN=1; //autorise ecriture
    GIE=0; //dévalide les IT
    EECON2=0x55; //???
    EECON2=0xAA; //???
    WR=1; //cycle d'écriture
    GIE=1; //permet d'activer toutes les interruptions
    WREN=0; //désactivation de l'écriture
    }

    /**********lecture EEPROM*******************/
    uns8 lire_EEPROM (uns16 adresse)
    {
    EEADR=adresse; //passage du paramètre "adresse" dans le buffer
    EEPGD=0; //acces data EEPROM
    RD=1; //cyle de lecture
    return(EEDATA); //retourne la valeur EEDATA lu à "adresse"
    }

    /**********MAIN**************** *************/
    void main (void)
    {
    uns8 data; //"data" sur 8 bits
    uns16 i; //"i" sur 16 bits
    initled(); //initialise les leds
    ecrire_EEPROM(0x0130, 0x41); //écrit la valeur 41 dans l'EEPROM à l'adresse 0130
    data=lire_EEPROM(0x0130); //lit l'adresse 0130, dans ce cas allumage de la première led
    PORTB=data; //la variable data est affectée au port B
    }


    un grand merci d'avance !!

    -----

    in vino veritas

  2. #2
    freepicbasic

    Re : programme d'écriture/lecture d'EEPROM pic16F877A

    tu devrais mettre
    while(WR==1); //flag
    à la fin de la procédure pas au début

    Tu lis avant même que la data soit écrite 8ms
    A+, pat

  3. #3
    olivier_elec

    Re : programme d'écriture/lecture d'EEPROM pic16F877A

    merci pat,

    j'eus pensé que tu m'eus trouvé la solution mais ça ne change rien
    j'ai pourtant essayé en le mettant comme tu m'as dit...

    au fait, sais-tu (ou est-ce-que quelqu'un sait) à quoi sert le registre EECON2 ???

    la doc du pic16f87X :
    http://ww1.microchip.com/downloads/e...Doc/30292c.pdf
    in vino veritas

  4. #4
    olivier_elec

    Re : programme d'écriture/lecture d'EEPROM pic16F877A

    bon je crois avoir décelé quelques erreurs mais ça ne fonctionne toujours pas...

    1. La zone EEPROM commence à 2100h, alors que je commençais à 0130
    2. J'ai mis une boucle while (RD==1) après RD=1; (bit RD du registre de lecture d'EECON1) pour être sûr qu'il passe à 0
    3. Enfin j'ai inter-changé WREN et GIE car la marche a suivre à l'air très stricte elle est indiquée sur ce site assez bien fait :

    http://f5ad.free.fr/16F84/Memoires.html
    (EEPROM vers milieu de la page)

    si quelqu'un voit quelque chose sur ce lien qui ne correspond pas avec mon programme je veux bien un coup de pouce!!! c dur de voir ses propres fautes...
    in vino veritas

Sur le même thème :

Discussions similaires

  1. Pic16f877a!
    Par bibich2604 dans le forum Électronique
    Réponses: 0
    Dernier message: 24/05/2008, 17h34
  2. pic16F877A lecture bit
    Par hakim34 dans le forum Électronique
    Réponses: 5
    Dernier message: 11/07/2007, 13h07
  3. Réponses: 6
    Dernier message: 01/03/2007, 22h57
  4. Effacement d'eeprom vierge
    Par Jack dans le forum Électronique
    Réponses: 8
    Dernier message: 23/02/2006, 13h07
  5. programmateur d'eeprom
    Par debuthmx dans le forum Électronique
    Réponses: 0
    Dernier message: 30/08/2003, 01h15