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



Teraz jest 7 lut 2025, o 23:56


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
 Tytuł: eeprom
PostNapisane: 29 sie 2012, o 07:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Witam,
Mam takie małe pytanko.
Czy istnieje możliwość napisania programu, który tylko raz (na samym początku zapisze w pamięci EEPROM np. zmienną 100) a potem (po każdym resecie) nie będzie zapisywał..

Pewnie nikt nie zrozumiał o co chodzi dlatego dam przykład..

Załóżmy, że po naciśnięciu przycisku ma się inkrementować zmienna ilość zapisana w EEPROM.
Tylko, że inkrementacja ma się zaczynać od 100.
/////////////////////
Jak ja to zawsze robiłem.
1.Najpierw pisałem program tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


2.Wysyłałem do uC.
3. Potem kasowałem linijkę:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

I jeszcze raz wysyłałem do uC.

Czy tak się powinno robić, czy istnieje inny sposób?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: eeprom
PostNapisane: 29 sie 2012, o 08:08 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27354
Lokalizacja: Szczecin
Pomógł: 1042

nadal nie rozumiem problemu który sobie wymyśliłeś ;)

ale spróbuję coś podpowiedzieć a nóż się uda ;) o ile coś tam zrozumiałem. Dodam tylko że nie za bardzo mogę zrozumieć bo co to znaczy że na samym początku zapisze 100 ??? a co to jest SAM POCZĄTEK ? ;) Jak to mówią na początku to był haos a później powstał wszechświat - ale pewnie nie o ten początek ci chodziło. Więc tak

być może chodzi ci o domyślną inicjalizację zmiennych w pamięci EEPROM ??? jeśli tak to co za problem ???

Normalnie jak eeprom jest pusty to wszystkie komórki mają wartość 0xFF, i o tym trzeba pamiętać, że nie żadne tam 0x00

zatem przygotowujesz sobie domyślną - ale właśnie nie zmienną (jak najszybciej odejdź od tworzenia pojedynczych zmiennych w eeprom) tylko ubierz to w strukturę, np tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


potem w kodzie

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


zakładam od razu że mam dwie jakieś zmienne a nie jedną, chyba tu nie będziesz miał kłopotu ze zrozumieniem a sam zobaczysz że jeśli jest to ubrane w strukturę to masz same zalety i dodanie jednej, dwóch czy większej ilości zmiennych to pikuś

i teraz przy starcie programu wczytuję sobie dane z eeprom do ram na chwilę

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


sprawdzam czy np moja zmienna1 jest = 0xff albo mniejsza od 100

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


czyli jeśli zmienna1 była niezainicjalizowana co oznacza dla mnie jak pisałem wyżej że ma 0xFF albo mniejsza od 100 to wtedy inicjalizuję ją wartością domyślną z FLASH. Czyli ten warunek wykona się TYLKO raz gdy np eeprom był pusty/skasowany albo jeśli coś nie tak się zapisało do niego to zostanie przywrócona i tak wartość domyślna.

a jeśli nie jest w tym przedziale to znaczy że już program działa i sobie tam jakoś coś robi z tą zmienną np ją inkrementuje

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


(uwaga mogłem niechcący zamienić kolejność argumentów źródło/cel w funkcjach eeprom_read_block - lub eeprom_write_block więc to sobie sprawdź

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: eeprom
PostNapisane: 29 sie 2012, o 08:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Aaaa.
To w taki sposób to się robi..

Dzięki za fajny przykład.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: eeprom
PostNapisane: 29 sie 2012, o 11:48 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Zastanów się, czy w ogóle potrzebujesz EEPROM. Jeśli nie odłączysz zasilania możesz korzystać ze zmiennej w RAM, która zostanie zainicjowana tylko w przypadku załączenia zasilania (Power On Reset). Nie każdy attiny ma EEPROM.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: eeprom
PostNapisane: 29 sie 2012, o 14:42 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27354
Lokalizacja: Szczecin
Pomógł: 1042

GwynBleidD napisał(a):
Można jeszcze inaczej: utworzyć zmienną w EEPROM i zainicjować ją od razu swoją wartością. Popatrz, że ta wartość nie będzie wpisywana do EEPROMu przy każdym uruchomieniu programu, ale dostaniesz plik z zawartością EEPROMu który przy flashowaniu programu również flashujesz. Później ze zmienną dzieje się dokładnie to, co chcesz żeby z nią program robił :)


No można niby ale ja ZDECYDOWANIE odradzam takie praktyki ;)

