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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.