<?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=6458&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-03-23T11:14:35+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6458&amp;mode</id>
<entry>
<author><name><![CDATA[JABLKO]]></name></author>
<updated>2014-03-23T11:14:35+01:00</updated>
<published>2014-03-23T11:14:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75395#p75395</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75395#p75395"/>
<title type="html"><![CDATA[Re: Obsluga EEPROM ATMEGA328 eeprom_read/write_block Problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75395#p75395"><![CDATA[
Z checia zajrze w przyszlosci. Az tak utkwily mi w pamieci sprezynki z ADC i Joda <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Wprowadzenie elementu basniowego do zmudnych linii kodu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3629">JABLKO</a> — 23 mar 2014, o 11:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-03-23T10:40:41+01:00</updated>
<published>2014-03-23T10:40:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75389#p75389</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75389#p75389"/>
<title type="html"><![CDATA[Re: Obsluga EEPROM ATMEGA328 eeprom_read/write_block Problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75389#p75389"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />gdzie jest blad w takim zapisie? bo nadal nie rozumiem<br /></div><br /><br />Nigdzie nie ma błędu w takim zapisie bo o to właśnie chodzi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />ja odniosłem się do tego - co wynikało z opisu - że piszesz np większy projekt i wszystko w przerwania wsadzasz.<br /><br />Jeśli to jest jakiś mały projekcik - gdzie poza czymś takim albo i nawet ciut większym - nawet obsługa jakiegoś pilota (jak przedstawiłem to w Bluebooku) to czemu nie ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... wtedy rzeczywiście pętla główna służy tylko jako narkoza <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Ale już nieco większe projekty - to właśnie wykorzystanie takich mechanizmów - prostych w sumie i warto się z tym zapoznać - jak w Bluebooku w rozdziale<br /><br />&quot;Wstęp do systemów czasu rzeczywistego&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 23 mar 2014, o 10:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JABLKO]]></name></author>
<updated>2014-03-23T10:36:19+01:00</updated>
<published>2014-03-23T10:36:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75387#p75387</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75387#p75387"/>
<title type="html"><![CDATA[Re: Obsluga EEPROM ATMEGA328 eeprom_read/write_block Problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75387#p75387"><![CDATA[
To ze cli i sei jest z automatu to sprawa jawna. jednak wylaczanie poszczegolnych przerwan z rejestrow np. TIMSK w ISR juz nie. Ja z tego korzystam i jeszcze nie zauwazylem z tego powodu problemow. Wszystko wykonuje sie jak w zegarku, a robie to bo wkurza mnie tworzenie ciagle jakis zmiennych 8-bitowych na flage, z kolei zakladanie masek na poszczegolne bity to kolejne linijki tekstu (reka boli) . Inaczej sprawa by wygladala jak bym nadawal flagi w przerwaniach do whila tutaj juz nie masz pewnosci ze cos sie wykona dokladnie o czasie. Co do odswiezania LCD to sie zgodze ze to troche naciagane jest wsadzanie tego do ISR.  Zdaje sobie sprawe, ze brakuje mi sporo wiedzy o przerwaniach i budowaniu zaleznosci czasowych, jednak do niektorych rzeczy mozna dojsc metoda prob i bledow. Wiele ludzi nawet do petli while(1) nie zaglada, ewentualnie usypia w niej proca. A przerwania sa po to aby z nich korzystac wedle zyczenia.<br />Przykladowo<br /><br />ISR(PCINT0_vect)     //pinchange interrupt<br />{<br />y=1;<br />PCMSK0 &amp;= ~(1&lt;&lt;PCINT6); // INTERRUPT ON PIN PCINT6 DISABLE<br />}<br />zero problemow. raz sie interuptek zrobi i przez nastepne 60 sekund przykladowo spokoj<br />gdzie jest blad w takim zapisie? bo nadal nie rozumiem <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3629">JABLKO</a> — 23 mar 2014, o 10:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-03-23T05:48:19+01:00</updated>
<published>2014-03-23T05:48:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75381#p75381</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75381#p75381"/>
<title type="html"><![CDATA[Re: Obsluga EEPROM ATMEGA328 eeprom_read/write_block Problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75381#p75381"><![CDATA[
... ale tu nie chodzi o to co ktos madry powiedzial ... albo czy dawanie cli w przerwaniu ma sens czy nie. To nie jest kwestia jakiejs tam interpretacji ... czy przyjmowanie czegos na zasadzie wiary <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .... bierzemy pdf procka w reke a tam jak byk jest napisane ze po wejsciu w przerwanie procek SAM automatycznie blokuje przerwania natomiast przy wyjsciu je odblokowuje i to po rozkazie RETI.  A to co kolega pisze w przerwaniu czyli cli o tyle nie jest szkodliwe ze nic nie zmienia a tylko tracimy niepotrzebnie takt zegara .... no to juz to sei na koncu jest hmmmm .... bardzo zlym pomysle gdyz wykonywane jest jeszcze przed prologiem przerwania ... przez co moze byc niezbyt bezpieczne w wielu sytuacjach.<br /><br />No a to co kolega napisal .... ze w przerwaniach robi np wyswietlanie na lcd czy tez operacje delay ... i ze petla glowna while czasem sie nigdy nie wykona ....hmmmm no to juz jest straszne <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .... i naprawde warto sobie jeszcze mocno i sporo poczytac nie tylko o tym jak korzysta sie z przerwan bo taki sposob to hmmm troche wypaczenie ich istnienia w 99 % przypadkow .... to do tego warto jescze czytac o wielu innych technikach programowania w c. <br /><br />bron boze nie pisze tego zlosliwie tylko przy okazji zwracam uwage na pewne aspekty i bledy w podejsciu do niektorych zagadnien .... no chyba ze cos zle zrozumialem ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 23 mar 2014, o 05:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JABLKO]]></name></author>
<updated>2014-03-23T02:21:22+01:00</updated>
<published>2014-03-23T02:21:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75377#p75377</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75377#p75377"/>
<title type="html"><![CDATA[Re: Obsluga EEPROM ATMEGA328 eeprom_read/write_block Problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75377#p75377"><![CDATA[
Ktos kiedys madry napisal, ze nie ma sensu ustawiania cli() oraz sei() w przerwaniu i z tym sie zgodze. <br />Ktos inny jeszcze, ze kazde przerwanie ktore sie rozpoczelo dopoki sie nie skonczy nie zacznie robic nic innego, no i tutaj sie nie zgodze, bo majac w ISR(TIMER0_ovf) refresh od LCD (co ok pol sekundy) , a jednoczesnie majac w ISR(timer2_ovf) komunikat, który uzywa _delay_ms(); jest przerywany mimo to. Z drugiej strony zabawa z flagami... ok, ale trace precyzje wykonywania programu. Majac dosyc obszerny program nalezy liczyc sie z tym ze czesc rzeczy z while(1) wogole sie nie wykona.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3629">JABLKO</a> — 23 mar 2014, o 02:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-03-23T01:39:21+01:00</updated>
<published>2014-03-23T01:39:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75375#p75375</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75375#p75375"/>
<title type="html"><![CDATA[Re: Obsluga EEPROM ATMEGA328 eeprom_read/write_block Problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75375#p75375"><![CDATA[
dobrze ze znalazles błąd ale w tym swoim isr ... tak nawiasem mowiac kolejnego babolka robisz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 23 mar 2014, o 01:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JABLKO]]></name></author>
<updated>2014-03-23T01:09:45+01:00</updated>
<published>2014-03-23T01:09:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75374#p75374</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75374#p75374"/>
<title type="html"><![CDATA[Obsluga EEPROM ATMEGA328 eeprom_read/write_block Problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6458&amp;p=75374#p75374"><![CDATA[
Hej, bardzo mi się podoba twórczość mirka36, jak do tej pory wiekszość jego porad działała bez zarzutu, do czasu gdy natknąłem się na eeprom. <br />Korzystam z atmel studio 6.1 (kwestia przyzwyczajenia). Problem dotyczy zapisu/odczytu bloku zmiennych. Mam wrażenie, że zmienne te albo zapisują się pod niewłaściwym adresem, albo coś przerywa zapis/odczyt, albo robie to błędnie, albo to przez dużą ilość zmiennych w strukturze typu float sprawia problem, albo sam nie wiem w czym rzecz i gdzie dalej szukać.<br />Założenia są takie, że podczas pierwszego uruchomienia programu ma przyjąć wartości domyślne.  W trakcie działania programu te wartości będą zmieniane, później kopia RAM-&gt;EEPROM,<br />Przy starcie najlepiej jakby automatycznie wykrywał czy nastąpiła zmiana względem domyślnych wartości, jednak aby ułatwić debugging - póki co zrobilem sobie na buttonsach, probowalem również z Mirkowskim check_and_load_defaults, jednak za kazdym razem wczytywal ustawienia domyslne (funkcja otrzymuje same 0xFF??? to by wskazywało, że zapis szwankuje).<br /><br />Z eepromem bawię się pierwszy raz, jednak znając działanie większości istotnych funkcji służącym przerzutu z jednej pamięci do drugiej nadal nie jestem w stanie sobie z tym poradzić.<br /><br />oto fragmenty programu z którymi walczę od pół dnia, jeśli nie więcej <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />((  wrzucam to co jest odpowiedzialne za zapisy, odczyty ponieważ nie chce zaśmiecać :<br /><br />[syntax=c]#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/pgmspace.h&gt; // niezbedne biblioteki dolaczylem<br /><br />typedef struct {<br />float VERSION;<br />float G_0;<br />float G_100;<br />float P1_z;<br />float P1_w;<br />float P2_z;<br />float P2_w;<br />float IA_cal; // same floaty zwiększają mi czytelność programu, brak konieczności oddzielania czesci calkowitej i ulamkowej<br />float IF_cal;<br />float UA_cal;<br />float UW_cal;<br />float UF_cal;<br />uint32_t EW;<br />uint32_t EF;<br />float AHW;<br />float AHF;<br />float G_MIN;<br />float IMAX;<br />} CONFIG;<br /><br />const CONFIG CONFIG_PGM PROGMEM = { //dane domyślne w pamięci FLASH<br />1.0,//VERSION     <br />56.0, //G_0<br />58.0,//G_100                  - oszczędzam palce, nie bede definiował oddzielnie<br />52.0,//P1_z<br />48.0,//P1_w<br />52.0,//P2_z<br />48.0,//P2_w<br />0.1000,//IA_cal<br />0.1000,//IF_cal<br />0.0600,//UA_cal<br />0.0600,//UW_cal<br />0.0600,//UF_cal<br />0.00,   //EW<br />0.00,  //EF<br />0,//AHW<br />0,//AHF<br />48.0,   //G_MIN<br />100.0};//IMAX<br /><br />CONFIG CONFIG_EEMEM EEMEM;       // dane w pamięci EEPROM<br />CONFIG CONFIG_RAM;          // dane w pamięci RAM<br /><br />main()<br />{<br /><br />   while(PLUS_GND &amp;&amp; MINUS_GND)  // PLUS GND lub MINUS GND to nic innego jak przycisk nie-wcisniety <br />  {<br />// nic nie rob czekaj na przycisk<br />  }<br />   if(PLUS_VCC)  // wcisniesz &quot;plus&quot; dostajesz dane z poprzedniego zapisu do eemem<br />  {<br />eeprom_read_block (&amp;CONFIG_RAM, &amp;CONFIG_EEMEM, sizeof(CONFIG_RAM) ); // KOPIA EEPROM -&gt; RAM  <br />  }<br />   if(MINUS_VCC)  // wcisniesz &quot;minus&quot; dostajesz dane domyslne z flash (tutaj działa wszystko prawidłowo)<br />  {<br />memcpy_P( &amp;CONFIG_RAM, &amp;CONFIG_PGM, sizeof(CONFIG_RAM) );              // KOPIA PGM -&gt; RAM<br />  }<br /><br />//----------------------------------- TUTAJ FUNKCJA ODPOWIEDZIALNA ZA ZAPIS DO EEPROM -----------------------------------------------<br /><br />void USTAWIENIA_INOUT() // wejdz/wyjdz   - wychodząc z ustawień tworzy zapis do EEMEM<br />{<br />TIMSK0 &amp;= ~(1&lt;&lt;TOIE0); // na czas 2 - sekundowego komunikatu wylaczam timer0 overflow, w ktorym trzymam ekran-refresh<br /><br />UST=!UST; // wejscie lub wyjscie do/z ustawien<br />LCD_Clear();<br />if(UST==1) // jesli wchodzisz nic nie zapisuj tylko zakomunikuj ze wchodzisz.<br /><br />{LCD_GoTo(6,0); LCD_WriteText(&quot;MENU&quot;);<br />LCD_GoTo(3,1); LCD_WriteText(&quot;USTAWIENIA&quot;);}<br /><br />else   // wychodze z menu ustawien (UST==0) wiec pozapisuj co trzeba<br />{<br />TIMSK1 &amp;= ~(1&lt;&lt;TOIE1);<br />TIMSK2 &amp;= ~(1&lt;&lt;TOIE2); // na wszelki wypadek wylaczam pozostale przerwania od timerow.<br /><br />eeprom_write_block (&amp;CONFIG_EEMEM, &amp;CONFIG_RAM, sizeof(CONFIG_EEMEM) ); // KOPIA RAM -&gt; EEPROM<br /><br />TIMSK1 |= (1&lt;&lt;TOIE1);<br />TIMSK2 |= (1&lt;&lt;TOIE2);<br />LCD_GoTo(4,0); LCD_WriteText(&quot;ZAPISANO&quot;);<br />LCD_GoTo(3,1); LCD_WriteText(&quot;USTAWIENIA&quot;);<br /><br />}<br />_delay_ms(1000);<br />TIMSK0 |= (1&lt;&lt;TOIE0);<br />}[/syntax]<br /><br />Rezultat jest taki, że gdy wybiore &quot;z palca&quot; wczytaj eeprom -&gt; ram, jako wynik dtostrf(jakis parametr z CONFIG_RAM) dostaje  &quot;NAN&quot; - prawdopodobnie &quot;not a number&quot; (reakcja na 0xFF???)<br />Stąd też albo zapis szwankuje albo odczyt, albo po prostu nie nadaje sie do tego i powinienem olać sprawe ;D.<br />Gdy wgram pliczek EEPROM wygenerowany przez kompilator i zrobie wczytywanie eeprom przy starcie otrzymuję wszędzie zera. (A to raczej prawidłowo bo deklaruję<br /> CONFIG CONFIG_EEMEM EEMEM; bez żadnych wartości) .<br />samo void USTAWIENIA_INOUT() znajduje się w przerwaniu od timera. Do tej pory nie odnotowalem problemow z czyms takim:<br />ISR()<br />{<br />disable ISR;<br />rob cos.<br />enable ISR;<br />}<br />Jeszcze pomyslalem o czyms takim jak ATOMIC_BLOCK (podobno nie dopuszcza do przerwania jakiejs procedury,  ale to moze tylko pogloski <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />)<br />Prosze serdecznie o pomoc, dziekuje.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 14 minutach ]</span></strong><br /><br />ALE ZE MNIE DUPKA WOLOWA <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> pomylilem argumenty  w:<br /><br />eeprom_write_block (&amp;CONFIG_EEMEM, &amp;CONFIG_RAM, sizeof(CONFIG_EEMEM) );<br />powinno byc:<br />eeprom_write_block (&amp;CONFIG_RAM, &amp;CONFIG_EEMEM, sizeof(CONFIG_RAM) );<br /><br />Temat do skasowania, albo mozecie zostawic i sie ze mnie smiac i obrzucac jablkami <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />Albo zostawic jako przestroga - dopiero po napisaniu postu i przeczytaniu jeszcze raz uswiadomilem sobie ta pomylke.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3629">JABLKO</a> — 23 mar 2014, o 01:09</p><hr />
]]></content>
</entry>
</feed>