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

EEPROM pic16f84a



  1. #1
    guijac92

    EEPROM pic16f84a


    ------

    Bonjour,
    je voudrais sauver dix petites valeurs (de 0 à 10) dans l'EEPROM de mon pic16f84a pour qu'elles restent en cas de coupure de courant.

    Le problème c'est que je n'ai aucune idée comment écrire et lire des valeurs dans l'EEPROM...

    Pourriez-vous me dire comment faire svp ?
    Merci d'avance,
    Guillaume

    ps. je programme en C avec le compilateur HI-TECH

    -----

  2. #2
    sdec25

    Re : EEPROM pic16f84a

    Bonjour,
    Comme toutes les fonctionnalités, c'est expliqué dans la datasheet de ton PIC, section "Data EEPROM Memory". Il y a une section "Reading the EEPROM" et "Writing the EEPROM", ainsi que des exemples.

  3. #3
    guijac92

    Re : EEPROM pic16f84a

    Bonjour,
    Merci pour votre réponse.

    J'ai remarqué que mon compilateur (HI-TECH) offrait enfaite les fonctions toutes faites :

    -------------------------------------------------------------------------------------------------------

    /****************************** ****************************** ***********/
    /****** EEPROM memory read/write macros and function definitions *******/
    /****************************** ****************************** ***********/
    /* NOTE WELL:

    The macro EEPROM_READ() is NOT safe to use immediately after any
    write to EEPROM, as it does NOT wait for WR to clear. This is by
    design, to allow minimal code size if a sequence of reads is
    desired. To guarantee uncorrupted writes, use the function
    eeprom_read() or insert
    while(WR)continue;
    before calling EEPROM_READ().
    */
    #if EEPROM_SIZE > 0
    #ifdef __FLASHTYPE
    // macro versions of EEPROM write and read
    #define EEPROM_WRITE(addr, value) \
    do{ \
    while(WR)continue;EEADR=(addr) ;EEDATA=(value); \
    EECON1&=0x7F;CARRY=0;if(GIE)CA RRY=1;GIE=0; \
    WREN=1;EECON2=0x55;EECON2=0xAA ;WR=1;WREN=0; \
    if(CARRY)GIE=1; \
    }while(0)
    #define EEPROM_READ(addr) ((EEADR=(addr)),(EECON1&=0x7F) ,(RD=1),EEDATA)
    #else // else doesn't write flash
    #define EEPROM_WRITE(addr, value) \
    do{ \
    while(WR)continue;EEADR=(addr) ;EEDATA=(value); \
    CARRY=0;if(GIE)CARRY=1;GIE=0; \
    WREN=1;EECON2=0x55;EECON2=0xAA ;WR=1;WREN=0; \
    if(CARRY)GIE=1; \
    }while(0)
    #define EEPROM_READ(addr) ((EEADR=(addr)),(RD=1),EEDATA)
    #endif

    /* library function versions */
    extern void eeprom_write(unsigned char addr, unsigned char value);
    extern unsigned char eeprom_read(unsigned char addr);
    #endif // end EEPROM routines

    -------------------------------------------------------------------------------------------------------

    J'ai donc essayé de mettre ça dans mon programme :

    - Pour lire :
    for(j=0;j<10;j++)
    {
    variable[j] = EEPROM_READ(j);
    }

    - Pour écrire :
    for(j=0;j<10;j++)
    {
    EEPROM_WRITE(j,variable[j]);
    }

    Mais sa ne marche pas...

    Avez-vous une idée pourquoi ?

    Merci d'avance,
    Guillaume

Discussions similaires

  1. question sur le PIC16F84A
    Par rola_style dans le forum Électronique
    Réponses: 4
    Dernier message: 24/08/2007, 21h24
  2. PIC16f84a
    Par clinon dans le forum Électronique
    Réponses: 33
    Dernier message: 06/08/2007, 02h31
  3. pic16f84A
    Par spike 03100 dans le forum Électronique
    Réponses: 5
    Dernier message: 06/02/2007, 19h22
  4. Timer PIC16F84A...??
    Par bimo dans le forum Électronique
    Réponses: 3
    Dernier message: 27/06/2006, 12h30
  5. programme pic16F84A
    Par amgab2003 dans le forum Électronique
    Réponses: 0
    Dernier message: 26/03/2006, 11h14
Découvrez nos comparatifs produits sur l'informatique et les technologies.