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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-06-03T21:37:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7221&amp;mode</id>
<entry>
<author><name><![CDATA[Kuźnia]]></name></author>
<updated>2014-06-03T21:37:01+01:00</updated>
<published>2014-06-03T21:37:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=83290#p83290</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=83290#p83290"/>
<title type="html"><![CDATA[Re: ATMEGA32[C] porównanie czsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=83290#p83290"><![CDATA[
jeżeli w porównaniu czasu doliczonego, z czasem z rtc bierzesz pod uwagę dni tygodnia  to w przypadku gdy &quot;miniesz&quot; 24 doliczając te trzy godziny powinieneś doliczyć też dzień (np. doliczasz w środę o 22:00 3 godziny i wychodzi  czwartek 01:00 to teraz w pamięci powinieneś zmienić dzień też na czwartek ,żeby pasował do tego czwartku z rtc'ka.) <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=2537">Kuźnia</a> — 3 cze 2014, o 21:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matekogon]]></name></author>
<updated>2014-05-31T23:02:56+01:00</updated>
<published>2014-05-31T23:02:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82949#p82949</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82949#p82949"/>
<title type="html"><![CDATA[Re: ATMEGA32[C] porównanie czsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82949#p82949"><![CDATA[
Kolego mogę tylko potwierdzić rozwiązanie kolegi Zaba Robiąc to na minutach zrobił bym warunek If liczba ze zwłoką (25:00)&gt; (24:00) to<br />Nowa_liczba(1:00)= 25:00-24:00 <br /> if aktualny_czas== nowa_liczba to zrób coś tam...... <br /><br /> Nawet jak byś miał w tedy zwłokę 5h to masz: <br />liczba ze zwłoką 27:00  natomiast nowa liczba ci wyjdzie 27:00-24:00=3:00<br />Najlepiej zamienić to na minuty lub sekundy. A i wydaje mi się że powinno  być 23:59 a nie 24:00 ale to sobie już sam doliczysz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1380">matekogon</a> — 31 maja 2014, o 23:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-05-31T16:14:11+01:00</updated>
<published>2014-05-31T16:14:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82910#p82910</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82910#p82910"/>
<title type="html"><![CDATA[Re: ATMEGA32[C] porównanie czsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82910#p82910"><![CDATA[
Ale przecież 22:00 + 3h to nie jest 25:00 tylko 1:00 .<br />wstaw warunek przy obliczaniu zwłoki<br />np.<br />jeśli czasOnOff &gt; 24:00 wtedy czasOnOff = 3 - (24:00 - 22:00) <br /><br />nie wiem czy nie zamotałem za mocno ale ogólnie<br />chodzi oto żeby uwzględnić że robisz operacje na czasie<br />który musi się mieścić w dwudziestu czterech godzinach lub w 1440-stu minutach<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 31 maja 2014, o 16:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[margas]]></name></author>
<updated>2014-05-31T11:43:46+01:00</updated>
<published>2014-05-31T11:43:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82890#p82890</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82890#p82890"/>
<title type="html"><![CDATA[Re: ATMEGA32[C] porównanie czsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82890#p82890"><![CDATA[
Zgadza się to tak działa ale ten warunek nie spełnia się gdy suma czasu wykracza poza dobę więc do porównania np, czasu załącz o 22:00 +3 godziny zwłoki nie dojdzie bo suma czasu nastawy będzie 25:00 więc większa od maksymalnego czasu [23:59] zegara systemowego...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4247">margas</a> — 31 maja 2014, o 11:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matekogon]]></name></author>
<updated>2014-05-30T21:42:41+01:00</updated>
<published>2014-05-30T21:42:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82866#p82866</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82866#p82866"/>
<title type="html"><![CDATA[Re: ATMEGA32[C] porównanie czsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82866#p82866"><![CDATA[
Kolego nie rozumię twojego przykładu co podałeś z tymi wyliczeniami .Jeśli masz przykład że coś załączasz o godzinie 20:00 i przedłużasz to o 3 godziny to najlepiej zamienić to na minuty lub sekundy. Czyli godzina 20*60 minut=1200minut następnie zwłoka 3*60=180 . Czas który cię interesuje to 1380minut o tej porze ma ON/OFF  i teraz musisz przeliczyć aktualny czas pobierany z zegara. Jeśli PCF pobrałeś godziny i minuty i np jest to 18:20  to bierzesz 18 * 60=1080 i masz godziny przeliczone na minuty. Następnie do tego dodajesz minuty czyli 1080+20=1100minut  to jest twój aktualny czas i teraz jeśli zrobisz warunek &quot;If aktualny przeliczony czas (1100)== czas ze zwłoką (1200) to zrób coś tam .  Mam nadzieję że coś zrozumiałeś. Oczywiście nie pomogę w C bo jeszcze się nie przesiadłem na ten język. Natomiast w Bascomie mi ten system działa który ci przedstawiłem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1380">matekogon</a> — 30 maja 2014, o 21:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[margas]]></name></author>
<updated>2014-05-31T11:46:02+01:00</updated>
<published>2014-05-30T12:03:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82811#p82811</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82811#p82811"/>
<title type="html"><![CDATA[Re: ATMEGA32[C] porównanie czsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82811#p82811"><![CDATA[
Można zrobić porównanie czasu w każdej sekundzie ale wystarczy dokładność minutowa<br />jest tylko kłopot z dodanym czasem opóźnienia np; trzy godziny.<br />Pomyślałem by &quot;utrzymać&quot; np; otwartą pętlę warunkową<br />jeżeli czas nastawy i zwłoka różna od 0 np;23:00 i zwłoka [godzina] 1*60 [aby było w minutach]<br />i teraz wykorzystując impulsy minutowe zegara systemowego odejmować je od czasu zwłoki <br />do chwili gdy zostanie spełniony warunek<br />czas nastawy równy czas zwłoki 0<br />Czy to ma szansę zadziałać ???<br />Wstawię cały kod to może będzie bardziej czytelniejsze...<br />[syntax=c]//################################################################<br />//#       A T M E G A   H O M E   S O L A R   S Y S T E M        #            <br />//################################################################<br />//----- wykorzystane porty ATMEGA 32 16Mhz<br />//PORTA &gt;&gt; PIN 0 do 4 pięć kanałów pomiarowych ADC<br />//PORTB &gt;&gt; PIN 0-podświetlenie LCD,1-RS,2-RW,3-E<br />//PORTB &gt;&gt; PIN 4-5-6-7 DATA <br />//PORTC &gt;&gt; PIN 0 - 1 I2C<br />//PORTC &gt;&gt; PIN 2 do 3 wyjścia sterujące zasilaczami<br />//PORTC &gt;&gt; PIN 4 do 7 wyjścia na przekażniki przez bufor ULN2003<br />//PORTD &gt;&gt; PIN 0 do 3 wolne<br />//PORTD &gt;&gt; PIN 3 do 7 pieć klawiszy<br />//----- umiejscowienie  LCD wzgledem klawiszy <br />// ---------------------------klawisz 1<br />//|wiersz 1|klawisz 2<br />//|wiersz 2|klawisz 3<br />//|wiersz 3|klawisz 4<br />//|wiersz 4|klawisz 5<br />// ---------------------------<br />//#################################################################            <br />#include &lt;stdint.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;avr/interrupt.h&gt; <br />#include &quot;HD44780.h&quot;<br />#include &quot;i2c_twi.h&quot;<br />#include &lt;util/delay.h&gt;<br />//**********  funkcje przetwornika ADC<br />char buffer_n&#91;8&#93;;<br />volatile uint16_t pomiar&#91;6&#93; __attribute__((section(&quot;.noinit&quot;)));<br />void inline SetAdcKanal(unsigned char kanal)<br />{ADMUX = ((ADMUX&amp;0xE0)+ kanal);}<br />//********** funkcje konwersji<br />char dec_na_bcd(char num){return ((num/10 * 16) + (num % 10));}<br />char bcd_na_dec(char num){return ((num/16 * 10) + (num % 16));}<br />//********** definicje zmiennych dla ADC<br />double napiecie_aku,prad_in,napiecie_sol,prad_out,verify_zas,prad_aku;<br />float aku_err = 11.5;<br />float aku_min = 11.7;<br />float aku_max = 13.9;<br />float sol_min = 13.0;<br />float zas_ref = 10.0;<br />//********** adresy pamięci PCF8583<br />uint8_t rtc_adres&#91;&#93;={ 0x02,0x03,0x04,0x05,0x06};<br />uint8_t mem_addr&#91;&#93;={ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,<br />                              0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,<br />              0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,<br />                              0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F };<br />//********** definicje zmiennych dla pcf8583a<br />#define pcf8583 0xA2<br />char buffer_t&#91;32&#93;;<br />uint8_t read_pcf&#91;5&#93;;<br />uint8_t time&#91;6&#93;; //aktualny czas<br />uint8_t data&#91;6&#93;; //aktualna data<br />uint8_t set_godz,set_min,set_day,set_mc,week; //czas i data systemowa<br />//********** definicje zmiennych dla zegara sterującego<br />uint8_t time_zs1,time_zs2;<br />uint8_t set_h;//nastawy zegara sterującego - godziny<br />uint8_t set_m;//nastawy zegara sterującego - minuty<br />uint8_t set_delay;//nastawy zwloki czasu włacz/wyłacz zegara sterującego<br />uint8_t obwod&#91;5&#93;;//numer kanału przekażnika lub optotriaka<br />uint8_t status&#91;5&#93;;//status przekażnika / optotriaka<br />uint16_t timer&#91;16&#93;;//suma czasu nastaw zegara sterującego<br />uint16_t time_sys;<br />//********** definicje MENU_LCD<br />unsigned char menu=0,key=0,komunikat;<br />//********** definicje ogólne<br /><br />//*************************************************************************************<br />int main()<br />{<br />DDRB=0x01;//podświetlenie LCD (reszta pinów 4 bity,RS,RW,E pod LCD)<br />DDRC=0xFC;//wyjścia sterujące oraz SCL SDA układu rtc<br />PORTC=0x03;//pul-up dla SCL SDA INT1 układu rtc<br />DDRD=0x00;//wejścia klawiatura<br />PORTD=0xF8;//pull-up klawiatura<br />//----- LCD init LCD_menu init<br />LCD_Initalize();<br />_delay_ms(250);<br />menu=0;<br />//----- ADC init<br />ADMUX = _BV(REFS0)|_BV(REFS1)|_BV(ADLAR);<br />ADCSRA = _BV(ADEN)|_BV(ADPS0)|_BV(ADPS1)|_BV(ADPS2);<br />//----- TWI init<br />TWSR=0x00;<br />TWBR=0x48;//preskaler I2C ((F_CPU/100000UL-16);<br /><br />sei();<br />//----- pętla główna progranu<br />while(1)<br />{<br />//=====================================================================================<br />//POMIARY NAPIĘĆ I PRĄDÓW <br />//=====================================================================================<br />  int kan;<br />  {<br />    for(kan = 0; kan&lt;5; kan++)<br />    {<br />      SetAdcKanal(kan);<br />      ADCSRA |= (1 &lt;&lt; ADSC);<br />      while(ADCSRA &amp; (1 &lt;&lt; ADSC));<br />      pomiar&#91;kan&#93; = (ADC | ADCH&lt;&lt;8);//odczyt kanalów ADC<br />    }      <br />    napiecie_aku = (pomiar&#91;0&#93;/2.54)/1024;//napięcie akumulatora<br />    prad_in = (pomiar&#91;1&#93;/2.54)/1024;//prąd zasilania<br />    napiecie_sol = (pomiar&#91;2&#93;/2.54)/1024;//napięcie ogniwa fotogalwanicznego<br />    prad_out = (pomiar&#91;3&#93;/2.54)/1024;//prąd obciążenia<br />    verify_zas = (pomiar&#91;4&#93;/2.54)/1024;//monitorowanie zasilacza<br />    _delay_ms(40);<br />    prad_aku =(prad_in - prad_out);//prąd akumulatora<br />    //================================================================================<br />    //ODCZYT ZEGARA CZASU RZECZYWISTEGO RTC<br />    //================================================================================<br />    int a,ts,tsm,tsh,tsx;<br />    {<br />      for(a=0;a&lt;5;a++){read_pcf&#91;a&#93; = TWI_read(pcf8583,rtc_adres&#91;a&#93;);}<br /><br />    real_time&#91;1&#93; = bcd_na_dec(read_pcf&#91;2&#93;);       //sekundy<br />    real_time&#91;2&#93; = bcd_na_dec(read_pcf&#91;3&#93;);       //minuty<br />    real_time&#91;3&#93; = bcd_na_dec(read_pcf&#91;4&#93;);       //godziny                                                                             <br />    real_time&#91;4&#93; = bcd_na_dec(read_pcf&#91;5&#93; &amp; 0x3F);//dni miesiąca<br />    real_time&#91;5&#93; = bcd2dec(read_pcf&#91;6&#93; &amp; 0x1F);   //miesiące<br />    real_time&#91;6&#93; = (read_pcf&#91;5&#93; &amp; 0xC0) &gt;&gt; 6;     //lata<br />    real_time&#91;7&#93; =  (read_pcf&#91;6&#93; &amp; 0xE0) &gt;&gt; 5 ;   //dni tygodnia<br />      // zamiana czasu na postać liczby czterocyfrowej aby było <br />      // łatwiej wykonać porównanie czasu systemowego z nastawą zegara sterujacego<br />      real_time&#91;0&#93;=(real_time&#91;3&#93;*60)+real_time&#91;2&#93;; //1439 = godz 23:59<br />      //==============================================================================<br />     // porównanie czasu systemowego z nastawami zegara sterującego<br />     // uwzględniajac brak lub dodany czas zwłoki<br />     //==============================================================================<br />     }<br />for(ts=0;ts&lt;16;ts++)//pętla odczytu nastaw zegara sterującego<br />{<br />        tsh = TWI_read(pcf8583,rtc_adres&#91;ts&#93;);//odczyt nastawy godzin<br />        tsm = TWI_read(pcf8583,rtc_adres&#91;ts&#93;);//odczyt nastawy minut<br />tsx=(tsh*60+tsm)//suma godzin i minut<br />if(real_time&#91;0&#93;==tsx<br />//porównanie czasu dla danego kanału wyznacz0onego zmienną ts<br />{<br />//w założeniu zmienna ts powinna określić kanał &#91;1 do4&#93; i podjąć akcję<br />//załączenia lub wyłączenia<br />}<br /><br />}<br />//*************************************************************************************<br />// OBSŁUGA KLAWIATURY<br />//*************************************************************************************<br />  if(key&gt;0)<br />   {<br />if(!(PIND &amp; _BV(3))){_delay_ms(100);key=1;_delay_ms(100);PORTB |= _BV(0);}<br />  if(!(PIND &amp; _BV(4))){_delay_ms(100);key=2;_delay_ms(100);PORTB |= _BV(0);}<br />  if(!(PIND &amp; _BV(5))){_delay_ms(100);key=3;_delay_ms(100);PORTB |= _BV(0);}<br />  if(!(PIND &amp; _BV(6))){_delay_ms(100);key=4;_delay_ms(100);PORTB |= _BV(0);}<br />  if(!(PIND &amp; _BV(7))){_delay_ms(100);key=5;_delay_ms(100);PORTB |= _BV(0);}<br />}<br />//=====================================================================================<br />char *t_dzien&#91;7&#93;={&quot;Poniedzialek&quot;,&quot;   Wtorek&quot;,&quot;   Sroda&quot;,<br />&quot;  Czwartek  &quot;,&quot;   Piatek&quot;,&quot;   Sobota&quot;,&quot; Niedziela&quot;};<br />char *t_adc&#91;5&#93;={&quot;!AWARIA!&quot;,&quot;zasilacz&quot;,&quot;solar   &quot;,&quot;stanby  &quot;};<br />char *t_obwod&#91;4&#93;={&quot;*   MIKROFALOWKA   *&quot;,&quot;*  PLYTA KUCHENNA  *&quot;,<br />&quot;*   SPRZET  R&amp;TV   *&quot;,&quot;* ZASILACZ REZERWA *&quot;};<br />char *t_status&#91;2&#93;={&quot;zalaczony &quot;,&quot;wylaczony &quot;};<br />//*************************************************************************************<br />// OBSŁUGA WYŚWIETLACZA <br />//*************************************************************************************<br />switch(menu)<br />  {<br />case 0:// WYŚWETLANIE CZASU - DATY - DNIA TYGODNIA<br />if(key=0)<br />{<br />LCD_GoTo(0,1);LCD_WriteText(&quot;**      :  :      **&quot;);<br />LCD_GoTo(6,1);LCD_WriteText(dtostrf(real_time&#91;3&#93;,2,0,buffer_t));<br />LCD_GoTo(9,1);LCD_WriteText(dtostrf(real_time&#91;2&#93;,2,0,buffer_t));<br />LCD_GoTo(12,1);LCD_WriteText(dtostrf(real_time&#91;1&#93;,2,0,buffer_t));<br />LCD_GoTo(20,0);LCD_WriteText(&quot;**                **&quot;);<br />LCD_GoTo(24,0);LCD_WriteText(t_dzien&#91;week&#93;);<br />LCD_GoTo(20,1);LCD_WriteText(dtostrf(real_time&#91;4&#93;,2,0,buffer_t));<br />LCD_GoTo(26,1);LCD_WriteText(dtostrf(real_time&#91;5&#93;,2,0,buffer_t));<br />LCD_GoTo(29,1);LCD_WriteText(dtostrf(real_time&#91;6&#93;,2,0,buffer_t));<br />//uzupełnienie nie wyswietlanej cyfy gdy dzięsiatki mają wartośc 0<br />if(real_time&#91;3&#93; &lt;10){LCD_GoTo(6,1);LCD_WriteText(&quot;0&quot;);}<br />if(real_time&#91;2&#93;&lt;10){LCD_GoTo(9,1);LCD_WriteText(&quot;0&quot;);}<br />if(real_time&#91;1&#93; &lt;10){LCD_GoTo(12,1);LCD_WriteText(&quot;0&quot;);}<br />if(real_time&#91;4&#93;&lt;10){LCD_GoTo(26,1);LCD_WriteText(&quot;0&quot;);}<br />if(real_time&#91;6&#93; &lt;10){LCD_GoTo(29,1);LCD_WriteText(&quot;0&quot;);}<br />}<br />else //opcje menu<br />{<br />LCD_GoTo(0,0);LCD_WriteText(&quot; STATUS ZASILANIA   &gt;&quot;);<br />LCD_GoTo(0,0);LCD_WriteText(&quot; STEROWANIE MANUALNE&gt;&quot;);<br />LCD_GoTo(0,0);LCD_WriteText(&quot; USTAW CZAS SYSTEMU.&gt;&quot;);<br />LCD_GoTo(0,0);LCD_WriteText(&quot; USTAW CZAS TIMERA  &gt;&quot;);<br />if(key==1){menu=1; key=0;}<br />if(key==2){menu=2; key=0;}<br />if(key==3){menu=3; key=0;}<br />if(key==4){menu=4; key=0;}<br />if(key==5){menu=5; key=0;}<br />}<br />case 1://MONITORING I STATUS ZASILANIA OBWODÓW NISKONAPIĘCIOWYCH<br /><br />LCD_GoTo(0,0);LCD_WriteText(&quot;Stan systemu &quot;);<br />LCD_GoTo(13,0);LCD_WriteText(t_adc&#91;komunikat&#93;);<br />_delay_ms(1000);<br />LCD_GoTo(0,1);LCD_WriteText(&quot;AKU     V SOL     V &quot;);<br />_delay_ms(1000);<br />LCD_GoTo(4,1);LCD_WriteText(dtostrf(napiecie_aku,4,2,buffer_n));<br />LCD_GoTo(14,1);LCD_WriteText(dtostrf(napiecie_sol,4,2,buffer_n));<br />_delay_ms(1000);<br />LCD_GoTo(20,0);LCD_WriteText(&quot;POWER   AKUM   OBCI &quot;);<br />_delay_ms(1000);<br />LCD_GoTo(20,1);LCD_WriteText(dtostrf(prad_in,4,2,buffer_n));<br />LCD_GoTo(25,1);LCD_WriteText(&quot;                &quot;);<br />LCD_GoTo(27,1);LCD_WriteText(dtostrf(prad_aku,4,2,buffer_n));<br />LCD_GoTo(34,1);LCD_WriteText(dtostrf(prad_out,4,2,buffer_n));<br />_delay_ms(1000);<br />if(key==0){menu=0; key=0;}<br />break;<br />//=====================================================================================<br />case 2://STEROWANIE MANUALNE OBWODAMI<br />LCD_GoTo(0,0);LCD_WriteText(t_obwod&#91;1&#93;);<br />LCD_GoTo(0,0);LCD_WriteText(t_status&#91;status&#91;1&#93;&#93;);<br />LCD_GoTo(0,1);LCD_WriteText(t_obwod&#91;2&#93;);<br />LCD_GoTo(0,1);LCD_WriteText(t_status&#91;status&#91;2&#93;&#93;);<br />LCD_GoTo(20,0);LCD_WriteText(t_obwod&#91;3&#93;);<br />LCD_GoTo(20,0);LCD_WriteText(t_status&#91;status&#91;3&#93;&#93;);<br />LCD_GoTo(0,1);LCD_WriteText(t_obwod&#91;4&#93;);<br />LCD_GoTo(0,1);LCD_WriteText(t_status&#91;status&#91;4&#93;&#93;);<br />if(key==0){menu=0; key=0;}<br />if(key==2)//manualne załączenie lub wyłączenie obwódu nr.1<br />{if(status&#91;1&#93;==0)PORTC |= _BV(4);}else{PORTC &amp;=~ _BV(4);status&#91;1&#93;=1;}<br />if(key==3)//manualne załączenie lub wyłączenie obwódu nr,22<br />{if(status&#91;1&#93;==0)PORTC |= _BV(5);}else{PORTC &amp;=~ _BV(5);status&#91;2&#93;=1;}<br />if(key==4)////manualne załączenie lub wyłączenie obwódu nr.3<br />{if(status&#91;1&#93;==0)PORTC |= _BV(6);}else{PORTC &amp;=~ _BV(6);status&#91;3&#93;=1;}<br />if(key==5)////manualne załączenie lub wyłączenie obwódu nr.4<br />{if(status&#91;1&#93;==0)PORTC |= _BV(7);}else{PORTC &amp;=~ _BV(7);status&#91;4&#93;=1;}<br />break;<br />//=====================================================================================<br />case 3://PROGRAMOWANIE CZASU ZEGARA SYSTEMOWEGO<br />LCD_GoTo(0,0);LCD_WriteText(&quot;USTAW GODZINY      &gt;&quot;);<br />LCD_GoTo(20,0);LCD_WriteText(&quot;USTAW MINUTY       &gt;&quot;);<br />LCD_GoTo(0,1);LCD_WriteText(&quot;USTAW DZIEN        &gt;&quot;);<br />LCD_GoTo(20,1);LCD_WriteText(&quot;USTAW MIESIAC      &gt;&quot;);<br />if(key==2){if(++set_h &gt;= 24){set_h++;set_h = 0;}key=0;}<br />   if(key==3){if(++set_m &gt;= 60){set_m++;set_m = 0;}key=0;} <br /> if(key==4){if(++set_day &gt;= 32){set_day++;set_day = 0;}key=0;}<br />   if(key==5){if(++set_mc &gt;= 12){set_mc++;set_mc = 0;}key=0;} <br />if(key==1)//---&gt;&gt; zapis czsu do pcf8583<br />    {<br />    TWI_write(pcf8583,0x04,dec_na_bcd(set_h)); // godziny <br />    TWI_write(pcf8583,0x03,dec_na_bcd(set_m));// minuty<br />TWI_write(pcf8583,0x02,0x00);// sekundy<br />TWI_write(pcf8583,0x05,dec_na_bcd(set_day));// dzień<br />TWI_write(pcf8583,0x06,dec_na_bcd(set_mc));// miesiąc<br />set_godz=0;set_min=0;set_day=0;set_mc=0;key=0;<br />_delay_ms(1000);<br />}<br />break;<br />//=====================================================================================<br />case 4://PROGRAMOWANIE ZEGARA STERUJĄCEGO<br />unsigned char p_menu;<br />if(key==1)<br />{<br />      for(a=0;a&lt;15;a++){ a=p_menu ;rtc_adres&#91;a&#93;}<br />}<br />key=0;<br />// nastawy załącz / wyłącz niezależnie  <br />// dla  dni roboczych oraz dni wolnych<br />if(p_menu=0){LCD_GoTo(0,0);LCD_WriteText(&quot;*SPRZET RTV ZALACZ  &gt;&quot;);}<br />if(p_menu=1){LCD_GoTo(0,0);LCD_WriteText(&quot;*SPRZET RTV WYLACZ  &gt;&quot;);}<br />if(p_menu=2){LCD_GoTo(0,0);LCD_WriteText(&quot;*MICROFALA  ZALACZ  &gt;&quot;);}<br />if(p_menu=3){LCD_GoTo(0,0);LCD_WriteText(&quot;*MICROFALA  WYLACZ  &gt;&quot;);}<br />if(p_menu=4){LCD_GoTo(0,0);LCD_WriteText(&quot;*PŁYTA KUCH ZALACZ  &gt;&quot;);}<br />if(p_menu=5){LCD_GoTo(0,0);LCD_WriteText(&quot;*PŁYTA KUCH WYLACZ  &gt;&quot;);}<br />if(p_menu=6){LCD_GoTo(0,0);LCD_WriteText(&quot;*REZERWA    WYLACZ  &gt;&quot;);}<br />if(p_menu=7){LCD_GoTo(0,0);LCD_WriteText(&quot;*REZERWA    ZALACZ  &gt;&quot;);}<br />if(p_menu=8){LCD_GoTo(0,0);LCD_WriteText(&quot; SPRZET RTV ZALACZ  &gt;&quot;);}<br />if(p_menu=9){LCD_GoTo(0,0);LCD_WriteText(&quot; SPRZET RTV WYLACZ  &gt;&quot;);}<br />if(p_menu=10){LCD_GoTo(0,0);LCD_WriteText(&quot; MICROFALA  ZALACZ  &gt;&quot;);}<br />if(p_menu=11){LCD_GoTo(0,0);LCD_WriteText(&quot; MICROFALA  WYLACZ  &gt;&quot;);}<br />if(p_menu=12){LCD_GoTo(0,0);LCD_WriteText(&quot; PŁYTA KUCH ZALACZ  &gt;&quot;);}<br />if(p_menu=13){LCD_GoTo(0,0);LCD_WriteText(&quot; PŁYTA KUCH WYLACZ  &gt;&quot;);}<br />if(p_menu=14){LCD_GoTo(0,0);LCD_WriteText(&quot; REZERWA    ZALACZ  &gt;&quot;);}<br />if(p_menu=15){LCD_GoTo(0,0);LCD_WriteText(&quot; REZERWA    WYLACZ  &gt;&quot;);}<br />LCD_GoTo(20,0);LCD_WriteText(&quot;USTAW GODZINE      &gt;&quot;);<br />// wyświetl aktualny czas nastawy godzin danego kanału<br />// LCD_GoTo(14,1);  LCD_WriteText(dtostrf(set_h,2,0,buffer_t));<br />// korekta nastawy godzin danego kanału<br />LCD_GoTo(14,1);  LCD_WriteText(dtostrf(set_h,2,0,buffer_t));<br />LCD_GoTo(0,1);LCD_WriteText(&quot;USTAW MINUTY       &gt;&quot;);<br />// wyświetl aktualny czas nastawy minut danego kanału<br />  //LCD_GoTo(17,1);  LCD_WriteText(dtostrf(set_m,2,0,buffer_t));<br />// korekta nastawy minut danego kanału<br />  LCD_GoTo(17,1);  LCD_WriteText(dtostrf(set_m,2,0,buffer_t));<br />LCD_GoTo(20,1);LCD_WriteText(&quot;ZAPIS DO PAMIECI   &gt;&quot;);<br />if(key==2){if(++set_h &gt;= 24){set_h++;set_h = 0;}key=0;}<br />   if(key==3){if(++set_m &gt;= 60){set_m++;set_m = 0;}key=0;} <br />if(key==5)//---&gt;&gt; zapis czasu do pcf8583<br />    {<br />    TWI_write(pcf8583&#91;mem_addr&#91;a&#93;},dec_na_bcd(set_h)); // godziny <br />    TWI_write(pcf8583&#91;mem_adres&#91;a+1&#93;,dec_na_bcd(set_m));// minuty<br />set_h=0;set_m=0;key=0;<br />_delay_ms(1000);<br />}<br />break;<br />}<br />}<br />}<br />//*************************************************************************************<br />//************************************ END MAIN ***************************************[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4247">margas</a> — 30 maja 2014, o 12:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-05-28T19:25:51+01:00</updated>
<published>2014-05-28T19:25:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82656#p82656</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82656#p82656"/>
<title type="html"><![CDATA[Re: ATMEGA32[C] porównanie czsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82656#p82656"><![CDATA[
Po pierwsze to dni tygodnia są zaszyte w tym zegarze. Zobacz na stronie 7 <!-- m --><a class="postlink" href="http://www.nxp.com/documents/data_sheet/PCF8583.pdf" >http://www.nxp.com/documents/data_sheet/PCF8583.pdf</a><!-- m --><br />Nie wiem dokładnie co tam robisz w innych funkcjach, ale sekundy są w rejestrze numer 2 licząc od 0 (w razie czego zmień sobie).<br />[syntax=c]sekundy = bcd_na_dec(read_pcf&#91;2&#93;);                       //sekundy<br />minuty = bcd_na_dec(read_pcf&#91;3&#93;);                       //minuty<br />godziny = bcd_na_dec(read_pcf&#91;4&#93;);                       //godziny <br />                                                                               <br />dni = bcd_na_dec(read_pcf&#91;5&#93; &amp; 0x3F);                       //dni miesiąca, bity 5-0<br />miesiace = bcd2dec(read_pcf&#91;6&#93; &amp; 0x1F);                       //miesiące bity 4-0<br />lata = (read_pcf&#91;5&#93; &amp; 0xC0) &gt;&gt; 6;                       //lata 0-3, rok 0 to rok przestępny, bity 7-6<br />        <br />dni_tyg =  (read_pcf&#91;6&#93; &amp; 0xE0) &gt;&gt; 5 ;                       //dni tygodnia, bity 7-5[/syntax]<br />Sterowanie włącz/wyłącz można zrealizować na zasadzie sprawdzania w każdej sekundzie czy nadszedł czas wykonania danej akcji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 28 maja 2014, o 19:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[margas]]></name></author>
<updated>2014-05-28T16:48:54+01:00</updated>
<published>2014-05-28T16:48:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82633#p82633</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82633#p82633"/>
<title type="html"><![CDATA[ATMEGA32[C] porównanie czsu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7221&amp;p=82633#p82633"><![CDATA[
Napisałem program w którym jednej z funkcji nie potrafię zdefiniować a dotyczy porównania czasu odczytanego z pamięci z czasem zegara systemowego.<br />Są cztery kanały realizujące funkcje załącz/ wyłącz z uwzględnieniem dni tygodnia tzn; od poniedziałku do piątku [10 nastaw czasu] i sobota-niedziela [cztery] nastaw czasu co łącznie daje 14 wartości czasu]. Ta część pracuje zgodnie z założeniami gdy czas załącz/wyłącz odroczono o np; 3 godziny gdy czas wyłączenia ustawiono na godz 20:00. Zastosowane sumowanie godzin*60+minuty przykładowo daje 2000 i teraz gdy dodać do tego 3godz*60 mamy 2300 i funkcja działa ale gdy czas wyłączenia jest 2300 + zwłoka 3*60 otrzymuje 2600 a że doba ma 2400 to wtedy ta wyliczanka po prostu się nie sprawdza i funkcja przestaje działać. Po przetestowaniu kilkunastu rozwiązań po prostu nie mam koncepcji jak to zrobić dlatego bardzo proszę o pomoc w napisaniu takiej funkcji.<br />Część kodu odczytującego czas systemowy oraz nastawy zegara sterującego;<br />[syntax=csharp]//===========================================================<br />//ODCZYT ZEGARA CZASU RZECZYWISTEGO RTC<br />//===========================================================<br />int a,tr;<br />for(a=0;a&lt;5;a++)<br />{<br />read_pcf&#91;a&#93; = TWI_read(pcf8583,rtc_adres&#91;a&#93;);<br />}<br />       time&#91;1&#93; = bcd_na_dec(read_pcf&#91;0&#93;);//sekundy<br />       time&#91;2&#93; = bcd_na_dec(read_pcf&#91;1&#93;);//minuty<br />       time&#91;3&#93; = bcd_na_dec(read_pcf&#91;2&#93;);//godziny<br />       time&#91;4&#93; = bcd_na_dec(read_pcf&#91;3&#93;);//dni<br />       time&#91;5&#93; = buffer_t&#91;4&#93;;//miesiące<br />      time&#91;6&#93; = bcd_na_dec(read_pcf&#91;4&#93; &amp; 0x1F);// ????<br />      //wyliczanie dnia tygodnia przy stałej wartości roku<br />     //jeszcze nie wiem jak zrobić to inaczej by z automatu wyliczal rok<br />      int y=2014,m,d;<br />      m=time&#91;6&#93;;d=time&#91;4&#93;;<br />      week=(d+=m&lt;3?y--:y-2,23*m/9+(d+1)+4+y/4-y/100+y/400)%7;<br />      time_dec&#91;0&#93;=(time_dec&#91;3&#93;*60)+time_dec&#91;2&#93;; //1439 = godz 23:59<br />     // wartość czasu zegara systemowego jest liczba czterocyfrowa aby było<br />     // łatwiej wykonać porównanie czasu lokalnego z nastawą zegara sterujacego<br />     time&#91;7&#93;=((time&#91;3&#93;*60)+time&#91;2&#93;);<br />//===========================================================<br />//funkcje odczytu timera sterującego<br />//===========================================================<br />for(tr=0;tr&lt;16;tr++)<br />{<br />//odczyt nastawy godzin dla 1 z n kanalow<br />time&#91;8&#93;=TWI_read(pcf8583,mem_addr&#91;tr&#93;);<br />//odczyt nastawy minut dla 1 z n kanalow<br />time&#91;9&#93;=TWI_read(pcf8583,mem_addr&#91;tr+1&#93;);<br />//sumowanie wartości godzin i minut<br />time&#91;10&#93;=time&#91;8&#93;*60+time&#91;9&#93;;<br />if(time&#91;7&#93;==time&#91;10&#93;)<br />}<br />//===========================================================<br />//funkcje porównanie czasu systemowego z nastawą czasu timera<br />//===========================================================<br />//week - dzień tygodnia<br />if((week==0)||(week==1)||(week==2)||(week==3)||(week==4))<br />{<br />//jak zrobić porównanie czasu time&#91;10&#93; do czasuzałącz/wyłącz<br />//odczytanego w pętli for i przypisać do jednego z czterech <br />//kanałów status&#91;&#93; rozróżniając czy są to dni robocze pn-pt <br /> <br />}<br />else<br />{<br />//czy wolne sob-nd.<br />}<br />//===========================================================<br />// FUNKCJE WYKONAWCZE - STEROWANIE AUTOMATYCZNE I MANUALNE PRZEKAŹNIKAMI OBWODÓW 230V<br />//==========================================================<br />  if(status&#91;1&#93;==0){PORTC |= _BV(4);}else{PORTC &amp;=~ _BV(4);status&#91;1&#93;=1;}<br />  if(status&#91;2&#93;==0){PORTC |= _BV(5);}else{PORTC &amp;=~ _BV(5);status&#91;2&#93;=1;}<br />  if(status&#91;3&#93;==0){PORTC |= _BV(6);}else{PORTC &amp;=~ _BV(6);status&#91;3&#93;=1;}<br />  if(status&#91;4&#93;==0){PORTC |= _BV(7);}else{PORTC &amp;=~ _BV(7);status&#91;4&#93;=1;}<br />//***********************************************************[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4247">margas</a> — 28 maja 2014, o 16:48</p><hr />
]]></content>
</entry>
</feed>