Jump to content
ELFORUM - Forumul electronistilor

intrebare intrebatoarlegata de EEPROM la 16F877


vlad_2770

Recommended Posts

Am si eu o problema cu acest PIC. Vreau sa salvez anumite valori in memoria EEPROM a PIC-ului. Chiar si la o rutina simpla la care scriu doua valori una dupa alta prima inscriere o citesc corect a doua o citesc aiurea. Daca pun o intirziere intre cele doua scrieri, citirea primei inscriei se face corect a doua imi returneaza alta voaloare diferita de cea pe care o ciesc daca nu am intirziere intre cele doua scrieri. Adica concret la scrierea fara intirziere la a doua adresa imi apare ca am scris caracterul omega la scrierea cu intirziere citesc caracterul - , nu-mi pot da seama care este problema.

Link to comment
  • Replies 7
  • Created
  • Last Reply

Top Posters In This Topic

  • vlad_2770

    4

  • bogdanm

    2

  • sifor

    1

Top Posters In This Topic

Guest Cristiano_

bit 1 WR: Write Control bit

1 = Initiates a write cycle. The bit is cleared by hardware once write is complete. The WR bit

can only be set (not cleared) in software.

0 = Write cycle to the EEPROM is complete

 

Inainte de fiecare scriere trebuie sa astepti ca bitul WR sa fie resetat, dupa cum poti vedea in exemplul dat tot in datasheet:

 

BSF STATUS,RP1 ;

 

BSF STATUS,RP0

BTFSC EECON1,WR ;Wait for write

GOTO $-1 ;to complete

BCF STATUS, RP0 ;Bank 2

MOVF DATA_EE_ADDR,W ;Data Memory

MOVWF EEADR ;Address to write

MOVF DATA_EE_DATA,W ;Data Memory Value

MOVWF EEDATA ;to write

BSF STATUS,RP0 ;Bank 3

BCF EECON1,EEPGD ;Point to DATA

;memory

BSF EECON1,WREN ;Enable writes

BCF INTCON,GIE ;Disable INTs.

MOVLW 55h ;

MOVWF EECON2 ;Write 55h

MOVLW AAh ;

MOVWF EECON2 ;Write AAh

BSF EECON1,WR ;Set WR bit to

;begin write

BSF INTCON,GIE ;Enable INTs.

BCF EECON1,WREN ;Disable writes

 

Link to comment

secventza folosita de mine:WRITE BSF STATUS,RP1 ; BSF STATUS,RP0 BTFSC EECON1,WR ;Wait for write GOTO $-1 ;to complete BCF STATUS,RP1 ;selectez bancul 0 BCF STATUS,RP0;Fara asta nu reusesc sa scriu in W Data_ee_addr MOVF DATA_EE_ADDR,W ;Data Memory BSF STATUS,RP1 ; BCF STATUS, RP0 ;Selectez Bank 2 MOVWF EEADR ;Address to write BCF STATUS,RP1 ;selectez bancul 0 BCF STATUS,RP0 MOVF DATA_EE_DATA,W ;Data Memory Value BSF STATUS,RP1 ; BCF STATUS,RP0 MOVWF EEDATA ;to write BSF STATUS,RP0 ;Bank 3 BCF EECON1,EEPGD ;Point to DATA memory BSF EECON1,WREN ;Enable writes BCF INTCON,GIE ;Disable INTs. MOVLW 0x55 ; MOVWF EECON2 ;Write 55h MOVLW 0xAA ; MOVWF EECON2 ;Write AAh BSF EECON1,WR ;Set WR bit to begin write BSF INTCON,GIE ;Enable INTs. BCF EECON1,WREN ;Disable writes BCF STATUS,RP1 ; BCF STATUS,RP0 RETURNAsta este secventza folosita. Mai este o problema cind folosesc rularea pas cu pas in MPLAB dupa executarea rutinei nu imi apare nici o data inscris in EEPROM chiar daca pe LCD cind rulez programul se inscrie. Mentionez ca am vazut la cineva care totusi ii mergea simularea cu MPLAB si ii scria in memoria EEPROM.De asteptat ca bitul WR sa devina jos astept in a treia linie din codul de mai sus. Idee este ca pun si un delay si in functie de el data citita dupa inscriere este diferita.

Link to comment

mai am o sansa , sa ma leg de bitul WRERR care imi indica daca operatia de scrie a fost completa sau a fost intrerupta prematur.

Link to comment

tot nu inteleg unde ar fi problemaAm facut un program simplu de tot. Citesc 3 locatii din memoria EEPROM si le afisez pe LCD, apoi scriu 3 locatii. Pornesc montajul citesc FF, FF, FF inscriu apoi a,b,c. Opresc montajul. Ponesc montajul apare a,b,c. repet chestia asta de 3-4 ori si apare identic apoi apare o data ahc , mai merge 5 ori corect apoi ff,b,c iar 4-5 ori corect iar a,b,ff si nu imi dau seama unde este buba!!! Da-ti un sfat va rog.

Link to comment

Ciudat, e drept. Intreruperile sunt dezactivate pe perioada scrierii? Incearca cu alta sursa, poate e o problema de alimentare. Eventual incearca alt clock.

Link to comment

Atentie ! Exista pe piata un lot de PIC-uri care au bulite primele 4 locatii de EEPROM ! Am nimerit si eu 2 din astea ! Nu "tin minte" ce scrii in ele !Daca scrii de la locatia a 5 a, totul merge perfect ! Mi-am spart capul o juma de zii pina am descoperit bugul asta ! Asa ca incearca sa scrii la alte locatii decit cele de la inceputul EEPROM-ului ! Poate te aflii intr-o situatie similara.Daca nici asa nu merge ! ? Nu mai stiu ce sa-ti zic, ca ti-au cam zis baietii tot ce era de zis.Don Mario

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines