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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-06-12T07:13:42+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=22319&amp;mode</id>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2019-06-12T07:13:42+01:00</updated>
<published>2019-06-12T07:13:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219631#p219631</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219631#p219631"/>
<title type="html"><![CDATA[Re: EEPROM coś nie wyszło]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219631#p219631"><![CDATA[
Funkcja load_defaults(); służy do załadowania ustawień &quot;fabrycznych&quot;, czyli tych, które zdeklarowałeś tutaj w pamięci FLASH:<br /><br />[syntax=c]#define LED_1_stan 1<br />#define LED_2_stan 0<br />#define LED_3_stan 1<br />#define LED_4_stan 0<br /><br />const LED_STAN pgm_led_stan __attribute__((__progmem__)) = {<br />        LED_1_stan,<br />        LED_2_stan,<br />        LED_3_stan,<br />        LED_4_stan,<br />};[/syntax]<br /><br />Funkcja ta kopiuje ustawienia z pamięci flash do ram i eeprom.<br /><br /><div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />a zapis funkcji void check_and_load_defaults( void ) sprawdza czy w eeprom jest coś zapisane, czy tak.<br /></div><br /><br />Tak, funkcja sprawdza czy w pamięci EEPROM jest coś zapisane, jeśli tak do załaduje ustawienia z EEPROM, a jeśli nic nie ma w eepromie to załaduje ustawienia z pamięci flash jak wyżej.<br /><br /><div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />Moim celem było zapisanie w eeprom<br /></div><br /><br />Czyli jak zmieniasz stan diody po wciśnięciu przycisku to chcesz zapisać ten stan w pamięci eeprom, żeby po restarcie były zapamiętane ostatnio świecące diody? Bo jeśli tak to spróbuj coś w tym stylu (nie mam na szybko pomysłu jak to zapisać z led_tog dlatego na tym przykładzie):<br /><br />[syntax=c]if( klawisz_wcisniety( KEY1_PIN ) ) {<br />     if( LED_1_ON ) {     // jeśli dioda świeci to<br />          LED_1_OFF;       // zgaś diodę<br />          led_stan.led_1_stan = 0;    // ustaw zmienną w ram na 0<br />     } else {                  // jeśli dioda zgaszona to<br />          LED_1_ON;        // zaświeć diodę<br />          led_stan.led_1_stan = 1;    // ustaw zmienną w ram na 1<br />     }<br />     copy_ram_to_eem();    // zapisz z ram do eeprom<br />}[/syntax]<br /><br />Jak zapiszesz sobie do eeprom w ten sposób stan diod to po restarcie przed pętlą main sprawdzisz czy coś masz w eeprom i załadujesz te ustawienia check_and_load_defaults(); i wysterujesz ledy - możesz to zrobić jak w moim pierwszym poście tutaj. Dodatkowo możesz zrobić ustawienia &quot;fabryczne&quot; na przycisku nr 5 jak w swoim przykładzie chciałeś load_defaults(); i wysterować ledy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 12 cze 2019, o 07:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2019-06-11T23:05:35+01:00</updated>
<published>2019-06-11T23:05:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219629#p219629</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219629#p219629"/>
<title type="html"><![CDATA[Re: EEPROM coś nie wyszło]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219629#p219629"><![CDATA[
zadałeś kolejne ważne pytanie, widać znów coś źle zrozumiałem z lekcji Mirka myslałem że zapis funkcji void load_defaults( void ) dotyczy zapisu do eeprom ,czy tak <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /> <br /><br />a zapis funkcji void check_and_load_defaults( void ) sprawdza czy w eeprom jest coś zapisane, czy tak. <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /> <br /><br /><div class="quotetitle">Tom92 napisał(a):</div><div class="quotecontent"><br />To chcesz załadować na starcie dane z pamięci flash czy eeprom?<br /></div><br />Moim celem było zapisanie w eeprom dlatego po twoim pytaniu uświadomiłem sobie <img src="https://forum.atnel.pl/images/smilies/icon_e_surprised.gif" alt=":o" title="Zdziwiony" />  że znowu coś pomieszałem.<br />Poz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 11 cze 2019, o 23:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2019-06-11T00:00:33+01:00</updated>
<published>2019-06-11T00:00:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219607#p219607</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219607#p219607"/>
<title type="html"><![CDATA[Re: EEPROM coś nie wyszło]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219607#p219607"><![CDATA[
<div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />ale chciałbym jeszcze żeby przy restarcie też się wgrały ustawienia z eeprom sugestie mile widziane <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br /><br />To chcesz załadować na starcie dane z pamięci flash czy eeprom? Jak z flash to przed petla while() dodaj funkcje load_defaults() a następnie mozesz wyrzucic to na piny tak jak wyzej napisalem. <br /><br />A jak z eeprom to np zapisuj sobie stan diody do eeprom po wcisnieciu przycisku i po restarcie wczytaj dane z eeprom podobnie jak znowu wyzej pisalem tylko już funkcją check_and_load_defaults().<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 11 cze 2019, o 00:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2019-06-10T23:16:38+01:00</updated>
<published>2019-06-10T23:16:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219606#p219606</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219606#p219606"/>
<title type="html"><![CDATA[Re: EEPROM coś nie wyszło]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219606#p219606"><![CDATA[
xentis nie twierdze że tak się nie dzieje tylko nie umiałem nie rozumiałem <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" />  jak to wydostać z eepromu twoja uwaga co do funkcji jest słuszna dopiero wtedy uswiadomiłem sobie gdzie tkwił błąd w moim myśleniu po pierwsze ubzdurało mi się że #define LED_1_stan 1 - wgrane do eeprom = z oświecenie led LED_1_ON a po drugie to ma załatwić reszte sprawy<br />[syntax=c]const LED_STAN pgm_led_stan __attribute__((__progmem__)) = {<br />LED_1_stan, // 1<br />LED_2_stan, // 0<br />LED_3_stan, // 1<br />LED_4_stan, // 0<br />};[/syntax]<br />przegladajac kod Mirka natrafiłem na to <br />[syntax=c]if( !key_lock &amp;&amp; !(PINC &amp; KEY1 ) ) {<br />key_lock=1;<br /><br />// reakcja na PRESS (wciśnięcie przycisku)<br />LCDLED_TOG;<br /><br />} else if( key_lock &amp;&amp; (PINC &amp; KEY1 ) ) key_lock=0;[/syntax]<br />i wszystko stało się jasne same LED_1_stan 1 nie oznacza oświecenia się Led ,<br />[syntax=c]while(1)<br />{<br />    if( klawisz_wcisniety( KEY1_PIN ) ) LED_1_TOG ;<br />    if( klawisz_wcisniety( KEY2_PIN ) ) LED_2_TOG;<br />    if( klawisz_wcisniety( KEY3_PIN ) ) LED_3_TOG;<br />    if( klawisz_wcisniety( KEY4_PIN ) ) LED_4_TOG;<br /><br />    check_and_load_defaults();<br /><br />    if( klawisz_wcisniety( KEY5_PIN ) )<br />    {<br />     load_defaults();<br />     if( led_stan.led_1_stan ) LED_1_ON;<br />                       else LED_1_OFF;<br />     if( led_stan.led_2_stan ) LED_2_ON;<br />           else LED_2_OFF;<br />     if( led_stan.led_3_stan ) LED_3_ON;<br />           else LED_3_OFF;<br />     if( led_stan.led_4_stan ) LED_4_ON;<br />           else LED_4_OFF;<br />    }<br /><br />}  // koniec while<br />} // koniec main()[/syntax]<br /> teraz wszystko działa poprawnie ale chciałbym jeszcze żeby przy restarcie też się wgrały ustawienia z eeprom sugestie mile widziane <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Poz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 10 cze 2019, o 23:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2019-06-10T20:42:12+01:00</updated>
<published>2019-06-10T20:42:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219603#p219603</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219603#p219603"/>
<title type="html"><![CDATA[Re: EEPROM coś nie wyszło]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219603#p219603"><![CDATA[
Musisz zrobić to co Ci mówi <strong>xentis</strong> czyli to co skopiowałeś z pamięci flash do ram to po tej czynności wyrzuć to na piny. Coś typu:<br />[syntax=c]// odczyt wartości z pamięci ram<br />        if( led_stan.led_1_stan ) LED_ON;<br />                else LED_OFF;[/syntax]<br /><br />I tak z każdą diodą.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 10 cze 2019, o 20:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2019-06-10T20:20:34+01:00</updated>
<published>2019-06-10T20:20:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219602#p219602</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219602#p219602"/>
<title type="html"><![CDATA[Re: EEPROM coś nie wyszło]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219602#p219602"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />po naciśnięciu KEY5 program powinien skopiować dane z pamięci eeprom do ram i załadować inf. domyślne które znajdują się w eeprom<br /></div> Ale na jakiej podstawie twierdzisz że tak się nie dzieje? W kodzie nie ma żadnej funkcji która by zmieniała stan diod świecących zgodnie z ustawieniami w strukturze w ramie więc nie rozumiem na jakiej podstawie wyciągasz wnioski że kopiowanie danych z eeprom do ram nie działa?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 10 cze 2019, o 20:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2019-06-10T20:10:24+01:00</updated>
<published>2019-06-10T20:10:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219601#p219601</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219601#p219601"/>
<title type="html"><![CDATA[Re: EEPROM coś nie wyszło]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219601#p219601"><![CDATA[
właśnie w tym problem, czyli po naciśnięciu KEY5 program powinien skopiować dane z pamięci eeprom do ram i załadować inf. domyślne które znajdują się w eeprom<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 10 cze 2019, o 20:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2019-06-10T18:05:17+01:00</updated>
<published>2019-06-10T18:05:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219600#p219600</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219600#p219600"/>
<title type="html"><![CDATA[Re: EEPROM coś nie wyszło]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219600#p219600"><![CDATA[
No wszystko ładnie i pięknie, ale skąd wiesz że nie działa? Przecież nigdzie w kodzie nie &quot;wyrzucasz&quot; zawartości struktur na piny sterujące diodami!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 10 cze 2019, o 18:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2019-06-09T19:02:37+01:00</updated>
<published>2019-06-09T19:02:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219585#p219585</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219585#p219585"/>
<title type="html"><![CDATA[EEPROM coś nie wyszło]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22319&amp;p=219585#p219585"><![CDATA[
Proszę o pomoc coś nie wyszło jak w tytule, krótki program w ramach nauki pięć przycisków z tego cztery do obsługi led zmieniają stan świecenia diody a piąty ma wgrać stan led z eeprom czyli takzwane ustawienia fabryczne.Problem polega na tym że po wciśnięciu przycisku KEY5_PIN nie wgrywają się ustawienia eeprom.<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/sleep.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br /><br />// *************   definicje dla preprocesora<br />// dioda LED<br />#define LED_1 (1&lt;&lt;PC7)// definicja pinu do którego podłączona jest dioda<br />#define LED_2 (1&lt;&lt;PC6)// definicja pinu do którego podłączona jest dioda<br />#define LED_3 (1&lt;&lt;PC5)// definicja pinu do którego podłączona jest dioda<br />#define LED_4 (1&lt;&lt;PC4)// definicja pinu do którego podłączona jest dioda<br />#define LED_8 (1&lt;&lt;PC0)// definicja pinu do którego podłączona jest dioda<br /><br />#define LED_1_TOG PORTC ^= LED_1// makrodefinicja – zmiana stanu diody<br />#define LED_2_TOG PORTC ^= LED_2// makrodefinicja – zmiana stanu diody<br />#define LED_3_TOG PORTC ^= LED_3// makrodefinicja – zmiana stanu diody<br />#define LED_4_TOG PORTC ^= LED_4// makrodefinicja – zmiana stanu diody<br /><br />#define LED_8_ON PORTC &amp;= ~LED_8// makrodefinicja – zmiana stanu diody<br />#define LED_8_OFF PORTC |= LED_8// makrodefinicja – zmiana stanu diody<br />#define LED_8_TOG PORTC ^= LED_8// makrodefinicja – zmiana stanu diody<br /><br /><br />// klawisz K1<br />#define KEY1_PIN (1&lt;&lt;PD0)<br />#define KEY2_PIN (1&lt;&lt;PD1)<br />#define KEY3_PIN (1&lt;&lt;PD2)<br />#define KEY4_PIN (1&lt;&lt;PD3)<br />#define KEY5_PIN (1&lt;&lt;PD4)<br /><br />#define KEY1_DOWN !( PIND &amp; KEY1_PIN )<br /><br />// deklaracje funkcji<br />uint8_t klawisz_wcisniety(uint8_t klawisz);<br />void copy_eem_to_ram(void);<br />void copy_ram_to_eem(void);<br />void copy_pgm_to_ram(void);<br />void load_defaults( void );<br />void check_and_load_defaults( void );<br /><br />#define LED_1_stan 1<br />#define LED_2_stan 0<br />#define LED_3_stan 1<br />#define LED_4_stan 0<br /><br />typedef struct led_stan{<br />        uint8_t led_1_stan;<br />        uint8_t led_2_stan;<br />        uint8_t led_3_stan;<br />        uint8_t led_4_stan;<br />} LED_STAN;<br /><br /><br />const LED_STAN pgm_led_stan __attribute__((__progmem__)) = {<br />LED_1_stan,<br />LED_2_stan,<br />LED_3_stan,<br />LED_4_stan,<br />};<br /><br /><br />const LED_STAN pgm_led_stan PROGMEM;     // Flash<br /> LED_STAN eled_stan EEMEM;                 // Eeprom<br /> LED_STAN led_stan ;                        // Ram<br /><br />uint8_t key_lock;<br /><br /><br />//************************************************************<br />int main(void){<br /><br />// ****** inicjalizacja *********<br />DDRC  |= LED_1 | LED_2 | LED_3 | LED_4 | LED_8;// kierunek pinu PC7 – wyjściowy<br />PORTC |= LED_1 | LED_2 | LED_3 | LED_4 | LED_8;// wyłączenie diody LED<br /><br />DDRD &amp;= ~(KEY1_PIN | KEY2_PIN | KEY3_PIN | KEY4_PIN | KEY5_PIN);// kierunek pinu wejściowy<br />PORTD |= KEY1_PIN | KEY2_PIN | KEY3_PIN | KEY4_PIN | KEY5_PIN; // podciągnięcie  do VCC<br /><br /><br /><br /><br />// ****** pętla główna programu  *********<br />while(1)<br />{<br />    if( klawisz_wcisniety( KEY1_PIN ) ) LED_1_TOG ;<br />    if( klawisz_wcisniety( KEY2_PIN ) ) LED_2_TOG;<br />    if( klawisz_wcisniety( KEY3_PIN ) ) LED_3_TOG;<br />    if( klawisz_wcisniety( KEY4_PIN ) ) LED_4_TOG;<br />    if( klawisz_wcisniety( KEY5_PIN ) )<br />    {<br />    void check_and_load_defaults( void );<br />    void load_defaults( void );<br />    }<br />}  // koniec while<br />} // koniec main()<br /><br />//  --------------- definicja funkcji --------------------------<br /> <br />uint8_t klawisz_wcisniety(uint8_t klawisz)<br />{<br />if(!(PIND &amp; klawisz) )         // klawisz wciśnięty ?<br />{<br />_delay_ms(120);     // czas drgań styków<br />if(!(PIND &amp; klawisz) ) return 1; //   zakończ funkcję - rezultat = 1<br />}<br /><br />return 0;// jeśli nie wciśnięty klawisz, zakończ funkcję, rezultat = 0<br />}<br />  //------------------------------------------<br /><br />void copy_eem_to_ram(void)  //// Funkcja kopiuj EEPROM do RAM<br />{<br />        eeprom_read_block(&amp;led_stan, &amp;eled_stan, sizeof(led_stan));<br />}<br /><br />void copy_ram_to_eem(void)  // Funkcja kopiuj RAM do EEPROM<br />{<br />        eeprom_write_block(&amp;led_stan, &amp;eled_stan, sizeof(led_stan));<br />}<br /><br />void copy_pgm_to_ram(void)  // Funkcja kopiuj flasch do RAM<br />{<br />        memcpy_P(&amp;led_stan, &amp;pgm_led_stan, sizeof(led_stan));<br />}<br /><br />void load_defaults( void ) {  // załadowanie info. domyślnych<br />copy_pgm_to_ram();<br />copy_ram_to_eem();<br />}<br /><br />void check_and_load_defaults( void ) {      //sprawdzenie pamieci EEPROM czy jest pusta<br />uint8_t i, len = sizeof( led_stan );     //sizeof(typ) operator pobrania |<br />uint8_t * ram_wsk = (uint8_t*)&amp;led_stan; //zwraca rozmiar typu w bajtach |<br /><br />copy_eem_to_ram();<br />for(i=0; i&lt;len; i++) {<br />if( 0xff == *ram_wsk++ ) continue;<br />break;<br />}<br />if( i == len ) {<br />load_defaults();<br />}<br />}[/syntax]<br />Poz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 9 cze 2019, o 19:02</p><hr />
]]></content>
</entry>
</feed>