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



Teraz jest 14 lis 2024, o 03:26


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 68 ]  Przejdź na stronę 1, 2, 3  Następna strona
Autor Wiadomość
PostNapisane: 24 wrz 2012, o 21:43 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

Kod :

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


Problem jest taki, że wgram program do sterownika i ustawiam sobie klawiszami wartość T_MIN na 32*C a T_MAX na 59 i odłączę zasilanie to sterownik sam przyjmuje sobie nowe wartości podczas ponownego uruchomienia i dla T_MIN ustala sobie 0*C natomiast dla T_MAX jest to 57*C. Gdzie zrobiłem błąd?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2012, o 21:50 
Offline
Moderator
Avatar użytkownika

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

Po pierwsze NIGDY nie rób tak:

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


to NIGDY - zapamiętaj NIGDY nie zagwarantuje ci że zmienne ułożą się w pamięci EEPROM czy RAM w takiej kolejności jak je sobie tu napiszesz ;)

druga rzecz to kto ci powiedział że jest ponoć uszkodzona ta pierwsza komórka :) ?

po trzecie zapoznaj się ze strukturami i ułóż sobie wszystkie zmienne które mają być w eepromie w takiej strukturze

po czwarte to jak w strukturze dasz pierwszą zmienną badblock to możesz być pewien że trafi ona wtedy na pierwszą komórkę

po czwarte korzystaj z poleceń

Kod:
eeprom_read_block()

eeprom_write_block()


zamiast siepać pojedyncze zmienne po eepromie

_________________
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  
PostNapisane: 24 wrz 2012, o 21:57 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

Kurcze łatwo powiedzieć, ale jak się ma nikłą wiedzę to jest duży problem.

Mogę zrobić taką strukturę:

Kod:
struct {
uint8_t T_MIN_EE;
uint8_t T_MAX_EE;
} T_EE;

Tylko co potem? jak to połączyć dalej z kodem ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2012, o 22:01 
Offline
Moderator
Avatar użytkownika

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

to lepiej zrób:

Kod:
typedef struct {
    uint8_t t_min_ee;
    uint8_t t_max_ee;
} T_EE;


a potem w kodzie:

Kod:
T_EE eem_zmienne EEMEM;  // definicja struktury w eeprom
T_EE ram_zmienne;  // definicja struktury w ram


no i później masz ładnie

Kod:
eem_zmienne.t_min_ee


a jak chcesz zapisywać to:

Kod:
eeprom_write_block( &eem_zmienne, &ram_zmienne, sizeof( T_EE ) );


i podobnie odczyt

aha i przestań nadawać zwykłym zmiennym nazw DUŻYMI literami ;)

_________________
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  
PostNapisane: 24 wrz 2012, o 22:11 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

Rozumiem, że przy zapisie jest kolejność taka: (gdzie, co, wielkość ) ?
A jak przy odczycie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2012, o 22:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8585
Pomógł: 337

pisałem na początku by używać odczytu i zapisu blokowego , no ale się chyba uparł :)

np taka struktura :

Kod:

typedef struct SStructure{
    int8_t cośtam_byte;
    int16_t cośtam_word;
    double jakieśdouble;
    char jakiśchar[10];
}ST;




i definiujesz sobie w eeprom zmienna np ST (struktura)

Kod:
ST EEMEM EEStruct;



i zwykła zmienną :

Kod:
ST mojastructura;


Teraz inicjujesz zmienną mojastructura tak:

Kod:
mojastructura.cośtam_byte=10;
mojastructura.cośtam_word=516;
mojastructura.jakieśdouble=123.45;
strcpy(mojastructura.jakiśchar,"blabla");



Możesz zapisać całą konstrukcję do EEPROM bez zawracania sobie głowy wielkości, członów indywidualnych, itp. poprzez wywołanie funkcji:

Kod:
void WriteStructureToEeprom(ST a){
   eeprom_write_block((const void*)&a, (void*)&EEStruct, sizeof(ST));
}


lub też uzyc:

Kod:
WriteStructureToEeprom(mojastructura);


Natomiast odczyt realizujesz:

Kod:
ST ReadStructureFromEeprom(void){
   ST temp;
   eeprom_read_block((void*)&temp, (const void*)&EEStruct, sizeof(ST));
   return(temp);
}


lub jak woilisz :

Kod:
mojastructura=ReadStructureFromEeprom();


------------------------ [ Dodano po: kilkunastu sekundach ]

chyba nie zamotałem za bardzo :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2012, o 22:16 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

Dobra coś przez mgłę widzę, tylko czy będę mógł porównać potem wartości poszczególnych pól struktur ? Chodzi o to żeby nie dokonywać zapisu struktury za każdym razem tylko wtedy gdy zajdą jakieś zmiany?

SunRiver Napisz jeszcze jak wczytać zawartość struktury EEStruct do struktury mojastructura Taki myk stostuje na samym początku programu.


Edit:

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


Teraz jest OK?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2012, o 22:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

mirekk36 napisał(a):
druga rzecz to kto ci powiedział że jest ponoć uszkodzona ta pierwsza komórka :) ?

Tak sobie przypominam, że w "Mikroprocesorowej Oślej Łączce" z Edw w rozdziale dotyczącym pamięci Eeprom było zalecenie aby nie używać komórki o adresie 0, bo w czasie krótkotrwałego zaniku napięcia procesor może do niej zapisać jakieś przypadkowe wartości. Dlatego autor tego kursu zalecał aby wszystko w Eepromie zapisywać rozpoczynając od komórki 1.

Może dlatego kolega nie chce używać tej komórki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2012, o 22:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8585
Pomógł: 337

Ja swoją drogą praktycznie unikam stosowania eeproma z atmegi ten jeden scalaczek więcej wiele mi nie zmienia

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2012, o 23:50 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

