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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-01-18T14:05:51+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=22798&amp;mode</id>
<entry>
<author><name><![CDATA[tonygryps]]></name></author>
<updated>2020-01-18T14:05:51+01:00</updated>
<published>2020-01-18T14:05:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22798&amp;p=224202#p224202</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22798&amp;p=224202#p224202"/>
<title type="html"><![CDATA[Re: Zapis i odczyt ustawień fabrycznych w projekcie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22798&amp;p=224202#p224202"><![CDATA[
<a href="https://www.youtube.com/watch?v=ix0EBtdiviY&amp;t=2426s"  class="postlink">https://www.youtube.com/watch?v=ix0EBtdiviY&amp;t=2426s</a><br /> obejrzyj ten poradnik i drugą część też Mirek pokazuje gotowe rozwiązanie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12014">tonygryps</a> — 18 sty 2020, o 14:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2020-01-18T12:45:08+01:00</updated>
<published>2020-01-18T12:45:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22798&amp;p=224201#p224201</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22798&amp;p=224201#p224201"/>
<title type="html"><![CDATA[Re: Zapis i odczyt ustawień fabrycznych w projekcie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22798&amp;p=224201#p224201"><![CDATA[
Mam trochę namotane <br />więc zacznę inaczej układać pytania <br />pytanie -1<br /><br />czy w funkcjach mam dobrze wstawione tablice ? <br />[syntax=c]// Funkcja kopiój z EEPROM do RAM - wskażniki do struktury ( &amp;ram_cfg, &amp;eem_cfg )<br /> void copy_eem_to_ram(void){<br />        eeprom_read_block( &amp;ram_wyj&#91;8&#93; , &amp;eem_wyj&#91;8&#93; , sizeof(ram_wyj ) );<br /> }[/syntax] <br />pytanie -2<br />jak zapisać ustawienia aby były cały czas widoczne na wyświetlaczu podczas zmiany ustawień<br />czyli przechodząc do menu aby ustawić ustawienia dla wyj nr 1 i chcę  po jakimś czasie <br />te ustawienia zmienić to nie mają być wyzerowane ale pamiętać ostatnią nastawę <br />W ten sposób że nie wpisuję od nowa całej godziny , minuty i sekundy skoro chcę<br />zmienić tylko minuty<br /><br />Kod menu i sposób wyświetlania <br />[syntax=c]// ************** USTAWIANIE WYJŚCIA NR-1 **********************<br />     <br />                            if( 32 == cmd &amp;&amp; key_time ) { // klawisz pilota strzałka do DOŁU V<br />                                     on_off = 0;<br />                                     beep(20);<br />                                     }<br />     <br />                            if( 33 == cmd &amp;&amp; key_time ) { // klawisz pilota strzałka do DOŁU V<br />                                                 on_off = 1;<br />                                                 beep(20);<br />                                                 }<br />     <br />            switch (on_off)<br />            {<br />            case 0:<br />     <br />     <br />                         if ( 55 == cmd &amp;&amp;  key_time  ){ // -- KLAWISZ PILOTA MAŁY CZERWONY 55 ( R )<br />                                                              _1_on_h++;<br />                                                              beep(20);<br />                                                    }<br />                             if ( 54 == cmd &amp;&amp;  key_time  ){ // -- KLAWISZ PILOTA MAŁY ZIELONY 54 ( G )<br />                                                              _1_on_m++;<br />                                                              beep(20);<br />                                                    }<br />                             if ( 50 == cmd &amp;&amp;  key_time  ){ // -- KLAWISZ PILOTA MAŁY ŻÓŁTY 50 ( Y )<br />                                                              _1_on_s++;<br />                                                              beep(20);<br />                                                    }<br />                             if ( 52 == cmd &amp;&amp;  key_time  ){ // -- klawisz pilota MAŁY NIEBIESKI 52 ( B )<br />                                                                      _1_on_wy++;<br />                                                                      beep(20);<br />                                                }<br />     <br />                                   if( _1_on_s&gt;59) {<br />                                               _1_on_s=0;<br />                                              }<br />     <br />                                       if( _1_on_m&gt;59) {<br />                                               _1_on_m=0;<br />                                              }<br />     <br />                                       if( _1_on_h&gt;23) {<br />                                               _1_on_h=0;<br />                                              }<br />     <br />                                       if( _1_on_wy&gt;8) {<br />                                               _1_on_wy=0;<br />                                              }<br />     <br />                                    lcd_cls(); // czyszczenie ekranu LCD<br />                                    lcd_locate(0,0);<br />                                    lcd_str(&quot;US_CZAS ON WY_1 &quot;);<br />     <br />                                    wyswietlacz(_1_on_s, _1_on_m, _1_on_h, _1_on_wy );<br />     <br />     <br />     <br />            break;<br />     <br />            case 1:<br />     <br />     <br />                      if ( 55 == cmd &amp;&amp;  key_time  ){ //  -- KLAWISZ PILOTA MAŁY CZERWONY 55 ( R )<br />                                                               _1_off_h++;<br />                                                               beep(20);<br />                                                                                       }<br />                      if ( 54 == cmd &amp;&amp;  key_time  ){ //  -- KLAWISZ PILOTA MAŁY ZIELONY 54 ( G )<br />                                                               _1_off_m++;<br />                                                               beep(20);<br />                                                                                       }<br />                      if ( 50 == cmd &amp;&amp;  key_time  ){ //  -- KLAWISZ PILOTA MAŁY ŻÓŁTY 50 ( Y )<br />                                                               _1_off_s++;<br />                                                               beep(20);<br />                                                                                       }<br />                      if ( 52 == cmd &amp;&amp;  key_time  ){ //  -- klawisz pilota MAŁY NIEBIESKI 52 ( B )<br />                                                           _1_off_wy++;<br />                                                               beep(20);<br />                                                                                                }<br />     <br />                             if( _1_off_s&gt;59) {<br />                                         _1_off_s=0;<br />                                        }<br />     <br />                                  if( _1_off_m&gt;59) {<br />                                          _1_off_m=0;<br />                                         }<br />     <br />                                  if( _1_off_h&gt;23) {<br />                                          _1_off_h=0;<br />                                         }<br />     <br />                                  if( _1_off_wy&gt;8) {<br />                                          _1_off_wy=0;<br />                                         }<br />     <br />                                         lcd_cls(); // czyszczenie ekranu LCD<br />                                             lcd_locate(0,0);<br />                                             lcd_str(&quot;US_CZAS OFF WY_1 &quot;);<br />    // **********************************************************<br />                                             ram_wyj&#91;0&#93; . on_hh = _1_on_h;<br />                                             ram_wyj&#91;0&#93; . on_mm = _1_on_m;<br />                                             ram_wyj&#91;0&#93; . on_ss = _1_on_s;<br />                                             ram_wyj&#91;0&#93; . on_wy = _1_on_wy;<br />     <br />                                             ram_wyj&#91;0&#93; . off_hh = _1_off_h;<br />                                     ram_wyj&#91;0&#93; . off_mm = _1_off_m;<br />                                         ram_wyj&#91;0&#93; . off_ss = _1_off_s;<br />                                             ram_wyj&#91;0&#93; . off_wy = _1_off_wy;<br />     <br />    // **********************************************************<br />                                             wyswietlacz(_1_off_s, _1_off_m, _1_off_h, _1_off_wy );<br />     <br />     <br />            break;<br />            }<br />     <br />                            if( 59 == cmd &amp;&amp; key_time == 0 ) { //  klawisz pilota NIEBIESKI ŚRODKOWY -&gt; OK / zapis do pamięci<br />                                     void copy_ram_to_eem();<br />                                             beep(20);<br />    /*<br />                                  ram_wyj&#91;0&#93; . on_hh = _1_on_h;<br />                                          ram_wyj&#91;0&#93; . on_mm = _1_on_m;<br />                                          ram_wyj&#91;0&#93; . on_ss = _1_on_s;<br />                                          ram_wyj&#91;0&#93; . on_wy = _1_on_wy;<br />     <br />                              ram_wyj&#91;0&#93; . off_hh = _1_off_h;<br />                                                  ram_wyj&#91;0&#93; . off_mm = _1_off_m;<br />                                                  ram_wyj&#91;0&#93; . off_ss = _1_off_s;<br />                                                  ram_wyj&#91;0&#93; . off_wy = _1_off_wy;<br />    */<br />                               }[/syntax]<br />Funkcja do wyświetlania<br />[syntax=c]// ****** FUNKCJA DO WYŚWIETLANIA NA LCD NASTAWY PORTÓW WYJ *************************************<br /><br />void wyswietlacz(uint8_t on_s, uint8_t on_m, uint8_t on_h, uint8_t on_wy ){<br /><br /><br />lcd_locate(1,0);<br />if( on_h &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int( on_h);<br />lcd_str(&quot;:&quot;);<br />if(  on_m &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int( on_m);<br />lcd_str(&quot;:&quot;);<br />if( on_s &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int( on_s);<br />lcd_str(&quot; wy-&quot;);<br />if( on_wy &lt; 8 ) lcd_str(&quot;&quot;);<br />lcd_int( on_wy);<br /><br />}<br /><br />// **********************************************************************************************[/syntax]<br /><br />Pytanie -3<br />Jak zrobić aby można było wstawić ustawienia fabryczne ?<br />w wyniku których ma się zmienić stan wyjść ale i stan na wyświetlaczu w menu <br /><br />Ps.Dlatego mam wstawione tyle tego kodu aby pokazać najbardziej szczegółowo co i jak mam zrobione<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 18 sty 2020, o 12:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2020-01-17T20:12:45+01:00</updated>
<published>2020-01-17T20:12:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22798&amp;p=224200#p224200</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22798&amp;p=224200#p224200"/>
<title type="html"><![CDATA[Zapis i odczyt ustawień fabrycznych w projekcie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22798&amp;p=224200#p224200"><![CDATA[
Witam <br />Mam problem z zapisem i odczytem ustawień fabrycznych w swoim sterowniku<br />mam zrobione ustawienia fabryczne w ten sposób<br /><br />Plik ster_wy.c<br /><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/eeprom.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#include &lt;string.h&gt;<br /><br /><br />#include &quot;../I2C_TWI/i2c_twi.h&quot;<br />#include &quot;../MK_DS3231/mk_ds3231.h&quot;<br />#include &quot;../STER_WY/ster_wy.h&quot;<br />#include &quot;../MENU/menu.h&quot;<br />#include &quot;../LCD/lcd44780.h&quot;<br /><br />// ****************************************************************************<br /><br /><br /> // inicjalizacja ustawień fabrucznych w pamięci Flash<br /> const TWYJ_PORT pgm_wyj&#91;8&#93; __attribute__((__progmem__)) = { // TU ZMIANY..było tak -&gt;  const TCFG pgm_cfg PROGMEM  = {<br /> {<br />       _0_ON_HH,<br />    _0_ON_MM,<br />    _0_ON_SS,<br />    _0_ON_WY,<br />    _0_OFF_HH,<br />    _0_OFF_MM,<br />    _0_OFF_SS,<br />    _0_OFF_WY,<br /> },<br /> {<br />_1_ON_HH,<br />_1_ON_MM,<br />_1_ON_SS,<br />_1_ON_WY,<br />_1_OFF_HH,<br />_1_OFF_MM,<br />_1_OFF_SS,<br />_1_OFF_WY,<br /> },<br /> {<br />_2_ON_HH,<br />_2_ON_MM,<br />_2_ON_SS,<br />_2_ON_WY,<br />_2_OFF_HH,<br />_2_OFF_MM,<br />_2_OFF_SS,<br />_2_OFF_WY,<br /> },<br /> {<br />_3_ON_HH,<br />_3_ON_MM,<br />_3_ON_SS,<br />_3_ON_WY,<br />_3_OFF_HH,<br />_3_OFF_MM,<br />_3_OFF_SS,<br />_3_OFF_WY,<br /> },<br /> {<br />_4_ON_HH,<br />_4_ON_MM,<br />_4_ON_SS,<br />_4_ON_WY,<br />_4_OFF_HH,<br />_4_OFF_MM,<br />_4_OFF_SS,<br />_4_OFF_WY,<br /> },<br /> {<br />_5_ON_HH,<br />_5_ON_MM,<br />_5_ON_SS,<br />_5_ON_WY,<br />_5_OFF_HH,<br />_5_OFF_MM,<br />_5_OFF_SS,<br />_5_OFF_WY,<br /> },<br /> {<br />_6_ON_HH,<br />_6_ON_MM,<br />_6_ON_SS,<br />_6_ON_WY,<br />_6_OFF_HH,<br />_6_OFF_MM,<br />_6_OFF_SS,<br />_6_OFF_WY,<br /> },<br /> {<br />_7_ON_HH,<br />_7_ON_MM,<br />_7_ON_SS,<br />_7_ON_WY,<br />_7_OFF_HH,<br />_7_OFF_MM,<br />_7_OFF_SS,<br />_7_OFF_WY,<br /> }<br /><br /> };<br /><br /><br /><br />  TWYJ_PORT  eem_wyj&#91;8&#93; __attribute__((section(&quot;.eeprom&quot;))); // dane w pamięci EEPROM //TU ZMIANY było tak -&gt; TCFG  eem_cfg EEMEM;<br />  TWYJ_PORT  ram_wyj&#91;8&#93;;       // dane w pamięci RAM[/syntax]<br /><br />Następnie definicje ustawień fabrycznych<br />Plik ster_wy.h<br />[syntax=c]// struktura alarmu<br />    typedef struct WYJ_PORT {<br /><br />            uint8_t on_hh;<br />            uint8_t on_mm;<br />            uint8_t on_ss;<br />            uint8_t on_wy;<br />            uint8_t off_hh;<br />            uint8_t off_mm;<br />            uint8_t off_ss;<br />            uint8_t off_wy;<br /><br />    } TWYJ_PORT;<br /><br />   TWYJ_PORT wyj&#91;8&#93;;<br /><br />// **************** DEFINICJE USTAWIEŃ FABRUCZNYCH **************************<br />// ** WYJŚCIE NR 1 ****<br />#define _0_ON_HH   12<br />#define _0_ON_MM   1<br />#define _0_ON_SS   00<br />#define _0_ON_WY   1<br />#define _0_OFF_HH  12<br />#define _0_OFF_MM  1<br />#define _0_OFF_SS  30<br />#define _0_OFF_WY  1<br /><br />// ** WYJŚCIE NR 2 ****<br />#define _1_ON_HH   12<br />#define _1_ON_MM   2<br />#define _1_ON_SS   00<br />#define _1_ON_WY   2<br />#define _1_OFF_HH  12<br />#define _1_OFF_MM  2<br />#define _1_OFF_SS  30<br />#define _1_OFF_WY  1<br /><br />// ** WYJŚCIE NR 3 ****<br />#define _2_ON_HH   12<br />#define _2_ON_MM   3<br />#define _2_ON_SS   00<br />#define _2_ON_WY   3<br />#define _2_OFF_HH  12<br />#define _2_OFF_MM  3<br />#define _2_OFF_SS  30<br />#define _2_OFF_WY  3<br /><br />// ** WYJŚCIE NR 4 ****<br />#define _3_ON_HH   12<br />#define _3_ON_MM   4<br />#define _3_ON_SS   00<br />#define _3_ON_WY   4<br />#define _3_OFF_HH  12<br />#define _3_OFF_MM  4<br />#define _3_OFF_SS  30<br />#define _3_OFF_WY  4<br /><br />// ** WYJŚCIE NR 5 ****<br />#define _4_ON_HH   12<br />#define _4_ON_MM   5<br />#define _4_ON_SS   00<br />#define _4_ON_WY   5<br />#define _4_OFF_HH  12<br />#define _4_OFF_MM  5<br />#define _4_OFF_SS  30<br />#define _4_OFF_WY  5<br /><br />// ** WYJŚCIE NR 6 ****<br />#define _5_ON_HH   12<br />#define _5_ON_MM   6<br />#define _5_ON_SS   00<br />#define _5_ON_WY   6<br />#define _5_OFF_HH  12<br />#define _5_OFF_MM  6<br />#define _5_OFF_SS  30<br />#define _5_OFF_WY  6<br /><br />// ** WYJŚCIE NR 7 ****<br />#define _6_ON_HH   12<br />#define _6_ON_MM   7<br />#define _6_ON_SS   00<br />#define _6_ON_WY   7<br />#define _6_OFF_HH  12<br />#define _6_OFF_MM  7<br />#define _6_OFF_SS  30<br />#define _6_OFF_WY  7<br /><br />// ** WYJŚCIE NR 8 ****<br />#define _7_ON_HH   12<br />#define _7_ON_MM   8  // Jak wpiszemy 08 to pojawiw się błąd<br />#define _7_ON_SS   00<br />#define _7_ON_WY   8<br />#define _7_OFF_HH  12<br />#define _7_OFF_MM  8  // Jak wpiszemy 08 to pojawiw się błąd<br />#define _7_OFF_SS  30<br />#define _7_OFF_WY  8<br /><br />// *****************************************************************************<br /><br />// extern void zapisz_ustawienia(TWYJ_PORT * al);<br />extern void sterowanie_wyj( TDATETIME * dt, TWYJ_PORT * al, uint8_t on_hh, uint8_t on_mm, uint8_t on_ss, uint8_t on_wy, uint8_t off_hh, uint8_t off_mm, uint8_t off_ss, uint8_t off_wy );<br /><br /><br />// Deklaracje zmiennych *******************************<br />extern const TWYJ_PORT pgm_wyj&#91;&#93; __attribute__((__progmem__));<br /><br />extern TWYJ_PORT eem_wyj&#91;&#93; __attribute__((section(&quot;.eeprom&quot;))); // dane w pamięci EEPROM<br /><br />extern TWYJ_PORT ram_wyj&#91;&#93; ;   // dane w pamięci RAM<br /><br /><br /><br /><br />void copy_eem_to_ram(void);<br />void copy_pgm_to_ram(void);<br />void load_defaults( void );<br />void check_and_load_defaults(void);[/syntax]<br /><br />Następnie plik menu w którym są zapisywane ustawienia sterujące wyjściami sterownika<br />[syntax=c]// ************** USTAWIANIE WYJŚCIA NR-1 **********************<br /><br />if( 32 == cmd &amp;&amp; key_time ) { // klawisz pilota strzałka do DOŁU V<br />             on_off = 0;<br />                 beep(20);<br />                 }<br /><br />if( 33 == cmd &amp;&amp; key_time ) { // klawisz pilota strzałka do DOŁU V<br />     on_off = 1;<br />     beep(20);<br />     }<br /><br />switch (on_off)<br />{<br />case 0:<br /><br /><br />     if ( 55 == cmd &amp;&amp;  key_time  ){ // -- KLAWISZ PILOTA MAŁY CZERWONY 55 ( R )<br />          _1_on_h++;<br />          beep(20);<br />}<br /> if ( 54 == cmd &amp;&amp;  key_time  ){ // -- KLAWISZ PILOTA MAŁY ZIELONY 54 ( G )<br />          _1_on_m++;<br />          beep(20);<br />}<br /> if ( 50 == cmd &amp;&amp;  key_time  ){ // -- KLAWISZ PILOTA MAŁY ŻÓŁTY 50 ( Y )<br />          _1_on_s++;<br />          beep(20);<br />}<br /> if ( 52 == cmd &amp;&amp;  key_time  ){ // -- klawisz pilota MAŁY NIEBIESKI 52 ( B )<br />   _1_on_wy++;<br />   beep(20);<br />     }<br /><br />       if( _1_on_s&gt;59) {<br />   _1_on_s=0;<br />  }<br /><br />   if( _1_on_m&gt;59) {<br />   _1_on_m=0;<br />  }<br /><br />   if( _1_on_h&gt;23) {<br />   _1_on_h=0;<br />  }<br /><br />   if( _1_on_wy&gt;8) {<br />   _1_on_wy=0;<br />  }<br /><br />        lcd_cls(); // czyszczenie ekranu LCD<br />       lcd_locate(0,0);<br />       lcd_str(&quot;US_CZAS ON WY_1 &quot;);<br /><br />       wyswietlacz(_1_on_s, _1_on_m, _1_on_h, _1_on_wy );<br /><br /><br /><br />break;<br /><br />case 1:<br /><br /><br />  if ( 55 == cmd &amp;&amp;  key_time  ){ //  -- KLAWISZ PILOTA MAŁY CZERWONY 55 ( R )<br />   _1_off_h++;<br />   beep(20);<br />                   }<br />  if ( 54 == cmd &amp;&amp;  key_time  ){ //  -- KLAWISZ PILOTA MAŁY ZIELONY 54 ( G )<br />   _1_off_m++;<br />   beep(20);<br />                   }<br />  if ( 50 == cmd &amp;&amp;  key_time  ){ //  -- KLAWISZ PILOTA MAŁY ŻÓŁTY 50 ( Y )<br />   _1_off_s++;<br />   beep(20);<br />                   }<br />  if ( 52 == cmd &amp;&amp;  key_time  ){ //  -- klawisz pilota MAŁY NIEBIESKI 52 ( B )<br />       _1_off_wy++;<br />    beep(20);<br />             }<br /><br />         if( _1_off_s&gt;59) {<br />      _1_off_s=0;<br />     }<br /><br />       if( _1_off_m&gt;59) {<br />       _1_off_m=0;<br />      }<br /><br />       if( _1_off_h&gt;23) {<br />       _1_off_h=0;<br />      }<br /><br />       if( _1_off_wy&gt;8) {<br />       _1_off_wy=0;<br />      }<br /><br />     lcd_cls(); // czyszczenie ekranu LCD<br />   lcd_locate(0,0);<br />   lcd_str(&quot;US_CZAS OFF WY_1 &quot;);<br />// **********************************************************<br />   ram_wyj&#91;0&#93; . on_hh = _1_on_h;<br />   ram_wyj&#91;0&#93; . on_mm = _1_on_m;<br />   ram_wyj&#91;0&#93; . on_ss = _1_on_s;<br />   ram_wyj&#91;0&#93; . on_wy = _1_on_wy;<br /><br />   ram_wyj&#91;0&#93; . off_hh = _1_off_h;<br />         ram_wyj&#91;0&#93; . off_mm = _1_off_m;<br />     ram_wyj&#91;0&#93; . off_ss = _1_off_s;<br />   ram_wyj&#91;0&#93; . off_wy = _1_off_wy;<br /><br />// **********************************************************<br />   wyswietlacz(_1_off_s, _1_off_m, _1_off_h, _1_off_wy );<br /><br /><br />break;<br />}<br /><br />if( 59 == cmd &amp;&amp; key_time == 0 ) { //  klawisz pilota NIEBIESKI ŚRODKOWY -&gt; OK / zapis do pamięci<br /> void copy_ram_to_eem();<br />         beep(20);<br />/*<br />                      ram_wyj&#91;0&#93; . on_hh = _1_on_h;<br />            ram_wyj&#91;0&#93; . on_mm = _1_on_m;<br />            ram_wyj&#91;0&#93; . on_ss = _1_on_s;<br />            ram_wyj&#91;0&#93; . on_wy = _1_on_wy;<br /><br />                          ram_wyj&#91;0&#93; . off_hh = _1_off_h;<br />        ram_wyj&#91;0&#93; . off_mm = _1_off_m;<br />        ram_wyj&#91;0&#93; . off_ss = _1_off_s;<br />        ram_wyj&#91;0&#93; . off_wy = _1_off_wy;<br />*/<br />   }[/syntax] <br /><br />Plik ster_wy.c<br />część sterująca portami<br />[syntax=c]void sterowanie_wyj( TDATETIME * dt, TWYJ_PORT * al, uint8_t on_hh, uint8_t on_mm, uint8_t on_ss, uint8_t on_wy, uint8_t off_hh, uint8_t off_mm, uint8_t off_ss, uint8_t off_wy ){<br /><br /><br /> czas = ( dt-&gt;hh * 3600 ) + ( dt-&gt;mm * 60 ) + ( dt-&gt;ss );<br /> alarm = (al-&gt; on_hh * 3600 ) + (al-&gt; on_mm * 60 ) + (al-&gt; on_ss );<br />// alarm = (ram_wyj&#91;0&#93;. on_hh  * 3600 ) + (ram_wyj&#91;0&#93;.on_mm * 60) + (ram_wyj&#91;0&#93;.on_ss);<br /><br />// ****  FUNKCJA WŁĄCZAJĄCA PORTY WYJŚCIOWE **************************************<br /><br />     if ( (czas == alarm) &amp;&amp; (al-&gt; on_wy == 1)) {<br />     PORTA &amp;= ~(1&lt;&lt;PA0);<br />        }<br />//     if (( wczas == walarm) &amp;&amp; (ram_wyj&#91;0&#93; . on_wy == 1 )) {<br />//    PORTA &amp;= ~(1&lt;&lt;PA0);<br />    // PORTA |=(1&lt;&lt;PA0);<br />//   }<br />//     else<br />     if ( (czas == alarm ) &amp;&amp; (al-&gt; on_wy == 2)) {<br />     PORTA &amp;= ~(1&lt;&lt;PA1);<br />        }<br />//     if (( wczas == walarm) &amp;&amp; (ram_wyj&#91;0&#93; . on_wy == 2 )) {<br />//     PORTA &amp;= ~(1&lt;&lt;PA1);<br />   //  PORTA |=(1&lt;&lt;PA1);<br />//   }<br />//     else<br />     if ( (czas == alarm) &amp;&amp; (al-&gt; on_wy == 3)) {<br />     PORTA &amp;= ~(1&lt;&lt;PA2);<br />        }<br />//     else<br />     if ( (czas == alarm ) &amp;&amp; (al-&gt; on_wy == 4)) {<br />     PORTA &amp;= ~(1&lt;&lt;PA3);<br />        }<br />//     else<br />     if ( (czas == alarm) &amp;&amp; (al-&gt; on_wy == 5)) {<br />     PORTA &amp;= ~(1&lt;&lt;PA4);<br />        }<br />//     else<br />     if ( (czas == alarm ) &amp;&amp; (al-&gt; on_wy == 6)) {<br />     PORTA &amp;= ~(1&lt;&lt;PA5);<br />        }<br />//     else<br />     if ( (czas == alarm) &amp;&amp; (al-&gt; on_wy == 7)) {<br />     PORTA &amp;= ~(1&lt;&lt;PA6);<br />        }<br />//     else<br />     if ( (czas == alarm ) &amp;&amp; (al-&gt; on_wy == 8)) {<br />     PORTA &amp;= ~(1&lt;&lt;PA7);<br />        }<br /><br /><br />// ****  FUNKCJA WYŁĄCZAJĄCA PORY STERÓJĄCE ***********************************************<br /><br /> wczas = ( dt-&gt;hh * 3600 ) + ( dt-&gt;mm * 60 ) + ( dt-&gt;ss );<br />     walarm = (al-&gt; off_hh * 3600 ) + (al-&gt; off_mm * 60 ) + (al-&gt; off_ss );<br /> //    walarm = (ram_wyj&#91;0&#93;.off_hh * 3600 )+(ram_wyj&#91;0&#93;.off_mm * 60) + (ram_wyj&#91;0&#93;.off_ss); // dopisane<br /><br />     if (( wczas == walarm) &amp;&amp; (al-&gt; off_wy == 1 )) {<br />     PORTA |= (1&lt;&lt;PA0);<br />        }<br />//     if (( wczas == walarm) &amp;&amp; (ram_wyj&#91;0&#93;.off_wy == 1 )) { // dopisane<br />//     PORTA |= (1&lt;&lt;PA0);<br />    // PORTA &amp;= ~(1&lt;&lt;PA0);<br />//     }<br />//     else<br />     if ((wczas == walarm) &amp;&amp; (al-&gt; off_wy == 2)) {<br />     PORTA |= (1&lt;&lt;PA1);<br />    }<br />//     if (( wczas == walarm) &amp;&amp; (ram_wyj&#91;0&#93;.off_wy == 2 )) { // dopisane<br />//     PORTA |= (1&lt;&lt;PA1);<br />    // PORTA &amp;= ~(1&lt;&lt;PA1);<br />//        }<br />//     else<br />     if ( (wczas == walarm) &amp;&amp; (al-&gt; off_wy == 3)) {<br />     PORTA |= (1&lt;&lt;PA2);<br />        }<br />//     else<br />     if ( (wczas == walarm ) &amp;&amp; (al-&gt; off_wy == 4)) {<br />     PORTA |= (1&lt;&lt;PA3);<br />        }<br />//     else<br />     if ( (wczas == walarm) &amp;&amp; (al-&gt; off_wy == 5)) {<br />     PORTA |= (1&lt;&lt;PA4);<br />        }<br />//     else<br />     if ( (wczas == walarm ) &amp;&amp; (al-&gt; off_wy == 6)) {<br />     PORTA |= (1&lt;&lt;PA5);<br />        }<br />//     else<br />     if ( (czas == walarm) &amp;&amp; (al-&gt; off_wy == 7)) {<br />     PORTA |= (1&lt;&lt;PA6);<br />        }<br />//     else<br />     if ( (wczas == walarm ) &amp;&amp; (al-&gt; off_wy == 8)) {<br />     PORTA |= (1&lt;&lt;PA7);<br />        }<br /><br /><br /> }<br />// *****************************************************************************[/syntax]<br /><br />Funkcje zapisujące do pamięci ( CZY DOBRZE SĄ WPISANE TABLICE ? )<br />[syntax=c]// ****** FUNKCJE DO ZAPISU USTAWIEŃ W EEPROM ***************************************************<br /><br /> // Funkcja kopiój z EEPROM do RAM - wskażniki do struktury ( &amp;ram_cfg, &amp;eem_cfg )<br /> void copy_eem_to_ram(void){<br /> eeprom_read_block( &amp;ram_wyj&#91;8&#93; , &amp;eem_wyj&#91;8&#93; , sizeof(ram_wyj ) );<br /> }<br /><br /> // ****************************************************************<br /><br /> // Funkcja kopiująca z RAM do EEPROM **********************************<br /> void copy_ram_to_eem(void){<br />  eeprom_write_block( &amp;ram_wyj&#91;8&#93; , &amp;eem_wyj&#91;8&#93; , sizeof(ram_wyj ) );// Błędny zapis<br /> }<br /><br /> // *********************************************************************<br /><br /> // Funkcja do kopiowania z pamięci FLASH do RAM<br /> void copy_pgm_to_ram(void) {<br /> memcpy_P( &amp;ram_wyj&#91;8&#93;, &amp;pgm_wyj&#91;8&#93;, sizeof(ram_wyj) );<br /> }<br /> <br /> // **************************************************************************<br /> // ** Jeśli użytkownik na żądanie będzie chciał załadowac ustawienia domyślne<br /> void load_defaults( void ) {<br /> copy_pgm_to_ram();// kopiuje strukturę z pamięci FLASH do RAM i jednocześnie kopiuje z<br /> copy_ram_to_eem();// pamięci RAM do pamięci EEPROM<br /> }<br /> // *************************************************************************<br /> // Ta funkcja ma sprawdzic czy pamięc w EEPROMIE jest pusta ****************<br /> void check_and_load_defaults(void) {<br /> uint8_t i, len = sizeof( ram_wyj&#91;8&#93; );<br /> uint8_t * ram_wsk = (uint8_t*)&amp;ram_wyj&#91;8&#93;;<br /><br /> copy_eem_to_ram();<br /> for(i=0; i&lt;len; i++) {<br /> if(0xff == *ram_wsk++ ) continue;<br /> break;<br /> }<br /><br /> if(i == len ) {<br /> load_defaults();<br /> }<br /> }<br /> // **********************************************************************************************[/syntax]<br />Plik main.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br /><br /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br />#include &quot;MK_DS3231/mk_ds3231.h&quot;<br />#include &quot;STER_WY/ster_wy.h&quot;<br />#include &quot;IR_UNI/ir_config.h&quot;<br />#include &quot;MENU/menu.h&quot;<br /><br /> uint8_t a=1;<br /><br />// ** OBSŁUGA KLAWISZA PODŚWIETLANIA LCD ****<br />#define KEY (1&lt;&lt;PD7)<br /> uint8_t key_lock;<br />// ******************************************<br />// ***** LED KONTROLNY **********************<br />//#define LED (1&lt;&lt;PB0)<br />//#define LED_ON PORTB &amp;= ~LED<br />//#define LED_OFF PORTB |= LED<br />//#define LED_TOG PORTB ^= LED<br />// *******************************************<br /><br /><br />// *********** deklaracja funkcji **********************************<br />static void parse_ir( uint8_t addr, uint8_t cmd, uint8_t key_time );<br />static void menu_init( void );<br />void klawisz( void );<br /><br /><br />uint8_t stc&#91;&#93; = {12,18,18,12,32,32,32,32}; // zakodowany znak  STOPNIA CELCJUSZA<br />//uint8_t znak_L&#91;&#93; = {16,16,18,20,24,16,31,0};// wzór znaku litery Ł w pamięci RAM<br /><br />int main( void ) {<br /><br />// ********* Wyjścia portów sterujących ****************************<br /><br />DDRA = 0xff;// kierunek PORTU A  wyjściowy<br />PORTA = 0xff;// wyłączenie diody LED<br /><br />// ********* LED ***************************************************<br />//DDRB |= (1&lt;&lt;PB0);// kierunek pinu PD5 - PD6 – wyjściowy<br />//PORTB |= (1&lt;&lt;PB0);// wyłączenie diody LED<br />// ********* KLAWISZ ***********************************************<br />PORTD |= KEY;  // podciągamy linie klawiszy do VCC<br />//DDRD |= KEY;// kierunek pinu PA7 diody LED – wyjściowy<br />// *****************************************************************<br />check_and_load_defaults();<br /><br />// copy_ram_to_eem();<br />// copy_pgm_to_ram();<br />load_defaults();<br />//if(!(PIND &amp; KEY)) load_defaults();// ładuje ustawienia fabryczne po naciśnięciu klawisza przed włączeniem<br />// ***************************************************************************************************<br /><br />lcd_init();// włączanie ekranu LCD<br />lcd_cls(); // włączanie czyszczenia ekranu LCD<br />//lcd_LED( 1 );<br /><br />// inicjalizacja odb. podczerwieni<br />ir_init();<br />// rejestracja procedury odbioru ir<br />register_ir_event_callback( parse_ir );<br /><br /><br /><br /><br /><br />// konfiguracja wejścia INT0<br />PORTD |= (1&lt;&lt;PD2);<br />MCUCR |= (1&lt;&lt;ISC01)|(1&lt;&lt;ISC00); // zbocze narastające<br /><br /><br />i2cSetBitrate(100); // ustalana prędkośc na magistrali I2C<br /><br />DS3231_init();<br /><br />DS3231_set_time( 12,00,30 );<br />DS3231_set_date( 20, 1, 14, 1 );<br /><br /><br />    sei();<br />while(1) {<br /><br /><br /><br />IR_EVENT();<br />lcd_LED( a );// PODŚWIETLANIE WYŚWIETLACZA LCD<br />klawisz();   // WYWOŁYWANIE FUNKCJI OBSŁUGI KLAWISZA<br /><br /><br />// ***************************************************************************<br />// ** ODCZYTUJE ZAPISANE USTAWIENIA CZASÓW ON/OFF  PORTÓW Z MENU  ******************<br /><br />sterowanie_wyj (&amp;datetime,&amp;wyj&#91;0&#93;, _1_on_h,_1_on_m,_1_on_s,_1_on_wy, _1_off_h,_1_off_m,_1_off_s,_1_off_wy);<br />sterowanie_wyj (&amp;datetime,&amp;wyj&#91;1&#93;, _2_on_h,_2_on_m,_2_on_s,_2_on_wy, _2_off_h,_2_off_m,_2_off_s,_2_off_wy);<br />sterowanie_wyj (&amp;datetime,&amp;wyj&#91;2&#93;, _3_on_h,_3_on_m,_3_on_s,_3_on_wy, _3_off_h,_3_off_m,_3_off_s,_3_off_wy);<br />sterowanie_wyj (&amp;datetime,&amp;wyj&#91;3&#93;, _4_on_h,_4_on_m,_4_on_s,_4_on_wy, _4_off_h,_4_off_m,_4_off_s,_4_off_wy);<br />sterowanie_wyj (&amp;datetime,&amp;wyj&#91;4&#93;, _5_on_h,_5_on_m,_5_on_s,_5_on_wy, _5_off_h,_5_off_m,_5_off_s,_5_off_wy);<br />sterowanie_wyj (&amp;datetime,&amp;wyj&#91;5&#93;, _6_on_h,_6_on_m,_6_on_s,_6_on_wy, _6_off_h,_6_off_m,_6_off_s,_6_off_wy);<br />sterowanie_wyj (&amp;datetime,&amp;wyj&#91;6&#93;, _7_on_h,_7_on_m,_7_on_s,_7_on_wy, _7_off_h,_7_off_m,_7_off_s,_7_off_wy);<br />sterowanie_wyj (&amp;datetime,&amp;wyj&#91;7&#93;, _8_on_h,_8_on_m,_8_on_s,_8_on_wy, _8_off_h,_8_off_m,_8_off_s,_8_off_wy);<br /><br />// *******************************************************************************[/syntax]<br /><br />Co robię żle że nie mogę uzyskać ustawień fabrycznych <br />a i bieżące ustawienia nie mogę zapisać tak aby były ustawione nawet po ponownym włączeniu <br />sterownika <br />Chciałbym aktualizować ustawienia tak aby nie były gubione po wyłączeniu , ale nie wiem jak to zrobić<br />przeglądałem poradniki Mirka i próbowałem zaadoptować jakieś rozwiązania ale nic z tego mi nie wychodzi<br />i potrzebowałbym pomocy <br />sterownik fajnie działa ale tylko z pamięciom RAM po wyłączeniu wszystkie ustawienia znikają ( to jasne jeśli chodzi o RAM )<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 17 sty 2020, o 20:12</p><hr />
]]></content>
</entry>
</feed>