vlad_2770 Posted April 30, 2005 Share Posted April 30, 2005 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
bogdanm Posted April 30, 2005 Share Posted April 30, 2005 Respecti exact secventa de scriere in EEPROM din datasheet? Pare ca nu ai astepta ca PIC-ul sa termine ce a avut de scris. Link to comment
Guest Cristiano_ Posted April 30, 2005 Share Posted April 30, 2005 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
vlad_2770 Posted May 3, 2005 Author Share Posted May 3, 2005 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
vlad_2770 Posted May 3, 2005 Author Share Posted May 3, 2005 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
vlad_2770 Posted May 4, 2005 Author Share Posted May 4, 2005 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
bogdanm Posted May 4, 2005 Share Posted May 4, 2005 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
sifor Posted May 4, 2005 Share Posted May 4, 2005 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now