Sprawdziłem na własnej skórze, że EEPROM jest uszkodzony. Wystarczy dopisywać zmienne do struktury a po resecie sterownika otrzymujemy inne liczby. Jak dobrze trafimy to jedna liczba jest OK natomiast druga ma wartość z kosmosu. Na chwilę obecną w EEPROMie mam 11 zmiennych i chyba będzie to działało, ale jestem strasznie zawiedziony, że taki producent potrafił wypuścić uC z gniotem zamiast pamięci. Ciekawe jak sprawa wygląda w innych uC.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 wrz 2012, o 06:24 
Offline
Moderator
Avatar użytkownika

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

jacekk232 napisał(a):
mirekk36 napisał(a):
druga rzecz to kto ci powiedział że jest ponoć uszkodzona ta pierwsza komórka :) ?

Tak sobie przypominam, że w "Mikroprocesorowej Oślej Łączce" z Edw w rozdziale dotyczącym pamięci Eeprom było zalecenie aby nie używać komórki o adresie 0, bo w czasie krótkotrwałego zaniku napięcia procesor może do niej zapisać jakieś przypadkowe wartości. Dlatego autor tego kursu zalecał aby wszystko w Eepromie zapisywać rozpoczynając od komórki 1.

Może dlatego kolega nie chce używać tej komórki.


Tak tylko że warto dowiedzieć się dokładnie o co chodzi bo inaczej tworzą się plotki a na końcu taki użytkownik jak paladyn (bez urazy proszę) jeszcze stwierdzi że cały eeprom jest zepsuty i jak mógł taki producent zrobić takie babole. No w takich przypadkach to mi się nóż w kieszeni otwiera. I nie dlatego że ktoś coś źle mówi o avr czy atmelu. Tylko dlatego że jak zwykle swoją indolencję tłumaczy najchętniej winą producenta. Sorki ale w takich sytuacjach zawsze zaczynają grać u mnie emocje panie kolego paladyn. W wystarczy poczytać moje posty przeróżne na tym forum czy na elektrodzie, że jak słyszę takie rzeczy to mi się od razu niedobrze robi.


jacekk232 --> ja rozumiem, że niektórzy unikają tej pierwszej komórki eeprom, sam nawet tak często robię ale....

.... ale po kolei.

Błąd w eeprom był i to oficjalny w ATtiny2313 gdzie atmel w jakiejś nocie nawet się przyznał że w którychś seriach tych procków wprost pierwsza komórka jest wręcz uszkodzona ale nie wynika to panowie z tego że sam eeprom jako eeprom jest "ZEPSUTY". Wynikało to z faktu błędnego zabezpieczenia podczas operacji zapisu do eepromu

słusznie kolega jacekk232 prawi, że pisano w tym artykule iż podczas zaniku napięcia czasem może dojść do uszkodzenia pierwszej komórki także w innych prockach.... ale dlaczego?

ano dlatego, że domyślnie (co oczywiste chyba) rejestr adresu w pamięci eeprom jest wyzerowany, czyli wskazuje właśnie na tę komórkę. Pamięć EEPROM w prockach jest wrażliwa na napięcie zasilania (coś za coś) .... dostaliśmy fajną możliwość korzystania z EEPROM'a i to bez konieczności korzystania z techniki wysokonapięciowej czyli bez kocich 12V !!! Możemy śmiało używać +5V ..... ale czy to dziwne, że jeśli teraz będzie ono spadać poniżej to mogą być kłopoty ??? Czy to oznacza jednak że atmel dał bubla ??? Ten kto tak myśli - jak zwykle nie ma pojęcia i nigdy nie zechciało mu się doczytać - jak postępować z tym eepromem zgodnie z zaleceniami producenta a później ma kłopoty to od razu krzyczy na cały świat że to bubel a nie że sam coś źle robi.....

Piszę to i zawsze będę pisał - a najgorsze jest to, że ktoś kto widać że w ogóle zaczyna przygodę z programowaniem i widać że jeszcze potrzebuje sporo pomocy - to zamiast skupić się na szukaniu prawidłowych rozwiązań krzyczy o tym jak to producenci procków źle myślą, zawsze powtarzam że to droga do nikąd jeśli chodzi o programowanie

OK - zatem co zrobić ???? Sprawa jest prosta jak ŚWIAT! .... wystarczy sobie zapamiętać raz na ZAWSZE.

jak używasz eeproma wbudowanego w procek i chcesz mieć pewność, że będzie poprawnie działał to włącz PRZEDE WSZYSTKIM BOD !!! czyli kontrolę napięcia i ew reset. Wtedy zamiast brudnego zapisu - nie nastąpi on w ogóle a szczególnie jeśli korzystamy z gotowych obudowanych funkcji w C. Bo gorzej to mają tylko niedoświadczeni programiści w asemblerze, którzy nie przestrzegają dosyć skomplikowanej procedury zapisu do EEPROM w procku. Dlatego chociaż RAZ w życiu nawet programista C warto aby poczytał dokładnie notę i zobaczył z punktu widzenia asm jak się robi taki zapis - wtedy dużo rzeczy samych się rozjaśnia w głowie

To TYLE tytułem wyjaśnienia rzkomych problemów z eepromem wbudowanym w procesor.

Jeśli ktoś chce mieć większą pewność i uniknąć załóżmy tych zaleceń z BOD'em itd - to bardzo dobrze rozumiem, że np skorzysta z zewnętrznej kostki. Tyle że tam nikt już nie musi się martwić takimi procedurami ponieważ wewnętrzny procek robi to wszystko za nas łącznie ze swoim BOD'em ;)