dlaczego ?

bo wyobraź pan sobie taką sytuację ( a przysięgam ci że zdarza się ona często w różnych urządzonkach produkowanych przez hmmm amatorów niestety )

1. Ty jesteś z Krakowa a ja ze Szczecina
2. zbudowałeś dla mnie sterownik
3. wpisałeś domyślne wartości do EEPROM sposobem jak opisałeś powyżej
...
4. niestety po roku czasu sterownik mi SFIKSOWAŁ i na podstawie analizy telefonicznej doszedłeś że coś musiało się zrąbać w EEPROM .... bo po starcie nie pojawiają się domyślne ustawienia tylko jakieś z kosmosu

5. nie ważne jaka awaria nastąpiła, nie ważne co zrobił user czyli ja - ale urządzenie MUSI pracować jak najszybciej i potrzebne są DOMYŚLNE ustawienia

6......... no i teraz taki sprzedawca sterownika czyli TY - dzwonisz do mnie i mówisz - hmmm prawdopodobnie coś się zrąbało z EEPROM i trzeba byłoby go ponownie zaprogramować ..... a ja na to mówię (jako całkowity NEPTYK elektroniczny - PANIE! a co mnie to obchodzi - zapłaciłem za to KUPĘ kasy i to ma działać a jak nie działa to napraw to pan - bo zgodnie z umową masz pan 8 godzin na naprawę)

.....hmmm nie pozostaje ci nic innego jak wsiąść nawet nie do pociągu byle jakiego, tylko do SAMOLOTU , zabrać ze sobą programator i ciort wie co jeszcze i żeby czegoś nie zapomnieć np nowszego wsadu

więc lecisz Pan do Szczecina żeby taką głupotkę zrobić i tracisz KUPĘ kasy

.... dlatego na drugi raz, po takim przypadku - sam już NIGDY nie skorzystasz ze sposobu opisanego przez siebie, tylko:

1. dodasz do urządzenia KLAWISZ o nazwie RESET jak to bywa w Routerach ;) i w razie takiego przypadku powiesz klientowi Neptykowi czyli mi -

Panie wyłącz pan zasilanie, wciśnij klawisz RESET z tyłu urządzenia i załącz pan to zasilanie trzymając wciśnięty ten klawisz przez 5 magicznych sekund a potem go puść ;)

a w kodzie napiszesz sobie że jak przy starcie klawisz zwarty do GND (bez żadnego debouncigu) to ma załadować tym sposobem który opisałem na SIŁĘ np domyślne ustawienia z FLASH bo tam na pewno nic się nie stało

więc zobacz - może się taki sposób przydać nie tylko na przypadek MEGA Awarii ale też w dowolnym momencie gdy ustawień są setki i trzeba szybko albo nawet programowo przywrócić ustawienia fabryczne ;)

zgadza się ? - chyba lepiej taki przypadek przeżyć virtualnie tak jak w tym poście a później już robić jak się należy

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: eeprom
PostNapisane: 29 sie 2012, o 15:25 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27354
Lokalizacja: Szczecin
Pomógł: 1042

GwynBleidD napisał(a):
No i dlatego mirku tak też robię, ale do opisanego zastosowania, czyli licznika jest to jak najbardziej dobra metoda :) A może być to np licznik energii elektrycznej w którym jakiekolwiek resetowanie jest niewskazane (tym bardziej przez użytkownika, a nie elektrownię).


Zgadza się ;) jak najbardziej ale wtedy też można zrobić i nawet warto bez wrzucania pliku eep podczas końpilacji do procka.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: eeprom
PostNapisane: 29 sie 2012, o 16:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

No tak Mirku, jak zwykle wyjaśnienie dobre, tyle tylko że nie do mojego projektu (dioda RGB)
W sumie też by mogło być, ale po co?

Na początku sprostujke po co powstał ten temat.
Ano z niewiedzy.
Myślałem, że jeśli zainicjuję zmienną w eepromie jakąś wartością, to za każdym resetem programu będzie ona incjowana, a jak się okazało nie będzie ;D

Będę potrzebował EEPROMU do tego aby zapamiętać kolor poszczególnych barw.
No i myślałem, że jeśli dam w kodzie:

uint8_t red EERAM;
red=100;

TO za każdym uruchomieniem programu zmienna red będzie miała wartość 100.
Ale jak widać, to było zle założenie..
I na szczęście istnieje te forum, które mi pomogło :))



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: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO