PIC16F84 problem z pisaniem do EEPROM
Masz problem? Zapytaj na forum elektroda.pl
From: "Tomasz Bednarz" <tb_at_nospam_internet.pl>
Subject: PIC16F84 problem z pisaniem do EEPROM
Date: Thu, 16 Jan 2003 13:13:21 +0100
Prubuje pisac do EEPROM (procedurka ponizej) i pisze sie - lecz jak
sprawdzam bit WR w EECON1 po zapisie i czekam na jego wyzerowanie to sie
zapetla - miejsce zaznaczylem gwiazdkami
Wiec co jest grane ?
_wreeprom movlw 0x00 ;adres min
movwf EEADR ;adres eeprom
movlw 0x35
movwf EEDATA ;dane
call _inicwr
bsf STATUS,RP0
_wrnnap1 btfsc EECON1,WR ;spr bitu wr; *****
goto _wrnnap1 ;wpis nie skonczony wr=1
bcf EECON1,WREN
bcf STATUS,RP0
return
_inicwr bsf STATUS,RP0 ;bank 1
bcf INTCON,GIE ;blokuj przerwania
bsf EECON1,WREN ;pozwolenie na wpis
movlw 0x55
movwf EECON2
movlw 0xaa
movwf EECON2
bsf EECON1,WR ;start wpisu wr=1
bsf INTCON,GIE ;odblokuj przerwania
bcf STATUS,RP0 ;bank 0
return
From: "alcon" <arturs_at_nospam_simplusnet.pl>
Subject: Re: PIC16F84 problem z pisaniem do EEPROM
Date: Thu, 16 Jan 2003 19:40:57 +0100
Użytkownik "Tomasz Bednarz" <tb_at_nospam_internet.pl> napisał w wiadomości
news:b067p5$il3$1_at_nospam_portraits.wsisiz.edu.pl...
Prubuje pisac do EEPROM (procedurka ponizej) i pisze sie - lecz jak
sprawdzam bit WR w EECON1 po zapisie i czekam na jego wyzerowanie to sie
zapetla - miejsce zaznaczylem gwiazdkami
Wiec co jest grane ?
_wreeprom movlw 0x00 ;adres min
movwf EEADR ;adres eeprom
movlw 0x35
movwf EEDATA ;dane
call _inicwr
bsf STATUS,RP0
_wrnnap1 btfsc EECON1,WR ;spr bitu wr; *****
goto _wrnnap1 ;wpis nie skonczony wr=1
bcf EECON1,WREN
bcf STATUS,RP0
return
_inicwr bsf STATUS,RP0 ;bank 1
bcf INTCON,GIE ;blokuj przerwania
bsf EECON1,WREN ;pozwolenie na wpis
movlw 0x55
movwf EECON2
movlw 0xaa
movwf EECON2
bsf EECON1,WR ;start wpisu wr=1
bsf INTCON,GIE ;odblokuj przerwania
bcf STATUS,RP0 ;bank 0
return
Witam!
Jesli to dobrze przeanalizowałem to najpierw wlaczasz przerwanie a potem
dopiero czekasz na koniec zapisu do eeprom. (a przerwanie sie wylacza po to
zeby spokojnie mogl osbie zapisac dana do pamieci co trwa do 10ms!!!) byc
moze to jest przyczyna
moja sugestatia jest taka:
_wreeprom movlw 0x00 ;adres min
movwf EEADR ;adres eeprom
movlw 0x35
movwf EEDATA ;dane
_inicwr bsf STATUS,RP0 ;bank 1
bcf INTCON,GIE ;blokuj przerwania
bsf EECON1,WREN ;pozwolenie na wpis
movlw 0x55
movwf EECON2
movlw 0xaa
movwf EECON2
bsf EECON1,WR ;start wpisu wr=1
btfsc eecon1,wr ;CZY ZAKONCZONY
ZAPIS
goto $-1 ; CZEKAJ
bcf eecon1,wren ; WYLACZENIE
ZEZWOLENIA NA ZAPIS
bsf INTCON,GIE ;odblokuj przerwania
bcf STATUS,RP0 ;bank 0
RETURN
Pozdrawiam Artur
From: "Tomasz Bednarz" <tb_at_nospam_internet.pl>
Subject: Re: PIC16F84 problem z pisaniem do EEPROM
Date: Thu, 16 Jan 2003 21:58:43 +0100
[...]
Jesli to dobrze przeanalizowałem to najpierw wlaczasz przerwanie a potem
dopiero czekasz na koniec zapisu do eeprom. (a przerwanie sie wylacza po
to
zeby spokojnie mogl osbie zapisac dana do pamieci co trwa do 10ms!!!) byc
moze to jest przyczyna
Tak jak przelozylo sie odblokowanie przerwania na pozniej to zadzialalo
ale i pierwsze podejscie bylo dobre - po co trzymac tak dlugo przerwania
zablokowane !
problem byl w tym ze mialem ustawione przerwanie od TIMERA1 ale
na koncu jego obslugi nie zerowalem znacznika przerwania T0IE w INTCON
poprzwilem i dziala ale ....
teraz zapis do eeprom cosik psuje mi kierunkowosc portow i pewnie blad tez
jest nie tu gdzie mysle :-(
ech te PICe :-(
TB
From: antispam_verox_at_nospam_a4.pl (Verox)
Subject: Re: PIC16F84 problem z pisaniem do EEPROM
Date: 17 Jan 2003 14:33:20 GMT
On Thu, 16 Jan 2003 21:58:43 +0100, Tomasz Bednarz napisał:
[...]
Jesli to dobrze przeanalizowałem to najpierw wlaczasz przerwanie a potem
dopiero czekasz na koniec zapisu do eeprom. (a przerwanie sie wylacza po
to
zeby spokojnie mogl osbie zapisac dana do pamieci co trwa do 10ms!!!) byc
moze to jest przyczyna
Tak jak przelozylo sie odblokowanie przerwania na pozniej to zadzialalo
ale i pierwsze podejscie bylo dobre - po co trzymac tak dlugo przerwania
zablokowane !
Ja robie tak:
write_ee:
bcf intcon,gie ; przerwania zablokowane
movf debug_eeadr,w ; adres
movwf eeadr
movf freql,w ; dana
movwf eedata
bsf status,rp0
bsf eecon1,wren
movlw 0x55
movwf eecon2
movlw 0xaa
movwf eecon2
bsf eecon1,wr
nop
nop
nop
bcf eecon1,wren
bcf status,rp0
bsf intcon,gie ; przerwania odblokowane
retlw 0
i nie czekam na koniec zapisu, działa świetnie od dwóch lat :-)
--
begin 666 signature.exe
[verox <at> a4 <dot> pl] vy 73! de SP9UOB
Proud to be 100 percent microsoft free. op. Tomek