Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 22:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 22 lut 2020, o 00:03 
Offline
Nowy

Dołączył(a): 08 cze 2014
Posty: 10
Pomógł: 0

Witajcie, oto mój kolejny post z cyklu pomocy w oślej łączce :D

Wymyśliłem sobie aby zrobić (zbudować) licznik przebiegu. Sama obsługa wyświetlaczy segmentowych nie jest mi obca, tak samo wiem jak policzyć dystans.
Problem polega na tym jak to najlepiej zachować.
Mój pierwszy pomysł wygląda tak aby zapisywać sobie każdą cyfrę licznika osobno, w sumie mamy wtedy 6 zmiennych i problem nie istnieje. ALE, no właśnie... ale mój umysł wymyślił sobie że można zrobić jedną zmienną która będzie przechowywać liczbę do 1 000 000. Oszczędność czasu i miejsca, pytanie brzmi jak to później rozbić na pojedyncze liczby wysyłane do wyświetlaczy segmentowych? Kolejny pomysł to rozbicie w dwie zmienne po 3 cyfry każda ale problem jak wyżej i dodatkowo dobrze to składać.

Druga część zagadnienia to zapis do eeprom, licznik przebiegu jak działa każdy wie i chyba nie trzeba tego tłumaczyć, jak realizować zapis? Wewnętrzny eeprom ma możliwość zapisu 100 tyś. razy, i mało i dużo. Warto inwestować w zewnętrzny eeprom czy lepiej (łatwiej) zwiększyć interwał między zapisem? Wymyśliłem sobie że można zrobić bufor zasilania w postaci odpowiedniego kondensatora i wykrywać zakończenie podróży poprzez wyłączenie stacyjki. Wtedy automatycznie robić zapis do eeprom i teoretycznie mamy 100tyś. podróży aby doprowadzić do martwicy pamięci. Pomysł teoretycznie dobry, co myślicie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2020, o 00:22 
Offline
Użytkownik

Dołączył(a): 01 lis 2013
Posty: 302
Pomógł: 32

kris4cars napisał(a):
pytanie brzmi jak to później rozbić na pojedyncze liczby wysyłane do wyświetlaczy segmentowych?

Możesz sobie liczbę przekształcić na string-a za pomocą np. sprintf() i kolejne znaki wysyłać z tablicy na wyświetlacz led.

kris4cars napisał(a):
Wtedy automatycznie robić zapis do eeprom i teoretycznie mamy 100tyś. podróży aby doprowadzić do martwicy pamięci.

Nie nastąpi to tak szybko. Zauważ, że eeproma trochę jest. Będziesz zapisywał pewnie 4 bajty. Zamiast zapisywać ciągle do tych samych komórek eeprom, można co kilka zapisów zmieniać adres danych w eeprom.

Innym podejściem jest podpiąć zewnętrzny układ zegarka, który to jest podtrzymywany bateryjnie. Większość takich układów ma kilka bajtów pamięci ram, które można użyć do własnych celów. Przy okazji zyskasz zegar.

Jeszcze innym rozwiązaniem jest stałe zasilanie układu, Po wykryciu stanu stacyjki ( wyłączenie silnika ) robić zapis do eeprom i po zapisie usypiać procka.

itd, itp.....

_________________
Pozdrawiam,
sq8mvy, Paweł



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2020, o 00:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Robocie zmiennych - polecam poczytać o strukturach i uniach. Można też innym sposobem - przesunięcia bitowe. Co kto lubi :)

Odnośnie zapisu do EEPROM to najprościej i dość pewnie tak właśnie powinno się to robić czyli kondensator, który będzie miał na tyle energii aby uC zdążył bez problemu zapis stanu zrobić. Przed kondensatorem dioda i z jej anody (albo jeszcze wcześniej) brać sygnał o zaniku napięcia.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2020, o 13:00 
Offline
Użytkownik

Dołączył(a): 28 wrz 2016
Posty: 215
Pomógł: 14

Ad1. Ponieważ do zapisu 1000000 potrzebujesz 20 bitów, to musisz operować na 24 bitowej liczbie czyli 3 bajtowej. Można więc liczbę ta rozbić na 3 części po 100.
Trochę to skomplikuje dodawanie, ale znacznie uprości "wyłuskiwanie" cyfr. Bo znacznie częściej będziesz zamieniał swoją liczbę na cyfry niż zwiększał swoją liczbę.
Ad2. Można znacznie zwiększyć ilość cykli zapisu do EEPROM'u stosując prostą sztuczkę polegającą na tym, że przeznacza się jedną komórkę EEPROM'u na licznik cykli zapisu. Jeżeli zostanie przekroczona założona wartość cykli zapisu, to wartość zapisujemy w następnej komórce. Można też spróbować z zapisem nie całej liczby, tylko zapisywać przyrost i co jakiś czas uaktualniać liczbę.

_________________
de gustibus non est disputandum



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 mar 2020, o 13:14 
Offline
Użytkownik

Dołączył(a): 14 sie 2016
Posty: 905
Pomógł: 39

Można jeszcze skorzystać z pamięci EERAM.

_________________
Moje porady są błędne,nie czytać,zbanować od razu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 7 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO