Witam
Sporo jest pytań na temat EEPROMU, ale nie udało mi się znaleźć odpowiedzi, więc przedstawię swój problem.
Wykonałem zegar szachowy na ukł. ATmega 8. Wszystko działa poprawnie oprócz zapisu i odczytu pamięci EEPROM. Procedura zapisu nie modyfikuje pamięci, procedura odczytu daje zawsze "0", bez względu na rzeczywistą zawartość. Zapis i odczyt przez programator przebiegają prawidłowo.
To samo na trzech układach ATmega 8, jednym '88 i jednym '32. Program pisałem w ASM w AVR Studio 4.13. Programuję samoróbką pod COM'a z PonyProg 2.07a.
Zasilanie z baterii przez stabilizator 7805 (daje równe 5V), BOD włączony, reset podciągnięty, środowisko raczej wolne od zakłóceń EM. Taktowanie wewnętrznym rezonatorem na częstotliwości fabrycznej. Próbowałem zapisu pod różnymi adresami bo czytałem, że z początkowymi bywają problemy.
Nie mogłem dojść przyczyny, więc maksymalnie uprościłem program:
i po odczycie EEPROMu programatorem jest to samo, co było przed uruchomieniem powyższego programu
Przewertowałem notę aplikacyjną, mądrą książkę, forum i nic.... pomocy!
Sporo jest pytań na temat EEPROMU, ale nie udało mi się znaleźć odpowiedzi, więc przedstawię swój problem.
Wykonałem zegar szachowy na ukł. ATmega 8. Wszystko działa poprawnie oprócz zapisu i odczytu pamięci EEPROM. Procedura zapisu nie modyfikuje pamięci, procedura odczytu daje zawsze "0", bez względu na rzeczywistą zawartość. Zapis i odczyt przez programator przebiegają prawidłowo.
To samo na trzech układach ATmega 8, jednym '88 i jednym '32. Program pisałem w ASM w AVR Studio 4.13. Programuję samoróbką pod COM'a z PonyProg 2.07a.
Zasilanie z baterii przez stabilizator 7805 (daje równe 5V), BOD włączony, reset podciągnięty, środowisko raczej wolne od zakłóceń EM. Taktowanie wewnętrznym rezonatorem na częstotliwości fabrycznej. Próbowałem zapisu pod różnymi adresami bo czytałem, że z początkowymi bywają problemy.
Nie mogłem dojść przyczyny, więc maksymalnie uprościłem program:
//PROGRAM ZAPISUJĄCY KOMÓRKĘ EEPROMU
.INCLUDE "m32def.inc"
.ESEG
.ORG 0x100
Komorka: .DB 0
.CSEG
.ORG 0
rjmp Reset
.ORG 0x30
Reset:
ldi R16, 5 ; wartość do wpisania
ldi R17, low(0x100)
ldi R18, high(0x100)
skok:
sbic EECR, EEWE ; sprawdzenie gotowości EEPROMu
rjmp skok
out EEDR, R16 ; wpisanie wartości do bufora
out EEARL, R17
out EEARH, R18
sbi EECR, 1<<EEMWE ; włączenie zezwolenia i zapis
sbi EECR, 1<<EEWE
ldi R16, 1<<0 ; test działania mikrokontrolera
out DDRA, R16
out PORTA, R16
Petla:
nop
rjmp Petla
i po odczycie EEPROMu programatorem jest to samo, co było przed uruchomieniem powyższego programu
Przewertowałem notę aplikacyjną, mądrą książkę, forum i nic.... pomocy!