EEPROM: lecture, ecriture et retour.
Répondre à la discussion
Affichage des résultats 1 à 26 sur 26

EEPROM: lecture, ecriture et retour.



  1. #1
    inviteb1a216d5

    Post EEPROM: lecture, ecriture et retour.


    ------

    Bonjour,
    j'essaye actuellement de mettre en eeprom d'un PIC 16F628A, une valeur (0,1 ou 2). Seulement, je crois que cette valeur quand je la relis, devient 0, 01 et 02. J'aimerais savoir comment faire pour supprimer le 0 devant afin, de pouvoir 'attaquer' directement une sortie, comme "BSF PORTB, valeur de l'eeprom".

    Car avec un 0, çà fonctionne mais pas avec les autres valeurs, ou alors mon programme n'est pas bon.

    j'ai mis en piève jointe dans le zip, mon fichier asm.
    (entre nous, z'aurait pu faire plus simple chez microchip)

    -----
    Fichiers attachés Fichiers attachés

  2. #2
    sdec25

    Re : EEPROM: lecture, ecriture et retour.

    Bonjour,
    Je ne vois pas de problème car 01 = 1 et 02 = 2.

  3. #3
    DAUDET78

    Re : EEPROM: lecture, ecriture et retour.

    Citation Envoyé par sdec25 Voir le message
    Je ne vois pas de problème car 01 = 1 et 02 = 2.
    Ah, la notion d'octet et de bit ... on n'est pas sortie de l'auberge !
    J'aime pas le Grec

  4. #4
    sdec25

    Re : EEPROM: lecture, ecriture et retour.

    De plus je ne pense pas qu'on puisse utiliser BSF avec une valeur dynamique (lue en EEPROM).
    Il faudrait utiliser des autres instructions (voir les infos sur ces instructions dans la datasheet).

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

    Re : EEPROM: lecture, ecriture et retour.

    Salut,

    Un conseil : le cours de Bigonoff, dont les sections dédiées à l'E2PROM et aux instructions de manipulation de bits.
    Les choses seront beaucoup plus claires après...

    Pour les instructions de manipulation ou de test de bit comme BSF xxx,yyy, le yyy siginifie le No du bit. Les seules valeurs acceptables pour yyy sont donc 0 à 7.
    BSF ne peut changer qu'un SEUL BIT à 1 (idem pour BCF).

    a+

  7. #6
    inviteb1a216d5

    Re : EEPROM: lecture, ecriture et retour.

    est-ce que ces routines suivantes sont correctes?:
    ecrire0 ; ecriture en eeprom a l'adresse 0x00
    movf 0x00, W ;(adresse est (0x00)deplacée dans W)
    movwf EEADR
    movf valeur, W ;(on mets la valeur à ecrire dans W puis dans EEDATA)
    movwf EEDATA
    bsf STATUS,RP0
    clrf EECON1
    bsf EECON1,WREN
    movlw 55h ;(procédure de 4 lignes obligatoire)
    movwf EECON2
    movlw 0xAA
    movwf EECON2
    bsf EECON1,WR
    wait0 btfsc EECON1,WR ;(on vérifie par ces dernieres lignes que l'ecriture a bien eu lieu)
    goto wait0
    bsf EECON1,WREN
    bcf EECON1,EEIF
    bcf STATUS,RP0
    bsf PORTB,5
    return

    lire ;lit l'eeprom à l'adresse 0x00
    movlw 0x00 ;charger adresse eeprom
    movwf EEADR ; adresse à lire dans registre EEADR
    bsf STATUS,RP0 ; passer en banque1
    bsf EECON1,RD ; lancer la lecture EEPROM
    bcf STATUS,RP0 ; repasser en banque0
    movf EEDATA,w ; charger valeur lue dans W
    movlw W ; on transfert la valeur de W dans reload
    movwf reload
    return

    Bigonoff aurait pu faire des exemples plus simple...

  8. #7
    gedonet

    Re : EEPROM: lecture, ecriture et retour.

    Bonjour
    cette ligne:" movf 0x00, W " n'est pas bonne, pour ecrire 0 dans W on ecrit MOVLW 00.

    Pourquoi ne pas utiliser ne pas utiliser les macro fournies dans le fichier maquette du 16F628, sur le site de Bigonoff, il se trouve que c'est moi qui l'ai ecrite donc si tu veux des informations pour cette macro que j'ai un peut adapté par rapport à celles de Bigonoff en ajoutant la possibilité de passer l'adresse à la macro par une variable.
    Gilles

  9. #8
    invite7a49d0d5

    Cool Re : EEPROM: lecture, ecriture et retour.

    Bonjour à tous,

    et oui, pourquoi toutes ces complications...

    qu'est ce qui attendent Microchip et Mr BigOnOff...

    c'est vrai quoi, c'est usant de devoir les programmer, ces PICS...

    vede
    ;O]

  10. #9
    inviteb1a216d5

    Re : EEPROM: lecture, ecriture et retour.

    comment puis-je faire à partir qu'une valeur récupérée dans l'eeprom, un test du genre:
    if variable = 1 then goto val1
    if variable = 2 then goto val2
    if variable = 3 then goto val3

  11. #10
    invite7a49d0d5

    Cool Re : EEPROM: lecture, ecriture et retour.

    Citation Envoyé par nono7380 Voir le message
    comment puis-je faire à partir qu'une valeur récupérée dans l'eeprom, un test du genre:
    if variable = 1 then goto val1
    if variable = 2 then goto val2
    if variable = 3 then goto val3
    Bonsoir,

    oui, ça devrait fonctionner...
    même si variable = 01, 02 ou 03 ou...255

    vede
    ;O]

  12. #11
    inviteb1a216d5

    Re : EEPROM: lecture, ecriture et retour.

    Citation Envoyé par vede Voir le message
    Bonsoir,

    oui, ça devrait fonctionner...
    même si variable = 01, 02 ou 03 ou...255

    vede
    ;O]

    ben, comme je programme en assembleur, çà marche po du tout.
    j'aurais peut-être du commencer en basic.

  13. #12
    sdec25

    Re : EEPROM: lecture, ecriture et retour.

    Citation Envoyé par nono7380 Voir le message
    ben, comme je programme en assembleur, çà marche po du tout.
    Tu peux nous montrer ton programme qui fait ces tests ?
    Normalement quelques lignes devraient suffire pour un test.

  14. #13
    inviteb1a216d5

    Re : EEPROM: lecture, ecriture et retour.

    Citation Envoyé par sdec25 Voir le message
    Tu peux nous montrer ton programme qui fait ces tests ?
    Normalement quelques lignes devraient suffire pour un test.
    ben en fait, je patoge encore. je lis (enfin, j'espère) une valeur en eeprom, et suivant qu'elle est a 1,2 ou 3, j'exécute un sous programme. pour le moment çà marche po du tout.

    pour contourner la difficulté, au lieu de mettre 1,2 ou 3 dans 1 emplacement eeprom, j'utilise 3 emplacements, dans lequels je met 0 ou 1. je teste quelle est la variable relue qui est à un, et j'execute mon sous programme.

    j'essaye avec BTFSC, mais j'ai po encore trouvé.

  15. #14
    inviteb1a216d5

    Re : EEPROM: lecture, ecriture et retour.

    movlw 0x00 ;on lit l'emplacement eeprom 0
    movwf EEADR
    bsf STATUS,RP0 ; bank 1
    bsf EECON1,RD
    bcf STATUS,RP0 ; bank 0
    movf EEDATA,W
    movlw reload1

    movlw 0x01 ;on lit l'emplacement eeprom 1
    movwf EEADR
    bsf STATUS,RP0 ; bank 1
    bsf EECON1,RD
    bcf STATUS,RP0 ; bank 0
    movf EEDATA,W
    movlw reload2

    movlw 0x02 ;on lit l'emplacement eeprom 2
    movwf EEADR
    bsf STATUS,RP0 ; bank 1
    bsf EECON1,RD
    bcf STATUS,RP0 ; bank 0
    movf EEDATA,W
    movlw reload3




    BTFSC reload1 , 1 ; je teste la valeur lue à l'emplacement 0, si elle est à 1, j'allume
    BSF PORTB, 0
    BTFSC reload2 , 1 ; je teste la valeur lue à l'emplacement 1, si elle est à 1, j'allume
    BSF PORTB, 1
    BTFSC reload3 , 1 ; je teste la valeur lue à l'emplacement 2, si elle est à 1, j'allume
    BSF PORTB, 2

  16. #15
    sdec25

    Re : EEPROM: lecture, ecriture et retour.

    Code:
    BTFSC reload1 , 1 ; je teste la valeur lue à l'emplacement 0, si elle est à 1, j'allume
    Attention le premier bit est le bit 0 et pas le 1.

    Sinon pour faire des tests sur ce PIC, comme il n'y a pas d'instruction de comparaison tu dois utiliser DECFSZ ou INCFSZ (décrémente, skip if 0 / incrémente, skip if 0).
    Par exemple, tu veux faire le test x==3 :
    Tu mets la valeur lue en EEPROM dans W (3)
    Avec SUBLW tu fais W = 4-W = 1
    Puis DECFSZ W

  17. #16
    inviteb1a216d5

    Re : EEPROM: lecture, ecriture et retour.

    j'ai fait çà:
    movlw reload1 ;on met la valeur de reload dans W (0 ou 1)
    SUBLW 0x01 ;on soustrait 0x01 de W
    BTFSC STATUS , Z ;on teste Z=1:alors reload vaut 0, Z=0:reload vaut 1
    BSF PORTB,0

    j'ai testé çà fonctionne. mais pas avec la lecture eeprom. donc ma routine est mauvaise.
    pourtant çà, çà devrait aller, c'est la routine du datasheet.
    lire
    bsf STATUS,RP0 ; bank 1
    MOVLW 0x00
    MOVWF EEADR
    bsf EECON1, RD
    movf EEDATA,W
    bcf STATUS,RP0 ; bank 0
    movlw reload1
    return

  18. #17
    gedonet

    Re : EEPROM: lecture, ecriture et retour.

    Bonjour
    Comme tu sembles avoir des petits problemes de programmation en assembleur, il y a une page du site des Fribottes qui est une aide tres pratique: http://fribotte.free.fr/bdtech/picnul/PicFicheAide.html tu as tous les cas de figure possibles avec la solution, les affectations, les fonctions logiques, les tests etc.
    Gilles

  19. #18
    invite7a49d0d5

    Cool Re : EEPROM: lecture, ecriture et retour.

    Citation Envoyé par nono7380 Voir le message
    ben, comme je programme en assembleur, çà marche po du tout.
    j'aurais peut-être du commencer en basic.
    Bonjour à tous,

    1 = d01 = b00000001 = o01 = h01 ...
    ...
    8 = d08 = b00001000 = o08 = h08 ...

    en bases décimales, binaires, octales, hexadécimales...
    ...
    et dans les langages basic, assembleur, c, java, logo...

    vede
    ;O]

    ps : bon courage pour l'accés à l'EEPROM...

  20. #19
    gedonet

    Re : EEPROM: lecture, ecriture et retour.

    Citation Envoyé par nono7380 Voir le message
    j'ai testé çà fonctionne. mais pas avec la lecture eeprom. donc ma routine est mauvaise.
    pourtant çà, çà devrait aller, c'est la routine du datasheet.

    movlw reload1
    Bonjour
    Tu devrais reflechir à ce que fait exactement la ligne ci dessus, moi je verrais bien quelque chose comme movwf. Utilises le document du site des Fribotte que je t'ai indiqué et tu ne feras plus de telle erreur de debutant.
    Gilles

  21. #20
    inviteb1a216d5

    Re : EEPROM: lecture, ecriture et retour.

    Citation Envoyé par gedonet Voir le message
    Bonjour
    Tu devrais reflechir à ce que fait exactement la ligne ci dessus, moi je verrais bien quelque chose comme movwf. Utilises le document du site des Fribotte que je t'ai indiqué et tu ne feras plus de telle erreur de debutant.
    Gilles
    çà ne change rien...
    l'un d'entre vous, aurait-il une routine de lecture et d'ecriture qui fonctionne et donc testée???
    j'en ai piqué quelques une sur le net, mais comme je suis pas sur qu'elles fonctionnes...

  22. #21
    gedonet

    Re : EEPROM: lecture, ecriture et retour.

    Bonjour
    Ta routine, qui est celle du data sheet, fonctionne tres bien, il faut remplacer la ligne movlw reload1 par movwf reload1.
    Il y a longtemps, quand j'ecrivais le fichier maquette pour le 16F628 du site de Bigonoff, j'ai trouvé un bug dans Mplab, on ne pouvais pas lire l'eeprom du 16F628, il me semble qu'il s'agissait de la version 5.30 ou 5.40 le bug a été corrigé par la suite et j'ai testé le bon fonctionnement de ta routine avec Mplab 8.30.

    Si tu veux des routines fiables, utilises celles du fichier maquette du 16F628.
    On le utilise les macros en ecrivant ceci:
    REEPROM adeeprom
    adeeprom est l'adresse à lire, on recupere le resultat dans w
    adeeprom peut être passé de deux façons, soit en litterale (un nombre de 0 à 127), ex: REEPROM D'35', soit par une variable, ex: REEPROM mavariable, il y a une ligne à changer dans la macro.
    Pour ecrire, c'est la même chose, on charge le valeur à ecrire dans w et on ecrit:
    WEEPROM addwrite
    addwrite est l'adresse que l'on peut passer soit en litterale, soit par une variable en changeant une ligne dans la macro.
    Gilles

  23. #22
    inviteb1a216d5

    Re : EEPROM: lecture, ecriture et retour.

    Citation Envoyé par gedonet Voir le message
    Bonjour
    Ta routine, qui est celle du data sheet, fonctionne tres bien, il faut remplacer la ligne movlw reload1 par movwf reload1.
    Il y a longtemps, quand j'ecrivais le fichier maquette pour le 16F628 du site de Bigonoff, j'ai trouvé un bug dans Mplab, on ne pouvais pas lire l'eeprom du 16F628, il me semble qu'il s'agissait de la version 5.30 ou 5.40 le bug a été corrigé par la suite et j'ai testé le bon fonctionnement de ta routine avec Mplab 8.30.

    Si tu veux des routines fiables, utilises celles du fichier maquette du 16F628.
    On le utilise les macros en ecrivant ceci:
    REEPROM adeeprom
    adeeprom est l'adresse à lire, on recupere le resultat dans w
    adeeprom peut être passé de deux façons, soit en litterale (un nombre de 0 à 127), ex: REEPROM D'35', soit par une variable, ex: REEPROM mavariable, il y a une ligne à changer dans la macro.
    Pour ecrire, c'est la même chose, on charge le valeur à ecrire dans w et on ecrit:
    WEEPROM addwrite
    addwrite est l'adresse que l'on peut passer soit en litterale, soit par une variable en changeant une ligne dans la macro.
    Gilles
    donc pour appeller la routine, je dois faire
    call REEPROM 0x00?
    parce que quand je vais fait j'ai une erreur: Error[112] D:\PIC\TEST EEPROM\TEST EEPROM.ASM 76 : Missing operator

  24. #23
    inviteb1a216d5

    Re : EEPROM: lecture, ecriture et retour.

    lecture en eeprom, çà va!
    j'arrive à déterminer si j'ai 0 ou 1 avec un petit SUBLW et deux petits test (BTFSC, BTFSS STATUS, Z). Z est à 1 si j'ai 1 en eeprom, et Z est à O si j'ai 0 en eerpom.
    maintenant, j'ai la routine d'ecriture à faire...

  25. #24
    inviteb1a216d5

    Re : EEPROM: lecture, ecriture et retour.

    ecriture
    movlw 0x01
    movwf EEDATA ; placer data dans registre
    movlw 0x00 ; charger adresse d'écriture
    movwf EEADR ; placer dans registre

    loop
    bcf INTCON,GIE ; interdire interruptions
    btfsc INTCON,GIE ; tester si GIE bien à 0
    goto loop ; non, recommencer
    bsf STATUS,RP0 ; passer en banque1
    bcf EECON1,EEIF ; effacer flag de fin d'écriture
    bsf EECON1,WREN ; autoriser accès écriture
    movlw 0x55 ; charger 0x55
    movwf EECON2 ; envoyer commande
    movlw 0xAA ; charger 0xAA
    movwf EECON2 ; envoyer commande
    bsf EECON1,WR ; lancer cycle d'écriture
    bcf EECON1,WREN ; verrouiller prochaine écriture
    ; bsf INTCON,GIE ; réautoriser interruptions
    bcf STATUS,RP0 ; repasser en banque0
    return

    j'utilise çà mais çà ne fonctionne po. un dernier petit coup de main svp?

  26. #25
    gedonet

    Re : EEPROM: lecture, ecriture et retour.

    Citation Envoyé par nono7380 Voir le message
    donc pour appeller la routine, je dois faire
    call REEPROM 0x00?
    parce que quand je vais fait j'ai une erreur: Error[112] D:\PIC\TEST EEPROM\TEST EEPROM.ASM 76 : Missing operator
    Bonjour
    C'est une macro, donc tu enleves le call et c'est bon:
    Code:
    ; lire l'adresse 00 de l'EEprom
    	REEPROM 	0x00 
    ; le resultat est dans w
    
    ; copier la valeur dans w dans la 5ieme case de l'EEprom
    	WEEPROM		0x04
    ; on arrive à cette ligne apres la fin du cycle d'ecriture (cela prend un certain temps)
    Gilles

  27. #26
    inviteb1a216d5

    Thumbs up Re : EEPROM: lecture, ecriture et retour.

    Pour ceux qui veulent:

    ADRESSE EQU H'00F0' ;on declare variable addresse
    X EQU H'00F1' ;on declare variable ecriture

    MOVLW H'00' ;on va ecrire à la position 0x00
    MOVWF ADRESSE
    MOVLW H'01' ;on va ecrire à l'emplacement adresse la valeur 0x01
    MOVWF X

    ecriture ; routine d'ecriture appelée par call
    W_EEPROM BCF INTCON,GIE ;INTERDIT LES INTERRUPTIONS
    BTFSC INTCON,GIE
    GOTO W_EEPROM
    BCF PIR1, EEIF ;EFFACER FLAG FIN éCRITURE
    BSF STATUS, RP0 ;BANK 1
    MOVF X,0
    MOVWF EEDATA
    MOVF ADRESSE,0
    MOVWF EEADR
    BSF EECON1, WREN ;AUTORISE éCRITURE
    MOVLW H'55'
    MOVWF EECON2
    MOVLW H'AA'
    MOVWF EECON2
    BSF EECON1,WR ; LANCE CYCLE éCRITURE
    WAIT BTFSC EECON1,WR ;TEST SI éCRITURE TERMINéE
    GOTO WAIT
    BCF EECON1, WREN ; VERROUILLE éCRITURE
    BCF STATUS, RP0 ;BANK 0
    BSF INTCON,GIE ; RéAUTORISE INTERRUPTION
    return

Discussions similaires

  1. [PIC] - Ecriture/Lecture en EEPROM -> Etat du timer 0
    Par jorg1n dans le forum Électronique
    Réponses: 9
    Dernier message: 02/12/2009, 06h48
  2. lecture EEPROM
    Par invite43d0193b dans le forum Électronique
    Réponses: 3
    Dernier message: 24/07/2009, 13h49
  3. ecriture et lecture eeprom
    Par invite1a90427b dans le forum Électronique
    Réponses: 2
    Dernier message: 21/03/2007, 10h22
  4. Lecture et ecriture dans eeprom 24c02
    Par invite3d33f9e2 dans le forum Électronique
    Réponses: 2
    Dernier message: 29/06/2006, 19h32
  5. Ecriture dans EEPROM 24LC16
    Par gimmy dans le forum Électronique
    Réponses: 3
    Dernier message: 06/09/2005, 22h19
Découvrez nos comparatifs produits sur l'informatique et les technologies.