Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega - Żywotność EEPROM / ilość cykli zapisu

maciejbilu 19 Kwi 2014 14:01 2430 9
  • #1 19 Kwi 2014 14:01
    maciejbilu
    Poziom 11  

    Witam,
    potrzebuję co minutę zapisywać zmienną w pamięci EEPROM. Ile czasu "teoretycznie" pamięć będzie można użytkować?

    Czy ilość cykli zapisu jest taka sama do odczytu?
    Czy jeżeli wykonuję tylko zapis co minutę od ilość cykli odczytu również ulega zmniejszeniu ?

    0 9
  • #2 19 Kwi 2014 14:15
    mi14chal
    Poziom 27  

    A co to za pomysł żeby co minutę zapisywać do EEPROM?

    0
  • #3 19 Kwi 2014 14:17
    tadzik85
    Poziom 38  

    maciejbilu napisał:
    Witam,
    potrzebuję co minutę zapisywać zmienną w pamięci EEPROM. Ile czasu "teoretycznie" pamięć będzie można użytkować?

    Czy ilość cykli zapisu jest taka sama do odczytu?
    Czy jeżeli wykonuję tylko zapis co minutę od ilość cykli odczytu również ulega zmniejszeniu ?



    Informacja zawarta w datashecie.
    Tylko zapis skraca życie eepromu a raczej danej jej komórki.

    0
  • #4 19 Kwi 2014 14:32
    Marek_Skalski
    Moderator Projektowanie

    Nie tyle zapis, co proces kasowania wpływa na czas życia EEPROM.
    Zapisać można kilka razy, pod warunkiem, że dopisywane są zera i to nie zmniejsza żywotności EEPROM. Tak działają niektóre algorytmy wear leveling. To operacja kasowania, wymagana gdy konieczne jest dopisanie jedynek, jest czynnikiem wpływającym na trwałość komórki, a w zasadzie całej strony pamięci. Dlatego w przypadku zużycia EEPROMu, najczęściej pojawiają się błędy w pojedynczych komórkach, ale odznacza się całą stronę jako uszkodzoną.

    0
  • #5 19 Kwi 2014 16:12
    maciejbilu
    Poziom 11  

    Ok,
    czyli w moim przypadku, przy zapisie co minutę, muszę się liczyć żywotnością ok 1600 godzin.

    Kod ma za zadanie zliczać czas pracy urządzenia w godzinach z dokładnością 1 minuty.
    Jeżeli można jeszcze w tym temacie, to zerknijcie proszę na poniższy zapis. Coś merytorycznie musiało mi umknąć. Moduł podłączyłem na czas dokładnie 2 godziny i 3 sek. Po czym po odczytaniu wartości pokazały się bzdury: 39 godzin i 118 minut.
    UWAGA! To jest tylko fragment kodu, bez deklaracji i nagłówków :-)

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Uprzedzając pytania. Atmega8 pracuje bez kwarcu - na chwilę obecną jest to kod testowy i specjalnie chciałem sprawdzić jak bardzo rozjadą się czasy.

    Dzięki

    0
  • #6 19 Kwi 2014 18:01
    Marek_Skalski
    Moderator Projektowanie

    Wspaniały przykład na to jak nie należy realizować projektów. I nie chodzi o tragiczny program, ale o wyjątkowo nieefektywny sposób realizacji samego zadania.
    Kolego, przeszukaj Forum, a znajdziesz przynajmniej kilka takich projektów.
    W skrócie:
    - nie potrzebujesz zapisywać danych do EEPROM co 1s, ani co 1,5s, ponieważ czas możesz zliczać w RAM, a zapis do EEPROM robić cyklicznie podczas pracy (co godzinę) i/lub w chwili wykrycia zaniku zasilania, czyli np. wyłączenia maszyny.
    - kontrola zaniku zasilania jest konieczna, ponieważ może się zdarzyć, że po wyłączeniu zasilania układ jeszcze będzie próbował coś zapisać do EEPROM i efektem będzie nieprawidłowa wartość, której nie będziesz mógł odtworzyć. Cała historia zniknie.
    - powinieneś wprowadzić kopie zapasowe, które w razie uszkodzenia jednej komórki pamięci będą pozwały odtworzyć prawidłową wartość z pozostałych.
    - do pomiaru czasu używaj timera, a nie funkcji "Waitms ", która się do tego nie nadaje.
    - timer ustaw w trybie CTC i dobierz jakiś sensowny czas. Jeżeli chcesz odliczać sekundy, to generuj przerwanie co 1,000s, a nie co ~1,5s.
    To tak na początek. Oczywiście, możesz próbować rozwijać i przerabiać to co napisałeś, ale szybko się przekonasz jak bardzo zawodne jest Twoje urządzenie. Jeżeli robisz to dla siebie, to tylko stracisz czas. Jeżeli robisz to dla kogoś, to możesz stracić kolegę, klienta, reputację...

    0
  • #7 19 Kwi 2014 18:47
    maciejbilu
    Poziom 11  

    Absolutnie dla siebie. Chcę się nauczyć takich funkcji.
    Czy mógłbym prosić o podesłanie linków, lub chociaż słów kluczowych, bo szukając po wyrazach "zegarek" czy "zliczanie czasu" nic sensownego nie ma.

    Zapisywanie do EEPROM jest co minuta. Co 1,5 sek jest tylko zliczanie "impulsów".
    A co 1,5 sekundy dlatego bo taki jest potrzebny interwał czasu pomiędzy włączeniem i wyłączeniem portu B.

    Czy w przypadku wykrywania zaniku zasilania układ powinien być wyposażony w bateryjkę, czy realizuje się to inaczej.

    Dzięki.

    0
  • #8 19 Kwi 2014 19:06
    tzok
    Moderator Samochody

    maciejbilu napisał:
    Czy w przypadku wykrywania zaniku zasilania układ powinien być wyposażony w bateryjkę, czy realizuje się to inaczej.
    Można użyć kondensatora... wystarczy podtrzymać działanie na czas potrzebny na zapisanie potrzebnych rzeczy w pamięci EEPROM.

    Polecam Ci tę stronę: http://mikrokontrolery.blogspot.com/

    0
  • #9 19 Kwi 2014 22:21
    excray
    Poziom 39  

    Można też zastosować pamięć FRAM.

    0