czasami bywa jeszcze wiele przeróżnych powodów przemawiających za skorzystaniem z zewnętrznego eeproma ale na pewno nie takich że te wbudowane są zawodne. Szczególnie mówię tu o początkujących, którzy z tego co piszą widać że nie potrafią posługiwać się EEPROM'em w podstawowym zakresie i nie znają zaleceń jakie są w AVR GCC jeśli chodzi o wykorzystanie eeproma.

A jednym z nich (z tych zaleceń) jest korzystanie ze struktur w tym przypadku i to najlepiej jednej nawet dużej struktury, w której zawarte są wszystkie zmienne jakie tylko chcemy umieścić w eepromie. Dzięki strukturom można to nie tylko pięknie zrobić ale i jeszcze mieć większą wygodę.

Co więcej niektórzy na początku nawet na siłę próbują (pomysł rodem z bascoma albo z asm) zapisywać do eeprom pod bezwzględne adresy nie posługując się nawet zmiennymi.

ale dobra - SunRiver akurat ładnie przedstawił jak można się już w szczegółach posługiwać eepromem przy pomocy struktur, rozwinął ładnie to co ja podałem wcześniej w skrócie.

------------------------ [ Dodano po: 17 minutach ]

paladyn napisał(a):
Sprawdziłem na własnej skórze, że EEPROM jest uszkodzony. Wystarczy dopisywać zmienne do struktury a po resecie sterownika otrzymujemy inne liczby.


Dlatego właśnie paladyn nie odbieraj tego co wyżej napisałem jako jakiś atak na ciebie itp .... tylko postaraj się zrozumieć dlaczego zawsze jest taka moja reakcja. Widać bowiem że wiesz że dzwoni tylko nie wiesz w którym kościele - a świadczyć mogą o tym nawet twoje próby korzystania z funkcji:

Kod:
eeprom_busy_wait();


tyle tylko, że nie chciało się być może doczytać, że takie najbardziej już obudowane funkcje jak eeprom_write(read)_block() już się tym posługują.

paladyn napisał(a):
Jak dobrze trafimy to jedna liczba jest OK natomiast druga ma wartość z kosmosu.


Masz rację - "jak dobrze trafimy" tyle że to trafienie odnosi się do tego czy dobrze trafisz z prawidłowym podejściem do korzystania z takiego eeproma czy nie trafisz. A widać że na razie działasz mocno po omacku i dziwisz się jak saper że ci palce urywa.

paladyn napisał(a):
Na chwilę obecną w EEPROMie mam 11 zmiennych i chyba będzie to działało,

No to będzie działało ? czy nie będzie działało ? czy chyba ? zdecyduj się ;)

paladyn napisał(a):
ale jestem strasznie zawiedziony, że taki producent potrafił wypuścić uC z gniotem zamiast pamięci.


A ja zawsze jestem strasznie zawiedziony, gdy ktoś zaczyna i od razu najszybciej dochodzi do takich wniosków z kosmosu, zamiast próbować, czytać, pytać, czytać, ..... próbować, czytać, pytać itd aż do skutku. Jak by były gdzieś takie informacje oficjalne - hmmm w notach, erratach albo przytaczane w wypowiedziach jakichś programistów doświadczonych - zajmujących się avrami od wielu lat i tworzącymi przeróżne aplikacje - dużo lepszymi ode mnie - to ja panie kochany może dopiero wtedy mając na uwadze, że próbowałem już wszystkiego w ciągu ostatniego roku - może i zacząłbym podzielać takie zdanie ....

ale niestety prawda jest taka, że jak przejrzeć fora internetowe - to roi się w nich od takich (przepraszam za określenie - nie odbieraj tego osobiście) .... prawd objawionych o tym że eepromy w avrach są do kitu itp .... tyle że widać po wypowiedziach czy zadawanych pytaniach, że są to osoby zwykle całkowicie początkujące i najczęściej nawet nie wiedzą co to BOD albo i słyszeli ale jeszcze nigdy nie używali ...

paladyn napisał(a):
Ciekawe jak sprawa wygląda w innych uC.


rodzina AVR jest jedną z nielicznych, która ma wbudowaną pamięć EEPROM. Więc nie dziw się, że są takie a nie inne rygory jej wykorzystywania o których po prostu trzeba się najpierw dowiedzieć i poczytać.

Wspominałem już że są przypadki że czasem warto użyć zewnętrznej pamięci eeprom - ale na pewno tak mega podstawowe zastosowania jakie ty w tej chwili robisz - nie są przesłanką aby o tym zaraz koniecznie myśleć i to z uwagi na to że ta pamięć to gniot producenta.

------------------------ [ Dodano po: 36 minutach ]

A swoją drogą - pomyśl co się dzieje u ciebie w programie gdy zmienna index jest = 0 ???? Wtedy co sekundę niepotrzebnie wciąż zapisujesz do eeprom.

Gorzej nawet twój program od razu po uruchomieniu wciąż z marszu zapisuje i katuje tego biednego eeproma - traktujesz go chyba jak RAM..... Więc może doczytaj proszę czy tak się powinno robić

SORKI co ja gadam - przez to że stosujesz TAKIE KOSMICZNE znaczy ogromne wcięcia że kod się nie mieści to ciężko nawet analizować twój program - to panie kochany ;) u ciebie zapis do EEPROM chyba nawet nie odbywa się RAZ NA SEKUNDĘ ale kilka milionów razy na sekundę ;) z taką mocą i pełnym wydmuchem pętli głównej while(1) ;)

Jeśli twoje urządzenie pracuje tak przez wiele godzin to się zastanawiam czy może już nie zajechałeś biednego eeproma na śmierć ? ;)

