<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=1480&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-08-29T16:16:29+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1480&amp;mode</id>
<entry>
<author><name><![CDATA[xamrex]]></name></author>
<updated>2012-08-29T16:16:29+01:00</updated>
<published>2012-08-29T16:16:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=14020#p14020</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=14020#p14020"/>
<title type="html"><![CDATA[Re: eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=14020#p14020"><![CDATA[
No tak Mirku, jak zwykle wyjaśnienie dobre, tyle tylko że nie do mojego projektu (dioda RGB)<br /><span style="font-size: 85%; line-height: normal">W sumie też by mogło być, ale po co?</span><br /><br />Na początku sprostujke po co powstał ten temat.<br />Ano z niewiedzy.<br />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<br /><br />Będę potrzebował EEPROMU do tego aby zapamiętać kolor poszczególnych barw.<br />No i myślałem, że jeśli dam  w kodzie:<br /><br /> uint8_t red EERAM;<br /> red=100;<br /><br />TO za każdym uruchomieniem programu zmienna red będzie miała wartość 100.<br />Ale jak widać, to było zle założenie..<br />I na szczęście istnieje te forum, które mi pomogło <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=74">xamrex</a> — 29 sie 2012, o 16:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-08-29T15:25:01+01:00</updated>
<published>2012-08-29T15:25:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=14015#p14015</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=14015#p14015"/>
<title type="html"><![CDATA[Re: eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=14015#p14015"><![CDATA[
<div class="quotetitle">GwynBleidD napisał(a):</div><div class="quotecontent"><br />No i dlatego mirku tak też robię, ale do opisanego zastosowania, czyli licznika jest to jak najbardziej dobra metoda <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> A może być to np licznik energii elektrycznej w którym jakiekolwiek resetowanie jest niewskazane (tym bardziej przez użytkownika, a nie elektrownię).<br /></div><br /><br />Zgadza się <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> jak najbardziej ale wtedy też można zrobić i nawet warto bez wrzucania pliku eep podczas końpilacji do procka.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 sie 2012, o 15:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-08-29T14:42:09+01:00</updated>
<published>2012-08-29T14:42:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=14004#p14004</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=14004#p14004"/>
<title type="html"><![CDATA[Re: eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=14004#p14004"><![CDATA[
<div class="quotetitle">GwynBleidD napisał(a):</div><div class="quotecontent"><br />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ł <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br /><br />No można niby ale ja ZDECYDOWANIE odradzam takie praktyki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />dlaczego ?<br /><br />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 )<br /><br />1. Ty jesteś z Krakowa a ja ze Szczecina<br />2. zbudowałeś dla mnie sterownik<br />3. wpisałeś domyślne wartości do EEPROM sposobem jak opisałeś powyżej<br />...<br />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<br /><br />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<br /><br />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ę)<br /><br />.....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<br /><br />więc lecisz Pan do Szczecina żeby taką głupotkę zrobić i tracisz KUPĘ kasy<br /><br />.... dlatego na drugi raz, po takim przypadku - sam już NIGDY nie skorzystasz ze sposobu opisanego przez siebie, tylko:<br /><br />1. dodasz do urządzenia KLAWISZ o nazwie RESET jak to bywa w Routerach <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i w razie takiego przypadku powiesz klientowi Neptykowi czyli mi - <br /><br />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ść <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />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<br /><br />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 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />zgadza się ? - chyba lepiej taki przypadek przeżyć virtualnie tak jak w tym poście a później już robić jak się należy<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 sie 2012, o 14:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2012-08-29T11:48:31+01:00</updated>
<published>2012-08-29T11:48:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=13978#p13978</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=13978#p13978"/>
<title type="html"><![CDATA[Re: eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=13978#p13978"><![CDATA[
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.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 29 sie 2012, o 11:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xamrex]]></name></author>
<updated>2012-08-29T08:12:54+01:00</updated>
<published>2012-08-29T08:12:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=13957#p13957</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=13957#p13957"/>
<title type="html"><![CDATA[Re: eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=13957#p13957"><![CDATA[
Aaaa.<br />To w taki sposób to się robi..<br /><br />Dzięki za fajny przykład.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=74">xamrex</a> — 29 sie 2012, o 08:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-08-29T08:08:27+01:00</updated>
<published>2012-08-29T08:08:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=13956#p13956</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=13956#p13956"/>
<title type="html"><![CDATA[Re: eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=13956#p13956"><![CDATA[
nadal nie rozumiem problemu który sobie wymyśliłeś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />ale spróbuję coś podpowiedzieć a nóż się uda <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> 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 ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> 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<br /><br />być może chodzi ci o domyślną inicjalizację zmiennych w pamięci EEPROM ??? jeśli tak to co za problem ???<br /><br />Normalnie jak eeprom jest pusty to wszystkie komórki mają wartość 0xFF, i o tym trzeba pamiętać, że nie żadne tam 0x00<br /><br />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:<br /><br />[syntax=c]typedef {<br />  uint8_t zmienna1;<br />  uint8_t zmienna2;<br />} TDANE;[/syntax]<br /><br />potem w kodzie<br /><br />[syntax=c]TDANE flash_dane PROGMEM = { 100, 200 }; // tu inicjalizujemy domyślne wartości we flash<br />TDANE eeprom_dane EEMEM;<br />TDANE ram_dane;[/syntax]<br /><br />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ś<br /><br />i teraz przy starcie programu wczytuję sobie dane z eeprom do ram na chwilę<br /><br />[syntax=c]eeprom_read_block( &amp;ram_dane, &amp;eeprom_dane, sizeof(TDANE) );[/syntax]<br /><br />sprawdzam czy np moja zmienna1 jest = 0xff albo mniejsza od 100<br /><br />[syntax=c]if( ram_dane.zmienna1 &lt; 100 || ram_dane.zmienna1 == 0xFF ) {<br />  ram_dane.zmienna1 = pgm_read_byte( &amp;flash_dane.zmienna1 );<br />  eeprom_write_block( &amp;eeprom_dane, &amp;ram_dane, sizeof(TDANE) );<br />}[/syntax]<br /><br />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.<br /><br />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<br /><br />[syntax=c]ram_dane.zmienna++; // inkrementuję zmienną<br />eeprom_write_block( &amp;eeprom_dane, &amp;ram_dane, sizeof(TDANE) ); // i zapisuję ją od razu do eeprom[/syntax]<br /><br />(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ź<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 sie 2012, o 08:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xamrex]]></name></author>
<updated>2012-08-29T07:48:02+01:00</updated>
<published>2012-08-29T07:48:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=13955#p13955</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=13955#p13955"/>
<title type="html"><![CDATA[eeprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1480&amp;p=13955#p13955"><![CDATA[
Witam,<br />Mam takie małe pytanko.<br />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ł..<br /><br />Pewnie nikt nie zrozumiał o co chodzi dlatego dam przykład..<br /><br />Załóżmy, że po naciśnięciu przycisku ma się inkrementować zmienna <strong>ilość</strong> zapisana w EEPROM.<br />Tylko, że inkrementacja ma się zaczynać od 100.<br />/////////////////////<br />Jak ja to zawsze robiłem.<br />1.Najpierw pisałem program tak:<br />[syntax=c]uint8_t zmienna EERAM; <br />zmienna=100;[/syntax]<br /><br />2.Wysyłałem do uC.<br />3. Potem kasowałem linijkę:<br />[syntax=c]zmienna=100;[/syntax]<br />I jeszcze raz wysyłałem do uC.<br /><br />Czy tak się powinno robić, czy istnieje inny sposób?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=74">xamrex</a> — 29 sie 2012, o 07:48</p><hr />
]]></content>
</entry>
</feed>