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.