eeeeh panie kolego - mam nadzieję, że tego co pisałem nie odbierzesz do siebie jako przytyki - tylko zrozumiesz moje podejście a sam zmienisz swoje i dalej będzie już tylko lepiej z tym wykorzystaniem wbudowanego eeproma. Bo wybacz ale przy takim podejściu i zewnętrzny eeprom w twoim wypadku by ci nic nie pomógł i podobnie mógłbyś go zajechać zapisując miliardy razy na sekundę..... O ile oczywiście dobrze się dopatrzyłem pośród tych przydługawych wcięć że tak jest. Dalej analizuj sam

a jak coś to po prostu dopytuj zanim wyciągniesz zbyt pochopne wnioski.

_________________
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  
PostNapisane: 25 wrz 2012, o 10:17 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

mirekk36

BOD cały czas włączony i ustawiony na 4V. Czy używam pojedynczych zmiennych w eeprom czy też struktur cały czas występuje problem właśnie z przypadkowymi wartościami zmiennych. Kod tych struktur pokazałem SunRiverowi i stwierdził, że powinno być OK. W dokumentacji do atmegi8 jest napisane tylko o BOD ,a sposób zapisu do eeprom nie jest w żaden sposób określony. Chyba, że nie doczytałem/zauważyłem tego w dokumentacji.

Co do nadmiernego zapisu eeprom to kod z początku wątku zawiera takie zabezpieczenie:

Kod:
if(T_MIN != eeprom_read_byte(&T_MIN_EE ) )
eeprom_write_byte( &T_MIN_EE,T_MIN);


Wiem, że takiego sposobu zapisu do eeprom nie lubisz, ale ten jako pierwszy odszukałem właśnie w sieci.

Rozumiem również, że przychodzi taki nowicjusz jak ja i od razu zarzuca producentowi, że to jest złe czy tamto ale po części jest to efekt informacji zawartych w sieci jak dobrze zauważyłeś. Jest pełno nie kompletnych informacji, albo informacji pisanych z myślą "a może zadziała". Właśnie tak trafiłem na instrukcję eeprom_busy_wait(); gdzie jakiś forumowicz pisał, a spróbuj może pomoże.

Co do podtrzymywania zawartości eeprom jak i jego zasilania nie miałem pojęcia, że gra toczy się na granicy 5V.


Wracając do ilości zmiennych w eeprom. Faktycznie na początku robiłem test bez kontroli zapisu (bez w/w 2 linijek kodu), ale czy to mogło uszkodzić eeprom? Powiem szczerze, że nie wiem czy liczy się ilość zapisów do pamięci czy ilość zapisów pod konkretnie miejsce w pamięci. Jeśli ta pierwsza opcja to może faktycznie lekko zjeździłem eeprom.


Na koniec nie mam Ci za złe, że jedziesz po mnie. Jeśli coś powtarzasz kilka razy, a potem widzisz, że słowa poszły w las tracisz nerwy. Chyba już tak jest, że każdy nowicjusz musi zaliczyć wszystkie błędy, żeby był level up.

Nie wiem czy pamiętasz pierwsze moje problemy z zapalaniem diody ale napisałeś wtedy, że rzucanie się na projekt sterownika CWU jest czymś za dużym dla nowicjusza. Mimo, że łatwo nie było i miałem dużo problemów z eepromem to sterownik działa.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 wrz 2012, o 10:49 
Offline
Moderator
Avatar użytkownika

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

paladyn --> w razie czego bardzo cię przepraszam jeśli odebrałeś to jako jeżdżenie po tobie. Ale każdy raczej mnie rozumie jak już wytłumaczę swoje reakcje na zarzucanie winy producentom układów scalonych czy kompilatorom przez nas programistów, gdy nie potrafimy podać jakichś na prawdę sensownych przyczyn i 100% dowodów. Więc jak mówię przepraszam.

Być może pisałem kiedyś że projekt sterownika CWU jest czymś za dużym na start dla nowicjusza, że lepiej zacząć (jeśli się zaczyna od zera) od migania diodami LED bo to chyba jest takie naturalne. I tak piszesz że to było kiedyś, więc chcąc nie chcąc pewnie przebyłeś już sporą drogę ....

A z drugiej strony - hmmm może i projekt za duży - ale dla ambitnej osoby, często tak duże wyzwanie jest jedną z najlepszych dróg aby najszybciej się czegoś nauczyć - więc de'facto wcale nie mam o tobie broń Boże złego zdania a wręcz przeciwnie, że tak się zmagasz z tym swoim celem/projektem.

No i fajnie że jesteś i tu pytasz - staramy się pomóc. Piszę "staramy" bo jak widzisz jest tu sporo fajnych ludzi ;) np słynny Sun ;)

OK - w odpowiedzi na jedno z pytań:

Cytuj:
czy liczy się ilość zapisów do pamięci czy ilość zapisów pod konkretnie miejsce w pamięci


Oczywiście że liczy się ilość zapisów w jedno konkretne miejsce pamięci i to właśnie to miejsce tylko może się nadmierną ilością zapisów uszkodzić. Ale .... ale jest jedno ale .... :) więc doprecyzuję i będziesz wiedział na przyszłość

zapis wciąż tej samej liczby a szczególnie takiej o wartości 0xff do komórki pamięci w ogóle jej nigdy nie uszkodzi ;)

jak wiesz skasowana pamięć EEPROM wypełniona jest nie zerami a właśnie wartościami 0xff

zużycie następuje tylko w przypadku gdy dokonywana jest zmiana wartości bitu 1 na bit 0

czyli nawet jeśli masz liczbę 0x55 i wciąż ją zapisujesz to liczy się tak jakbyś dokonał TYLKO JEDEN raz zapisu ;)

Teraz już wiesz, że dopiero gdy wartość ta będzie się wciąż zmieniać to dopiero wtedy komórka zaczyna się zużywać

