Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Atmel Studio 7][AVR][C] - brak prawidłowego zapisu/odczytu EEPROM.

06 Jul 2017 15:56 621 5

  • Level 22  
    Witam.

    Powiem szczerze, że albo tylko ja jestem jakiś ciężko kapujący, albo te programowanie (zapisywanie/odczytywanie) EEPROM jest takie... trudne? ;)

    Oto moje zmienne w programie:

    Code: c
    Log in, to see the code

    Założenie jest takie, żeby zmienne b i c nie traciły swoich wartości po zaniku zasilania uC.

    Należę do osób, które za wszelką cenę starają się same pogłówkować i znaleźć rozwiązanie, ale w tym przypadku mimo przykładów i biblioteki podanej przez Dondu nadal mam problem z zapisem i odczytem w EEPROM... Czy mogę prosić o jakiś przykładowy kawałek kodu z wykorzystaniem tychże zmiennych?

    Moje próby zapisu/odczytu EEPROM kończyły się wolną frustracją... A zdaję sobie sprawę, że inne osoby mają to opanowane, dlatego proszę o jakieś nakierowanie, najlepiej właśnie na bazie mojego przykładu.

    A może jakiś inny pomysł na zachowanie zmiennych po utracie zasilania?
  • Helpful post
    Moderator on vacation ...
    Przecież dostałeś ode mnie opis nagłówka eeprom.h oraz dwa przykłady w tym jeden dokładnie taki jak potrzebujesz:

    dondu wrote:
    Funkcje obsługi eeprom z nagłówka <avr/eeprom.h>: http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html

    Tutaj jest dokładnie taki przykład jak potrzebujesz - po włączeniu odczytuje zapisane w eeprom parametry: http://mikrokontrolery.blogspo...k-podcisnieniowy-ATmega16.html

    Czego nie rozumiesz w przykładzie?

    W Twoim programie nie ma nic, nawet nagłówka eeprom.h.
    Pokaż program, który zrobiłeś, a który Ciebie tak frustruje.
  • MCUs specialist
    JasnyKris wrote:
    Moje próby zapisu/odczytu EEPROM kończyły się wolną frustracją


    Zachęcamy do podzielenia się rezultatami tych prób w celu okazania błędów. Na gotowca bym nie liczył na Twoim miejscu, takie tu panują zasady!

  • Level 22  
    dondu wrote:
    Przecież dostałeś ode mnie opis nagłówka eeprom.h oraz dwa przykłady w tym jeden dokładnie taki jak potrzebujesz:

    dondu wrote:
    Funkcje obsługi eeprom z nagłówka <avr/eeprom.h>: http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html

    Tutaj jest dokładnie taki przykład jak potrzebujesz - po włączeniu odczytuje zapisane w eeprom parametry: http://mikrokontrolery.blogspo...k-podcisnieniowy-ATmega16.html

    Czego nie rozumiesz w przykładzie?

    Quote:
    tylko ja jestem jakiś ciężko kapujący


    Co mogę więcej powiedzieć? Czasem to co jest trudne rozwiązuję w jeden dzień i układ śmiga aż miło, a czasem to co "powinno być proste"... no. ;) Wiem Dondu, że dałeś mi konkret przykład i opis nagłówka, ale chyba problem polega bardziej na tym, że nie potrafię odwzorować tego na moim przykładzie... Już Ci wspominałem, że dotychczas nie programowałem EEPROM bo nie miałem takich konieczności, czyli jestem tutaj nieco do tyłu...

    michalko12 wrote:
    Zachęcamy do podzielenia się rezultatami tych prób w celu okazania błędów.

    Masz rację - podeślę kilka moich przykładowych programów jutro (nie mam już dzisiaj dostępu do PC służbowego). Nie pomyślałem będąc jeszcze w emocjach... ;)

    michalko12 wrote:
    Na gotowca bym nie liczył na Twoim miejscu, takie tu panują zasady!

    Quote:
    Należę do osób, które za wszelką cenę starają się same pogłówkować i znaleźć rozwiązanie
  • Helpful post
    Level 40  
    JasnyKris wrote:
    Należę do osób, które za wszelką cenę starają się same pogłówkować i znaleźć rozwiązanie

    Jedyna prawdziwa informacja, jaką przekazałeś tym zdaniem, to taka, że masz wysokie mniemanie o sobie.

    Gotowiec dla leniuchów:
    Code: c
    Log in, to see the code

  • Level 22  
    excray wrote:
    JasnyKris wrote:
    Należę do osób, które za wszelką cenę starają się same pogłówkować i znaleźć rozwiązanie

    Jedyna prawdziwa informacja, jaką przekazałeś tym zdaniem, to taka, że masz wysokie mniemanie o sobie.

    Jedyna prawdziwa informacja, jaką chciałem przekazać tym zdaniem jest taka, że zawsze staram się samodzielnie rozwiązywać wszelkie problemy korzystając z matematyki/fizyki/informatyki/czystej logiki. A więc inaczej mówiąc - jestem samodzielny w wykonywaniu zadań i obowiązków, a kiedy już na prawdę nie mam pomysłów i stoję w miejscu, piszę do bardziej doświadczonych kolegów po fachu (czyt. forum elektroda). Z drugiej strony, żeby też to tak nie zabrzmiało - nie mam problemu z pracą w zespole, chociaż w aktualnej chwili więcej pracuje w zespole na forum elektroda.pl. ;)

    Jeśli moje słowa brzmiały inaczej to wybacz(cie), bo nie mam o sobie (zbyt) wysokiego mniemania - zdaję sobie sprawę, że do poziomu speca od mikrokontrolerów jeszcze sporo mi brakuje i nie mam z tym problemu, po prostu idę dalej drogą. ;)

    excray wrote:
    Gotowiec dla leniuchów:

    Nie prosiłem o gotowca, a już zwłaszcza dla leniuchów... prosiłem o kawałek przykładowego kodu, który bazowałby na moich zmiennych, bo wtedy od razu wiedziałbym gdzie robię błąd(ędy). Leniuchem byłbym, gdybym co chwilę prosił o wyjaśnienie podstawowych funkcji, albo gdybym pisał posty typu "szukam gotowego programu...", więc zdecydowanie daleko mi do takich określeń. No ale tak czy inaczej - dzięki za przykład. ;)

    Jutro ponownie się odezwę, jak będę miał dostęp do programów.

    Dodano po 12 [godziny] 45 [minuty]:

    Powracam.

    1) excray - już wiem gdzie robiłem błąd (patrz pkt niżej) , więc raz jeszcze dzięki za przedstawienie kodu. Tym bardziej mi głupio, że porady Dondu wcześniej mi tego nie uświadomiły bo wszystko spajało się w logiczną całość... Ehhh, wybaczcie brak prostego rozumienia prostej kwestii.

    2) Jak mówiłem, podsyłam Wam kawałek kodu, który mnie frustrował i który usilnie starałem się modyfikować (zmieniać pozycje read i write : raz dać do pętli while, raz po za nią, raz całkowicie po za int main(void) itd. itp... nazwijmy to desperacją. ;) ) I oczywiście słusznie zauważycie - nie rozumiałem tego totalnie i tkwiłem w jednym wielkim OBŁĘDZIE, aż wgrałem przykład od excray i na spokojnego od początku przeczytałem info od Dondu. Nagle wszystko stało się oczywiste...

    Oczywiście kod służy już tylko do Waszego poglądu i jest nieaktualny, ale może innym zainteresowanym uświadomi ewentualne błędy. Ten kod ewoluował u mnie wczoraj jeszcze wiele razy (korzystałem z różnych forów)...

    Code: c
    Log in, to see the code


    A tutaj już przykładowy działający kod na zapis i odczyt do EEPROM, na podstawie Waszych porad. Może też jeszcze komuś się przyda:

    Code: c
    Log in, to see the code