Skocz do zawartości
Zaloguj się, aby obserwować  
bartek1333

Problem z zapis/odczyt EEPROM atmega8

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?

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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?

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
Share on other sites

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?

Udostępnij ten post


Link to post
Share on other sites
makes pointer from integer without a cast

"robi wskaźnik z integer bez rzutowania", czyli musisz do funkcji podać adres zmiennej a nie jej wartość.

pwm = eeprom_read_byte(&pw);

  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Ok, pomogło dodanie przed zmienną - &

Dzięki za pomoc.

Udostępnij ten post


Link to post
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!

Gość
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.

Zaloguj się, aby obserwować  

×
×
  • Utwórz nowe...