--------------------

to jedno - ale jest jeszcze druga rzecz - zapis do eeprom, to żmudna i dosyć długotrwała procedura związana ze sprawdzaniem odpowiednich bitów stanu w odpowiednich rejestrach. Spójrz do noty PDF. To zajmuje czas. Jeśli więc nawet w pętli głównej napisalibyśmy tak:

Kod:
while(1) {

   eeprom_write_byte( &zmienna, licznik++ );

}


to tak na prawdę nie wykona się to z tak dużą szybkością ponieważ każdy zapis to sporo czasu - a więc i taki sposób w rzeczywistości musiałby trwać dziesiątki dni, miesięcy a może i lat żeby zajeździć ten nasz biedny eeprom ;) więc tego raczej trudno się obawiać a ty pisałeś że miałeś nawet warunek:

Kod:
if(T_MIN != eeprom_read_byte(&T_MIN_EE ) )
eeprom_write_byte( &T_MIN_EE,T_MIN);


ale teraz pewnie też widzisz - że to nie jest dobry warunek, bo jeśli temperatura różna - to może to trwać np ile ??? ile czasu nagrzeje się twój kocioł ? Nawet niechby się nagrzewał kilka minut, minutę - to zdajesz sobie sprawę że w tym czasie pętla może wykonać się setki/tysiące razy :( .... więc tak się po prostu warunków w programie a szczególnie z zapisem do eeprom nie konstruuje.

_________________
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  
PostNapisane: 25 wrz 2012, o 11:49 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

mirekk36 napisał(a):

Kod:
if(T_MIN != eeprom_read_byte(&T_MIN_EE ) )
eeprom_write_byte( &T_MIN_EE,T_MIN);


ale teraz pewnie też widzisz - że to nie jest dobry warunek, bo jeśli temperatura różna - to może to trwać np ile ??? ile czasu nagrzeje się twój kocioł ? Nawet niechby się nagrzewał kilka minut, minutę - to zdajesz sobie sprawę że w tym czasie pętla może wykonać się setki/tysiące razy :( .... więc tak się po prostu warunków w programie a szczególnie z zapisem do eeprom nie konstruuje.

A mnie się wydaje, że ten warunek sprawdza nie temperaturę na kotle, a minimalną zadaną przez użytkownika ;)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 wrz 2012, o 12:44 
Offline
Moderator
Avatar użytkownika

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

ok ale ja tak na prawdę mówiłem i miałem na myśli ten wpis

eeprom_write_block( &t_ram, &t_ee, sizeof( T_DATA )

w ramach switch( index ) dla case 0:

_________________
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  
PostNapisane: 25 wrz 2012, o 15:08 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

MirkoT

Zgadza się, sprawdzam minimalną i maksymalną zadaną temperaturę przez użytkownika. Temperatura kotła nie jest przechowywana w pamięci.

mirekk36

Spoko, właśnie dlatego piszę na Twoim forum bo wiem, że znajdzie się ktoś chętny do pomocy. Wcześniej próbowałem kilka razy na Elektrodzie ale odniosłem wrażenie, że niektórzy uważają się wszechwiedzących guru- zwłaszcza moderatorzy. Dlatego postanowiłem spróbować pisać o swoim problemach właśnie na tym forum zwłaszcza, że o ile dobrze pamiętam oferowałeś nawet pomoc dla osób, które zakupiły Twoją książkę.

Przy okazji książka bardzo dobra, ale przydał by się skorowidz ;)




Jeśli chodzi o wpisy:

eeprom_write_block( &t_ram, &t_ee, sizeof( T_DATA )

w ramach switch( index ) dla case 0:

to faktycznie pisałem to na szybko, żeby od razu zdać relacje czy sytuacja się poprawiła. Jednak rozumiem, że zapis do eeprom bez wcześniejszego sprawdzenia czy zaszła jakaś zmiana jest troszkę nie na miejscu.

Skoro już przyjemnie sobie rozmawiamy to zapytam o kawałek kodu poniżej:

uint8_t zmienna =5 EEMEM;

Jeśli dobrze napisałem kod to ciekawi mnie czy zmienna przyjmie wartość 5 tylko po wgraniu do uC, czy za każdym gdy będę uruchamiał uC ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 wrz 2012, o 15:28 
Offline
Moderator
Avatar użytkownika

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

paladyn napisał(a):
Skoro już przyjemnie sobie rozmawiamy to zapytam o kawałek kodu poniżej:

uint8_t zmienna =5 EEMEM;

Jeśli dobrze napisałem kod to ciekawi mnie czy zmienna przyjmie wartość 5 tylko po wgraniu do uC, czy za każdym gdy będę uruchamiał uC ?


To spójrz sobie na pliki po kompilacji tak napisanego programu. Okaże się, że powstanie nie tylko plik wsadu do Flash *.HEX ale powstanie też plik wsadu do eeprom czyli *.EEP. I jeśli ustawisz w Eclipse żeby on był wgrywany (bo domyślnie nie jest zdaje się) .... to naturalnie zostanie to wgrane do procka podczas programowania czyli razem HEX i EEP.

Jak się już chyba domyślasz ;) ... stanie się tak tylko raz po zaprogramowaniu....

ale właśnie z tego powodu nie polecam takiego rozwiązania. Pomyśl sobie (często o tym piszę zresztą) .... dajesz komuś swoje urządzenie z tak wgranym wsadem i zawartością parametrów domyślnych w eeprom. A klient jest na drugim końcu Polski. No i po paru miesiącach następuje albo jakaś mega awaria i znikają zapisy z eeprom (może nawet na skutek błędu w programie) ... albo klient zrobił inne nastawy i nie pamięta jak ustawić domyślnie i co ???

jedziesz do niego i ponownie programujesz ??? albo każesz mu przysyłać do siebie sterownik ?

nie ;)

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



