Witam,
używam procka ATTiny2313, wszystko działa niby super ale...
mam kłopoty z pamięcią EEPROM, tzn nie z zapisem czy odczytem. Procedury zapisu i odczytu też działają dobrze. Ustawiałem też fusebit EESAVE. Ale pomimo to po kilku nagłych wyłączeniach i włączeniach zasilania dwa zapamiętane bajty w tej pamięci potrafią zmienić swoją wartość. Normalnie na początku programu po resecie zawsze odczytywane są te 2 bajty (to taki parametr dla Timera1). Ostatnio dodałem nawet spore opóźnienie ok 1czy2 sek po resecie a przed odczytem EEPROMa i to troszkę pomogło ale niestety znowu pojawia mi się ten efekt że po którymś włączeniu lub (tak mi się wydaje) po dłuższej przerwie bez zasilania zapamiętane bajty się zmieniają czasem na inne wartości.
czy trzeba na coś szczególnego zwrócić uwagę o czym nie wiem przy korzystaniu z tej pamięci???
moja procedura odczytu:
Read_EEPROM:
push R18
re_lop:
in R16, EECR ; sprawdzanie czy skończona ew poprzednia
sbrc R16, EEWE ; operacja zapisu do EEPROM
rjmp re_lop ; jeśli nie to pętla re_lop
in R18, SREG ; zapamiętanie stanu przerwań
cli ; wyłączenie przerwań
out EEAR, R17 ; wpisanie adresu do odczytu(parametr w R17)
ldi R16, (1<<EERE)
out EECR, R16 ; uruchomienie procedury odczytu
in R16, EEDR ; pobranie wartości odczytanej do R16
andi R18, 128 ; sprawdzenie czy były włączone przerwania
brne rwe_ex ; jeśli nie to pomin nast instrukcję
sei ; włącz przerwania
rwe_ex:
re_lop1:
in R17, EECR ; ta pętla może jest niepotrzebna
sbrc R17, EEWE nie szkodzi chyba że jest
rjmp re_lop1
pop R18
ret
i jak mówię to działa , zapis jest podobnie robiony, zresztą wszystko w oparciu o przykłady z noty aplikacyjnej.
tylko dlaczego zawartość tak się potrafi zmieniać? to chyba nie jest normalne?
przy zwykłym resecie bez wyłączania zasilania zawsze wszystko jest ok
pozdrawiam i czekam na jakąś sugestę - z góry dziękuję
używam procka ATTiny2313, wszystko działa niby super ale...
mam kłopoty z pamięcią EEPROM, tzn nie z zapisem czy odczytem. Procedury zapisu i odczytu też działają dobrze. Ustawiałem też fusebit EESAVE. Ale pomimo to po kilku nagłych wyłączeniach i włączeniach zasilania dwa zapamiętane bajty w tej pamięci potrafią zmienić swoją wartość. Normalnie na początku programu po resecie zawsze odczytywane są te 2 bajty (to taki parametr dla Timera1). Ostatnio dodałem nawet spore opóźnienie ok 1czy2 sek po resecie a przed odczytem EEPROMa i to troszkę pomogło ale niestety znowu pojawia mi się ten efekt że po którymś włączeniu lub (tak mi się wydaje) po dłuższej przerwie bez zasilania zapamiętane bajty się zmieniają czasem na inne wartości.
czy trzeba na coś szczególnego zwrócić uwagę o czym nie wiem przy korzystaniu z tej pamięci???
moja procedura odczytu:
Read_EEPROM:
push R18
re_lop:
in R16, EECR ; sprawdzanie czy skończona ew poprzednia
sbrc R16, EEWE ; operacja zapisu do EEPROM
rjmp re_lop ; jeśli nie to pętla re_lop
in R18, SREG ; zapamiętanie stanu przerwań
cli ; wyłączenie przerwań
out EEAR, R17 ; wpisanie adresu do odczytu(parametr w R17)
ldi R16, (1<<EERE)
out EECR, R16 ; uruchomienie procedury odczytu
in R16, EEDR ; pobranie wartości odczytanej do R16
andi R18, 128 ; sprawdzenie czy były włączone przerwania
brne rwe_ex ; jeśli nie to pomin nast instrukcję
sei ; włącz przerwania
rwe_ex:
re_lop1:
in R17, EECR ; ta pętla może jest niepotrzebna
sbrc R17, EEWE nie szkodzi chyba że jest
rjmp re_lop1
pop R18
ret
i jak mówię to działa , zapis jest podobnie robiony, zresztą wszystko w oparciu o przykłady z noty aplikacyjnej.
tylko dlaczego zawartość tak się potrafi zmieniać? to chyba nie jest normalne?
przy zwykłym resecie bez wyłączania zasilania zawsze wszystko jest ok

pozdrawiam i czekam na jakąś sugestę - z góry dziękuję