Skocz do zawartości
dexter1234

Arduino jako licznik motogodzin

Pomocna odpowiedź

(edytowany)
4 godziny temu, dexter1234 napisał:

algorytm chyba rozumiem

Ten algorytm to sobie musisz sam wymyślić i rozpisać (rozrysować)! Wyżej masz tylko przykład algorytmu na zapis czasu włączenia i wyłączenia do EEPROM wraz z jego przełożeniem na kod programu (szablon). Czy znasz odpowiedzi na poniższe (przykładowe) pytania:

Czy RTC ma ustawiony prawidłowy czas, czy nie?
Piszesz, że Twój program zapisuje dane do eeprom ale co konkretnie zapisuje?
Czy zapisuje datę, godzinę czy jakiś inny parametr czasowy (np. EPOCH time)?
Ile sekwencji włączeń/wyłączeń chcesz zapisać w EEPROM (32kb = 4kB)?
Czy należy sprawdzać poprawność zapisanych w eeprom danych?
Jaka jest częstotliwość włączeń/wyłączeń urządzenia?
Jaki jest typowy czas pracy/bezczynności urządzenia?
itp.

To muszą być Twoje przemyślenia, a są one ważne bo to one decydują o sposobie organizacji (wykorzystania) pamięci eeprom. Najprościej jak można moim zdaniem to ja bym podszedł do tego tak:

1. Do obsługi RTC wykorzystałbym wspomnianą już przeze mnie bibliotekę RTC by Makuna (jest dostępna z poziomu zarządzania bibliotekami Arduino IDE).
2. Dane w eeprom zapisywałbym w postaci rekordów o stałej długości np 5 bajtów:
    1 bajt - kod zdarzenia np. 0 - wyłączenie, 1 - włączenie ...... itd kody od 0 - 255
    4 bajty - czas zdarzenia w formacie zwracanym przez funkcję z biblioteki RTC by Makuna: Epoch32Time()
3. Pod adresami 0-1 pamięci eeprom przechowywałbym ilość zapisanych w pamięci rekordów.

4 godziny temu, dexter1234 napisał:

ale co z rozpoczęciem naliczania czasu od wartości na której się zatrzymał

Rozumiem, że mowa o sytuacji gdy Arduino się resetuje. Tu wypadałoby porównać w setup() aktualny czas RTC i stan urządzenia z ostatnio zapisanymi  w eeprom danymi. Można by więc np. ustalić jeden (specjalny, pierwszy) rekord w którym co określony czas zapisujemy aktualny stan pracy urządzenia i czas. I teraz to od Twoich założeń konstrukcyjnych zależy reakcja programu na takie zdarzenie. Biorąc pod uwagę ograniczoną ilość możliwych zapisów eeprom warto byłoby się zastanowić nad wykorzystaniem zamiast eeprom np. pamięci FRAM:

https://botland.com.pl/pl/pamieci-fram/4137-adafruit-mb85rc256v-pamiec-256kb32kb-fram-nieulotna-i2c.html?gclid=EAIaIQobChMIz6ew7e_i5wIVRuaaCh1oEgG1EAYYASABEgLRhfD_BwE

To bardzo ciekawa moim zdaniem i "bardziej pojemna" propozycja. Moduł także korzysta z i2c więc wiele nie zmienia.
Tak więc to co pisałem wcześniej jest nadal w mej ocenie aktualne:

4 godziny temu, Belferek napisał:

Tu nie ma czarnej magii - wróć do algorytmu. Nie musisz umieć programować by ustalić "przepis" (algorytm) na to jak program ma działać. Pokaż swój przepis - pomysł wtedy spróbujemy zamienić go na działający program.

Pokaż swój algorytm i program, który jak  piszesz działa.
 

Edytowano przez Belferek
  • Lubię! 1

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.


×
×
  • Utwórz nowe...