i teraz przy starcie programu - już tak obrazowo ci tylko napiszę:

1. przygotowujemy sobie funkcje:
a.) kopiowania struktury z Flash do RAM
b.) kopiowania struktury z EEPROM do RAM
c.) kopiowania struktury z RAM do EEPROM

a potem:

2. sprawdzamy czy struktura w eeprom eem_params jest np pusta, możemy przecież sprawdzić czy wartości zmiennych w niej są równe 0xFF

3. jeśli jest pusta to kopiujemy flash_params do ram_params i od razu ram_params do eem_params - dzięki czemu po starcie procka (po jego zaprogramowaniu gdy eeprom jest pusty to za pierwszym uruchomieniem wpadną nam od razu domyślne wartości (Jak się procek kolejny raz uruchomi to już eem_params nie będzie pusty i do kopiowania nie dojdzie

4. user może sobie zmieniać nastawy ile chce - do bólu ;)

5. jak user chce w razie czego przywrócić domyślne ustawienia to co ??? to dokładasz przy starcie procka jeszcze jednego IF'a

- JEŚLI wciśnięty klawisz X - to skopiuj z flash do ram i z ram do eeprom - przywracając ustawienia fabryczne (jak np masz to w routerkach internetowych.

Pomyśl sobie nad tym rozwiązaniem - bo załatwia ci ono wiele spraw z marszu i bez większego kłopotu - zamiast TARABANIĆ się z tym inicjalizowaniem zmiennych w eeprom - a widzę że nadal z uporem chcesz tworzyć pojedyncze zmienne zamiast struktury ;) .... a tu pokazałem ci drugi WAŻNY powód dlaczego trzymać w postaci struktury

zawsze - za każdym razem gdy user zmieni jakąś nastawę - to od razu bez żadnego zażenowania CIACH ! i kopiujesz strukturę z RAM do EEPROM za pomocą eeprom_write_block() i po zawodach.

A nie tam uganianie się w kodzie w 300 miejscach za aktualizacją pojedynczych zmiennych rozumiesz teraz jak ? i dlaczego tak powinno wyglądać trzymanie zmiennych w postaci struktur w eeprom 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  
PostNapisane: 25 wrz 2012, o 18:03 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

mirekk36

Pomysł ciekawy i chyba jest do zrobienia nawet bez struktur. Wystarczy zrobić odpowiednią funkcje przed pętlą while uruchamianą przyciskiem reset, która nada domyślne wartości zmiennym znajdującym się w ram. Natomiast jeśli zawartość ramu jest inna niż EEPROMu to zostanie wykonany do niego zapis. Powinno to działać. Tylko jest jeden problem -> Jeśli EEPROM nie trzyma danych to nawet przycisk reset nie pomoże. Pozostaje startowanie urządzenia na przycisku reset oraz wysłanie drugiego sprawnego sterownika do klienta.

Powiem szczerze, że jakoś nie mogę zaprzyjaźnić się ze strukturami.Być może dlatego, że w projekcie przechowuje tylko 2 zmienne w pamięci. Pewnie jak bym miał więcej to sprawa wyglądała by inaczej. Natomiast jeśli dobrze zrozumiałem wcześniejszą Twoją wypowiedź to nie muszę pisać kodu, który ma sprawdzać czy zaszły jakieś zmiany między RAM a EEPROM, bo jeśli wywołam funkcje zapisu eeprom_write_block() i zawartość zmiennych w RAM jest taka sama jak w EEPROM to funkcja nie dokona zapisu, a przynajmniej nie będzie niszczyła EEPROMu

Jeśli faktycznie tak jest to sprawa wygląda coraz ciekawiej :P



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 wrz 2012, o 18:50 
Offline
Moderator
Avatar użytkownika

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

paladyn napisał(a):
Pomysł ciekawy i chyba jest do zrobienia nawet bez struktur.


hahahaa można nawet nie dość że bez struktur to jeszcze wykorzystując bezpośrednie adresowanie ;)

Widzę że się upierasz przed tymi strukturami jak niedawno na elektrodzie jeden asemblerowiec, który też zaczął pisać w C to poszedł jeszcze dalej niż ty. Doszukał się sposobu jak zapisywać dane - tzn takie zmienne jak ty masz (a on też miał tylko dwie zmienne) .... więc żeby zapisywać to nawet nie w postaci zmiennych tylko pod bezpośrednie adresy np 100 i 101 (no dowolne) .... po co mu zmienne .... wciąż pisał.

Na nic się zdały przekonywania wielu ludzi (ja nawet nie zabrałem głosu) ale czytałem sobie ten temat jak wielu tych co to już dużo lepiej od niego znają C podpowiadali mu że tak to już się w ogóle w C nie robi .... że nawet już mu o strukturach nie będą mówić ale niech chociaż używa zmiennych (nazw) a nie bezpośrednich adresów - bo przez to właśnie ma kłopoty w swoim programie ..... ale jak myślisz na koniec dał się przekonać ? ;) oczywiście że nie ;) uśmiechnąłem się tylko i nic nie dopisałem chociaż miałem już taki zamiar....

Ty tak troszkę podobnie tyle że ze strukturami ;) kurczę w C to jeden z ważniejszych jak nie BARDZO ważnych mechanizmów. Zresztą z czegoś takiego jak struktury w C wyłoniły się w końcu KLASY w języku C++ ..... już to świadczy o potędze....

ale tak to bywa - na siłę nikomu się nie powie żeby korzystał z wyspecjalizowanego ramienia robota zamiast młotka, skoro ktoś woli na razie młotek ....

