Rozwiązanie problemu jest stosunkowo proste. Gromadzisz liczbę impulsów do zwykłej lokalizacji w pamięci RAM. Następnie raz na 10 minut kopiujesz aktualną wartość licznika opartego na pamięci RAM do EEPROM. Stosując tę strategię, pamięć EEPROM o wytrzymałości na milion cykli będzie działać przez około 19 lat. W przypadku większości produktów jest to dobre porównanie z oczekiwanym cyklem życia produktu.
Jeśli nastąpi nagła utrata mocy, stracisz co najwyżej 10 minut akumulacji liczby impulsów.
Istnieje dodatkowa strategia, którą należy wziąć pod uwagę w przypadku tego typu zastosowania EEPROM. Ze względu na możliwość nagłej utraty zasilania i możliwego uszkodzenia operacji zapisu EEPROM, należy zawsze przechowywać dane w pamięci EEPROM z prostym jednobajtowym kodem kontrolnym typu XOR, aby można było dobrze zweryfikować dane EEPROM. Następnie, gdy idziesz do przechowywania danych co 10 minut, przechowujesz DWIE kopie danych kodu kontrolnego &. Upewnij się, że jedna kopia jest w całości zachowana przed rozpoczęciem drugiej kopii. Powodem przechowywania obu kopii jest to, że w przypadku utraty zasilania podczas zapisywania jednej kopii, druga kopia nadal tam jest. W przypadku, gdy jest to pierwsza operacja przechowywania, która zostanie uszkodzona, druga kopia zachowa dane z poprzednich 10 minut operacji przechowywania.
Zawsze, gdy mikrokontroler uruchamia się, odczytaj pierwszą kopię danych z pamięci EEPROM do lokalizacji roboczej RAM i sprawdź poprawność jej kodu kontrolnego. Jeśli sprawdzenie jest OK, przejdź do normalnej pracy produktu. Jeśli pierwszy test wypadł źle, wczytaj drugą kopię danych z EEPROM i sprawdź. Jeśli ta kopia okaże się OK, możesz kontynuować normalną pracę. W mało prawdopodobnym przypadku oba kody kontrolne są nieprawidłowe, musisz zresetować wartość licznika do zera, a następnie powiadomić biuro domowe, że wystąpił problem.
Jeśli produkt ma normalny proces włączania / wyłączania zainicjowany przez użytkownika, w ramach normalnej sekwencji wyłączania można w takim przypadku zapisać dane w pamięci EEPROM. Aby było to skuteczne, żądanie wyłączenia zasilania musi przyjść jako sygnał do mikrokontrolera, aby mógł wykonać takie szczegóły w ostatniej sekundzie, a następnie oddzielne wyjście sterowane oprogramowaniem układowym z mikrokontrolera faktycznie powoduje wyłączenie zasilania.
Użyłem tego schematu w wielu produktach komercyjnych, aby odnieść sukces. Omówienie prostego jednobajtowego kodu kontrolnego XOR, który jest używany do sprawdzania ważności danych z pamięci EEPROM, wykracza nieco poza zakres tej odpowiedzi. To powiedziawszy, mogę udostępnić ten algorytm każdemu, kto jest zainteresowany.