Skocz do zawartości

Problem z zapis/odczyt EEPROM atmega8


bartek1333

Pomocna odpowiedź

Witam,
mam problem z zapis/odczyt do wewnętrznej pamięci EEPROM atmega8.

Najpierw dołączam nagłówek:

Potem deklaruje zmienną p, która będzie adresem:

EEMEM unsigned char p;

następnie zapisuje do niej jakąś wartość:

eeprom_write_byte(& p, 100);

i zapisuje do zmiennej pwm:

pwm = eeprom_read_byte(& p)

i programuje procka. Gdy chce wyświetlić na wyświetlaczu wartość tez zmiennej, wychodzą jakieś inne wartości lub znaki.

Jaka może być przyczyna takiego zachowania mikrokontrolera?

Link do komentarza
Share on other sites

Zmień

eeprom_write_byte(& p, 100);

na

eeprom_write_byte(a, 100);

a

pwm = eeprom_read_byte(& p)

na

pwm = eeprom_read_byte(a)

Zmieniłem nazwę zmiennej p na a bo włączał się uśmieszek.

I oczywiście zadbaj aby zmienna p miała taką samą wartość przy zapisie i odczycie.

Link do komentarza
Share on other sites

Czyli mogę zrobić tak:?

const EEMEM unsigned char a;

I jeszcze jedno, czy podczas programowania procesora pamięć EEPROM zostaje wyczyszczona czy te dane dalej są dostępne?

Link do komentarza
Share on other sites

I jeszcze jedno, czy podczas programowania procesora pamięć EEPROM zostaje wyczyszczona czy te dane dalej są dostępne?

Zależnie od Fusebitów. Jest jeden bit oznaczony jako EEprom preserve i określa czy eeprom się kasuje czy zostaje podczas programowania.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Skrócony kod wygląda teraz tak:

unsigned char pwm;
const EEMEM unsigned char pw; // zmienna EEPROM przechowująca adres pwm

potem wczytuje:

pwm = eeprom_read_byte(pw);

podczas kompilacji wyrzuca mi warning:

warning: passing argument 1 of '__eerd_byte_m8' makes pointer from integer without a cast

Co jest nie tak?

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.