Ja przyznaję szczerze - że jak uczyłem się C - to długo albo dość długo nie rozumiałem struktur, potem nie za bardzo widziałem ich zastosowania a moje próby na siłę ich stosowania (jak dzisiaj patrzę na swoje stare kody) były hmmm jak laurka dziecka z przedszkola ;) .... ale wiesz co ???? ci którzy lepiej się znali wciąż powtarzali mi że to jest WAŻNE, w wielu dobrych kodach programów widziałem struktury .... dlatego choć nieudolnie to dążyłem do ich stosowania ... bo czułem że potem będzie eldorado ;) .... na szczęście nie poddałem się i szybko okazało się że to na prawdę eldorado i raj w C ;) a szczególnie w połączeniu ze wskaźnikami....

Dlatego pokazuję ci na kilka różnych sposobów zalety, w tym właśnie takie jakie są związane z tym zapisem do eeprom, i nawet to, że zapis blokowy zużywa tylko te komórki w których coś się właśnie zmieniło .... nie wspomnę o uporządkowaniu danych ....

te twoje argumenty że "na razie mam tylko dwie zmienne więc w struktury nie ma co się pakować" obaliłbym w 5 minut i to sam byś mówił że to racja i ochoczo z nich korzystał .... ale łatwiej mi to zrobić w 5 min na kursach.... Na forum czy w mailach mogę tylko dawać wskazówki i podpowiadać - bo tak bez tablicy i "face to face" czasem trudno pewne kwestie fajnie, szybko i z precyzją skalpela chirurgicznego wyjaśnić ;) .....

szkoda tylko że niektórzy tak się upierają i nie chcą nawet próbować .... ale z drugiej strony też wiem , że każdy musi mieć swoją drogę - a niektóre osoby szczególnie dłuższą ... na własne poniekąd życzenie - no trudno. A struktury panie - to nie tylko przy eeprom są przydatne .... .... ale nic to

Dlatego ew męcz się ze zmiennymi i zapisuj je na etapie kompilacji jako EEP. I tak dobrze że nie wpadasz na pomysł z bascoma żeby zapisywać je pod bezpośrednie adresy....

------------------------ [ Dodano po: 4 minutach ]

Poza tym to co opisałem to nie jest panie kochany jakiś tam pomysł wymyślony na kolanie na potrzeby tej odpowiedzi tylko wskazuję ci drogę jak to się robi jak się powinno robić ;) .... a ty mi tu tłumaczysz że to da radę też robić bez struktur ;) ...

_________________
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  
PostNapisane: 25 wrz 2012, o 20:05 
Offline
Użytkownik

Dołączył(a): 17 lip 2012
Posty: 105
Pomógł: 0

To że nie korzystam ze struktur jest efektem słabej ich znajomości. W którymś kodzie powyżej jest przerobiony program własnie na struktury tylko wtedy miałem obawy jak sprawdzać zmiany względem EEPROM i w przypadku różnicy dokonać zapisu do EEPROM. Dopiero w tym wątku dowiedziałem się, że takowe sprawdzanie jest wykonywane automatycznie. Na pewno nie będę kombinował jak koń pod górę tylko w kolejnych projektach właśnie będę używał struktur, bo już w znaczącym stopniu uzupełniłem swoje braki.

Jednak nadal nurtuje mnie pytanie dlaczego otrzymywałem losowe wartości w EEPROM mimo włączonego BOD na 4V? Czy używałem struktur czy bezpośrednio umieszczałem zmienne w EEPROM restart sterownika powodował podmianę wartości na inne, ale co ciekawe zawsze takie samie. Były liczby, które były dobrze przechowywane np 60 ale liczba 59 była już zawsze zamieniana na 57. Nie które liczby były zastępowane 0.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 wrz 2012, o 20:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8585
Pomógł: 337

Tego się chyba nigdy nie dowiemy kolego , ale Mirek tak dokładnie wyjaśnił zjawisko że nawet nie mam co dopisać :(

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2012, o 11:21 
Offline
Moderator
Avatar użytkownika

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

Na pewno prawdą nie jest to co napisałeś o katowaniu zapisem wszystkich komórek a nie tylko tej jednej. Widać nie przeczytałeś moich wcześniejszych wypowiedzi.

Ale ok - przypomnę, jeśli masz w eeprom liczbę np 56 i teraz robisz ponowny zapis do tej komórki liczby 56 to wg ciebie "katujesz" zapisem komórkę ??? podpowiem NIE KATUJESZ - dlatego że nie następuje przeprogramowanie żadnego bitu, zatem nie tracisz ani jednego cyklu życia tej komórki, gdybyś zapisywał liczbę 57 to wtedy tak tracisz cykl życia takiej komórki - to jedno.


Druga sprawa - po pierwsze i najważniejsze to to aby zrozumieć że zmienne w eeprom należy trzymać w jednej wielkiej strukturze. Jeśli nagle z jakichś super dziwnych powodów masz tracić czas na zapis jakiegoś bloku danych to jak najbardziej dzięki strukturze i wskaźnikom - co za problem aby zapisać w niej pojedynczy bajt ??? za pomocą eeprom_write_byte() ???? ale nadal będzie to wszystko ładnie w ramach struktury.

A dlatego napisałem że "z jakichś super dziwnych" powodów ponieważ to by oznaczało, wg mnie że źle zaplanowałeś zapis do eeprom. Tzn najczęściej tak będzie. Ale jak mówię w specyficznych przypadkach można zapisać pojedynczy bajt.

Struktura daje ogromne możliwości co do uporządkowania danych ale i samego kodu programu !!!! to jest jeszcze ważniejsze i nie istotne czy masz 2 zmienne czy 68 zmiennych. Gdy mam dwie zmienne w strukturze a nagle chcę to przeorganizować to dodanie lub usunięcie zmiennej z definicji struktury zaoszczędza mi KUPĘ (hmmm wielką kupę czasu) przy reorganizacji kodu .... no ale osoby, które lubią się męczyć i nie ważne że na tak prozaiczne rzeczy jak szybkość tworzenia kodu , działań edytorskich itp - i tak pewnie tego aspektu nigdy nie docenią. tzn mam tu na myśli całkowicie początkujące osoby, które i tak siłą rzeczy jeszcze wszystko muszą bardzo powolutku robić żeby to ogarniać. Gorzej tylko, jeśli zamiast starać się korzystać z podpowiedzi brną na siłę własną ścieżką - bo np .... ot po prostu - powiedzą że nie lubią struktur. Trudno - jak pisałem, to już ich problem że wszystko dłużej będą mieli pod górkę.

_________________
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  
PostNapisane: 26 wrz 2012, o 11:56 
Offline
Moderator
Avatar użytkownika

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

Jak się odwołasz wskaźnikiem do pojedynczego bajtu struktury to kod nie powinien być wcale większy niż gdy będziesz się odwoływał do pojedynczej zmiennej. A poza tym jest taka jedna ważna prawda w C

tu się nie dokonuje optymalizacji co do np pojedynczych taktów zegara (jeśli chodzi o szybkość) albo pojedynczych komórek pamięci programu (Flash) jeśli chodzi o objętość - ponieważ różna wersja kompilatora już nie gwarantuje takiego samego wyniku po kompilacji z uwagi na wbudowane optymalizacje. Tzn można - oczywiście - stosując różne tzw sztuczki - jeśli się zna asembler i wciąż podglądając plik *.lss doprowadzać do takiej optymalizacji - czasem to nawet jest wymagane - wiadomo

ale to nie asembler tylko C

więc nie ma najmniejszego uzasadnienia że jakaś tam funkcja zajmie troszkę więcej czy mniej miejsca tym bardziej jeśli nie jest czasozależna mocno - wtedy najwyżej sięgnąć można

1. albo po większy procek
2. albo po napisanie wstawki asm

_________________
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  
PostNapisane: 26 wrz 2012, o 19:29 
Offline
Użytkownik

Dołączył(a): 23 sty 2012
Posty: 27
Pomógł: 0

pytanie do eepromu ale z innej beczki,

zamierzam w eeprom archiwizować dane ok. 900 Bytów(zapisuję 3 zmienne z czestotliwością np. co 1min.,) w jaki sposób najlepiej dokonać zapisu, zapis przez write_block... nie wchodzi w grę bo w RAM musiałbym zarezerwować również 900B, chyba zostaje tylko zapis do konkretnych komórek eeprom?

zaznaczę, że używam również struktur do zapisu/odczytu (innych)zmiennych z eeprom, czy te 2 sposoby nie będą się "gryzły"?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2012, o 19:35 
Offline
Moderator
Avatar użytkownika

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

A jak może się gryźć to że masz zmienne w strukturze która jest w eeprom i potrzebujesz zapisywać bajt po bajcie ???

można to zrobić na wiele różnych sposobów, np:

1. za pomocą wskaźników
2. za pomocą połączenia z unią i indeksowania wg zmiennej tablicowej

a tak na poważnie - zapis do eeprom co 1 minutę ??? to tak z ciekawości po co ci zapis do eeprom ??? tak często ? zajedziesz go na śmierć. Przecież tu aż się prosi aby zapisów dokonywać sobie co minutę do RAM a do eeprom jakoś raz i zbiorczo zapisać co jakiś dużo dużo dłuższy odcinek czasu.

_________________
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  
PostNapisane: 26 wrz 2012, o 20:30 
Offline
Użytkownik

Dołączył(a): 23 sty 2012
Posty: 27
Pomógł: 0

co minutę zrzucam 3 pomiary temperatury aż zapełni się 900B, czyli za każdym razem zapisuję inne komórki eeprom,
jak wykorzystam 900B przerywam zapis - dane mogę sobie potem sczytać przez RS232 do PC i w dowolnym czasie uaktywnić ponowny zapis do eeprom, całość służy do analizy danych.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2012, o 20:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

@sirk77 , to już o wiele lepiej użyć karty SD do takiej zabawy ......... przez RS232 przeczytasz jak będziesz chciał, a i samą kartę możesz wyjąć i "obrobić" na PC, a przedewszystkim nie zajeździsz jej ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2012, o 20:58 
Offline
Użytkownik

Dołączył(a): 23 sty 2012
Posty: 27
Pomógł: 0

tak wiem ale eeprom mam pod ręką, ma być prosto, nie mam aż tyle danych żeby używać zewnętrznej karty,
zmienne konfiguracyjne w eeprom to ok.100B + zapis temperatur 900B, a używam Atmegi32



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 wrz 2012, o 21:12 
Offline
Moderator
Avatar użytkownika

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

No ok ale m32 ma aż 2kb ram więc czemu nie możesz zapisywać tego do ram i potem wysyłać przez rs232 tak z ciekawości zapytam ?

_________________
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  
PostNapisane: 26 wrz 2012, o 21:19 
Offline
Użytkownik

Dołączył(a): 23 sty 2012
Posty: 27
Pomógł: 0

... ponieważ ta opcja to tylko mała część projektu - obecnie wykorzystuję 780B RAMu, a do danych chcę mieć również dostęp po re-starcie itp...

dyskusja nieco zmierza na inne obszary aniżeli było zapytanie także dziękuję za wskazówki i postaram się znaleźć jakieś rozwiązanie,



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: 68 ]  Przejdź na stronę 1, 2, 3  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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