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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8909&amp;mode</id>
<entry>
<author><name><![CDATA[doman89]]></name></author>
<updated>2014-10-22T21:00:45+01:00</updated>
<published>2014-10-22T21:00:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100238#p100238</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100238#p100238"/>
<title type="html"><![CDATA[Re: DS3231- błędny zapis czasu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100238#p100238"><![CDATA[
<div class="quotetitle">Rafał555 napisał(a):</div><div class="quotecontent"><br />, ale nie myślałem, że nad takim trywialnym błędzie się powiesze (jak zawsze z resztą)<br /></div><br /><br />Kolega myślisz, że mam inaczej? <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Te najprostsze, najmniej sprawdzamy bo jesteśmy zawszę na 100% pewni - a tak się tylko nam zdaje. <br /><br /><div class="quotetitle">Rafał555 napisał(a):</div><div class="quotecontent"><br />Siedziałem nad tym kilka godzin.<br /></div><br /><br />Po to jest to nasze wspaniałe forum <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Po co się męczyć samemu jak można w teamie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><span style="color: #0000ff">z Niebieskim pozdRowieniem,<br />Doman89</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3271">doman89</a> — 22 paź 2014, o 21:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafał555]]></name></author>
<updated>2014-10-22T21:01:28+01:00</updated>
<published>2014-10-22T20:53:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100236#p100236</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100236#p100236"/>
<title type="html"><![CDATA[Re: DS3231- błędny zapis czasu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100236#p100236"><![CDATA[
Heh <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. Siedziałem nad tym kilka godzin. Wiedziałem, że funkcja do zapisu ma być taka jakby odwrotna, ale nie myślałem, że nad takim trywialnym błędzie się powiesze (jak zawsze z resztą). Jeszcze nie sprawdzałem, ale to musi być to. Zaraz przeklepię to.<br /><br /><br /> Gra i buczy  <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> . Coś przy kopiuj-wklej pomieszałem, bo te nawiasy to jakoś dziwnie były postawione. <br />   Dzięki serdeczne.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2697">Rafał555</a> — 22 paź 2014, o 20:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[doman89]]></name></author>
<updated>2014-10-22T20:23:37+01:00</updated>
<published>2014-10-22T20:23:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100231#p100231</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100231#p100231"/>
<title type="html"><![CDATA[Re: DS3231- błędny zapis czasu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100231#p100231"><![CDATA[
<div class="quotetitle">Rafał555 napisał(a):</div><div class="quotecontent"><br />W zasadzie to trochę dziwne jak ustawiam godzinę powyżej 15 to cofa ją dokładnie o 6.<br /></div><br /><br />Kolega coś masz z konwersją danych, bo 16 (dec) - 0001 0000 to binarnie to samo co 10 (bcd) - 0001 0000. Może dokonujesz gdzieś podwójnej konwersji, albo jednak błąd w funkcjach bcd/dec.<br /><br /><span style="color: #0000FF">z Niebieskim pozdRowieniem,<br />Doman89</span><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Kurczę kolega tu jest pies pogrzebany <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />[syntax=c]dec2bcd(buf&#91;i&#93; = dt-&gt;bytes&#91;i&#93;  );[/syntax]<br /><br />Człowiek nie dospany chodzi :/ i nie widzi takich logicznych błędów. Daj takie coś:<br /><br />[syntax=c]buf&#91;i&#93; = dec2bcd( dt-&gt;bytes&#91;i&#93;  );[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3271">doman89</a> — 22 paź 2014, o 20:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafał555]]></name></author>
<updated>2014-10-22T18:36:04+01:00</updated>
<published>2014-10-22T18:36:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100184#p100184</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100184#p100184"/>
<title type="html"><![CDATA[Re: DS3231- błędny zapis czasu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100184#p100184"><![CDATA[
Przy odczycie bcd2dec. Przy zapisie dec2bcd. Tak, dokładna kopia.<br /> Jeszcze spróbowałem ręcznie wpisać dane do struktury ze zmiennymi reprezentującymi godzinę i minuty i po wczytaniu ten sam błąd. Ale wyczaiłem, że minuty zaniża o 12, a godziny jak pisałem o 6.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2697">Rafał555</a> — 22 paź 2014, o 18:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[doman89]]></name></author>
<updated>2014-10-22T18:25:42+01:00</updated>
<published>2014-10-22T18:25:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100182#p100182</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100182#p100182"/>
<title type="html"><![CDATA[Re: DS3231- błędny zapis czasu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100182#p100182"><![CDATA[
Witam,<br /><br />Kolega a przy odczycie godziny z układu RTC też dajesz bcd2dec? Czy może przy wyświetlaniu?<br />Może źle napisane są funkcje bcd2dec i dec2bcd? Choć celuję, że skopiowane z płyty.<br /><br /><span style="color: #0000FF">z Niebieskim pozdRowieniem,<br />Doman89</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3271">doman89</a> — 22 paź 2014, o 18:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafał555]]></name></author>
<updated>2014-10-22T18:45:59+01:00</updated>
<published>2014-10-22T18:10:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100173#p100173</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100173#p100173"/>
<title type="html"><![CDATA[DS3231- błędny zapis czasu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8909&amp;p=100173#p100173"><![CDATA[
Witam. Zacząłem pisać menu do ustawiania zegara DS3231. Obsługa odbywa się pilotem IR. W czasie ustawiania wszystko ładnie działa, ale w chwili zapisu nagle godziny i minuty się zmieniają. W zasadzie to trochę dziwne jak ustawiam godzinę powyżej 15 to cofa ją dokładnie o 6. Minuty w cały świat. Będę miał problem z wrzuceniem całego kodu, bo to projekt w miarę duży i w zasadzie żywcem złożony z kodów z Bluebooka. Ale na początek funkcja zapisu do RTC, może tu tkwi błąd:<br /><br />[syntax=c]void zegarek_zapis (TDATETIME *dt){<br />    uint8_t i;<br />uint8_t buf&#91;7&#93;;<br />for (i = 0; i&lt;7; i++) dec2bcd(buf&#91;i&#93; = dt-&gt;bytes&#91;i&#93;  );<br />//buf&#91;0&#93;=0; //zerowanie sekund<br />       TWI_write_buf( DS3231_ADDR, 0x00, 7, buf);[/syntax]<br /><br />Dorzucę jeszcze plik main:<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 /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;SPI/spi_led.h&quot;<br />#include &quot;POMIAR/pomiar.h&quot;<br />#include &quot;ZEGAREK/zegarek.h&quot;<br />//#include &quot;klawisze.h&quot;<br />#include &quot;IR_DECODE/ir_decode.h&quot;<br /><br /><br /><br />int main(void){<br /><br />DDRC |= (1&lt;&lt;PC3);       //pin Buzzera jako wyjscie<br />DDRA |= (1&lt;&lt;PA7);<br />PORTA |= (1&lt;&lt;PA7);   // podswietlenie LCD<br /><br /><br />    PORTC |= (1&lt;&lt;PC7);<br /><br />    //uint8_t zeg_flag=1;<br />    void ir_zero_bip(void);<br />    void menu_1(TDATETIME *dt);<br /><br /><br /><br />    lcd_init();             //inicjalizacja LCD<br />    ir_init();<br />lcd_locate(0,3);<br />    lcd_str(&quot;STEROWNIK&quot;);<br />    lcd_locate(1,5);<br />    lcd_str(&quot;RAMAJA&quot;);<br />    _delay_ms(1500);<br />    lcd_cls();<br /><br />InitSpi();<br />SendSpi(0,0);<br /><br /><br />zegarek_init();<br /><br />sei();<br />while(1){<br /><br /><br /><br />if (int0_flag)   {<br />               ds_get_temp(&amp;temperature);<br /><br />               if (!ust_dataczas)         //jak ustawiam zegar i datę to wyłącz odczyt z DSa.<br />       zegarek_odczyt(&amp;datetime);<br /><br />                  pomiar();<br />          //if(zeg_flag)       //jeżeli nie jest wywietlane co innego to pokaż godzinę i datę<br />          //{<br /><br />           lcd_locate(0,0);<br />           zegarek_show(&amp;datetime);<br />           lcd_locate(1,0);<br />                   data_show(&amp;datetime);<br /><br />                   lcd_locate(0,11);<br />                   lcd_int(datetime.hh);<br />                   lcd_str(&quot; &quot;);<br />IR_ZEROWANIE();   //dodatkowe zerowanie flagi pilota co 1s, aby przypadkowy klawisz nie zablokował działania<br /><br /><br /><br />                            // }<br /><br />           int0_flag=0;          //kasowanie flag<br />}<br /><br />      menu_1(&amp;datetime);<br /><br />}}<br /><br /><br />void ir_zero_bip(void){TimerBuz=5;<br />      IR_ZEROWANIE();}<br /><br /><br />void menu_1(TDATETIME *dt){<br />  if ((command == enter) &amp;&amp; (!(ust_dataczas))) {<br />  ust_dataczas = 1; ust_flag=godzina; ir_zero_bip(); }<br />  if ((command == enter) &amp;&amp; (ust_dataczas)) {<br />  ir_zero_bip(); ust_flag=0;<br />  zegarek_zapis(&amp;datetime);                //wyjscie z ustawień i zapis do ds3231<br />        ust_dataczas = 0;<br />  }<br /><br />//<br />  if ((command == prawo) &amp;&amp; ust_dataczas) { ir_zero_bip();<br />  if (++ust_flag&gt;dzien_tyg) ust_flag--;<br /><br />  }<br />  if ((command == lewo) &amp;&amp; ust_dataczas) { ir_zero_bip();<br />  if (--ust_flag==0) ust_flag++;<br /><br />  }<br /><br /><br /><br /><br />if (ust_dataczas){<br />if (ust_flag==godzina){<br />  if (command==gora )  {ir_zero_bip(); if(++dt-&gt;hh &gt; 23) dt-&gt;hh=0;  }<br />  if (command==dol  )  {ir_zero_bip(); if(--dt-&gt;hh==255) dt-&gt;hh=23;  }<br />}<br />    if (ust_flag==minuta){<br />  if (command==gora) {ir_zero_bip(); if(++dt-&gt;mm &gt; 59) dt-&gt;mm=0; }<br /><br />    }<br />}}[/syntax]<br /><br />zegarek.c<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />#include &quot;../I2C_TWI/i2c_twi.h&quot;<br />#include &quot;../LCD/lcd44780.h&quot;<br />#include &quot;zegarek.h&quot;<br />#include &quot;../POMIAR/pomiar.h&quot;<br />#include &quot;../IR_DECODE/ir_decode.h&quot;<br /><br />#define DS3231_ADDR 0xD0<br /><br /><br /><br /><br />uint8_t ust_dataczas;<br />uint8_t ust_flag;<br /><br />TDATETIME datetime;<br />TTEMP temperature;<br /><br /><br />     char tablica_dni&#91;7&#93;&#91;7&#93;={&quot;ponie &quot;,&quot;wtorek&quot;,&quot;sroda &quot;,&quot;czwart&quot;,&quot;piatek&quot;,&quot;sobota&quot;,&quot;niedz &quot;};<br /><br />  void zegarek_init(void){<br />      // Przerwanie INT0  dla zegarka<br />                    PORTD |= (1&lt;&lt;PD2);// podciągnięcie pinu INT0 do VCC<br />      EICRA |= (1&lt;&lt;ISC01) | (1&lt;&lt;ISC00);// wyzwalanie zboczem narastającym (dla INT0)<br />      EIMSK |= (1&lt;&lt;INT0);// odblokowanie przerwania<br /><br /><br />      i2cSetBitrate( 300 ); // USTAWIAMY prędkość 100 kHz na magistrali I2C<br /><br /><br />      uint8_t ctrl = 0;<br />      TWI_write_buf( DS3231_ADDR, 0x0e, 1, &amp;ctrl);<br /><br /><br />      }<br /><br />  void zegarek_odczyt (TDATETIME *dt){<br />uint8_t i;<br />uint8_t buf&#91;7&#93;;<br />TWI_read_buf( DS3231_ADDR, 0x00, 7, buf);<br />for (i = 0; i&lt;7; i++) dt-&gt;bytes&#91;i&#93; = bcd2dec(buf&#91;i&#93;);<br />}<br /><br />  void zegarek_zapis (TDATETIME *dt){<br />    uint8_t i;<br />uint8_t buf&#91;7&#93;;<br />for (i = 0; i&lt;7; i++) dec2bcd(buf&#91;i&#93; = dt-&gt;bytes&#91;i&#93;  );<br />//buf&#91;0&#93;=0; //zerowanie sekund<br />       TWI_write_buf( DS3231_ADDR, 0x00, 7, buf);<br />}<br /><br /> void zegarek_show (TDATETIME *dt){<br />      if (ust_dataczas &amp;&amp; miganie &amp;&amp; (ust_flag==godzina)){    //miganie edytowanej wartosci<br />      lcd_str(&quot;  &quot;);<br />      }<br />      else{<br /> if (dt-&gt;hh &lt; 10) lcd_str(&quot;0&quot;);<br /> lcd_int(dt-&gt;hh);}<br /><br />lcd_str(&quot;:&quot;);<br />if (ust_dataczas &amp;&amp; miganie &amp;&amp; (ust_flag == minuta)) lcd_str(&quot;  &quot;);<br />else{<br />if (dt-&gt;mm &lt; 10) lcd_str(&quot;0&quot;);<br />lcd_int (dt-&gt;mm);}<br />lcd_str (&quot;:&quot;);<br />if (dt-&gt;ss &lt; 10) lcd_str (&quot;0&quot;);<br />lcd_int(dt-&gt;ss);<br /> }<br /><br />void data_show (TDATETIME *dt){<br />if (ust_dataczas &amp;&amp; miganie &amp;&amp; (ust_flag == rok)) lcd_str(&quot;    &quot;);<br />else{<br />lcd_str (&quot;20&quot;);<br />if (dt-&gt;year&lt;10) lcd_str (&quot;0&quot;);<br />    lcd_int (dt-&gt;year);}<br />lcd_str (&quot;-&quot;);<br />if (ust_dataczas &amp;&amp; miganie &amp;&amp; (ust_flag == miesiac)) lcd_str(&quot;  &quot;);<br />else{<br />    if (dt-&gt;month&lt;10) lcd_str (&quot;0&quot;);<br />    lcd_int (dt-&gt;month);}<br />    lcd_str (&quot;-&quot;);<br /> if (ust_dataczas &amp;&amp; miganie &amp;&amp; (ust_flag == dzien)) lcd_str(&quot;  &quot;);<br />    else{<br />    if (dt-&gt;day&lt;10) lcd_str (&quot;0&quot;);<br />lcd_int (dt-&gt;day);}<br />lcd_str (&quot; &quot;);<br />if (ust_dataczas &amp;&amp; miganie &amp;&amp; (ust_flag == dzien_tyg)) lcd_str(&quot;     &quot;);<br />else{<br />lcd_str (tablica_dni&#91;dt-&gt;dayofwek-1&#93;);}<br />}<br /><br />void ds_get_temp(TTEMP * tmp){<br />uint8_t buf&#91;2&#93;;<br />TWI_read_buf(DS3231_ADDR,0x11,2,buf);<br />tmp-&gt;ds_cel = buf&#91;0&#93;;<br />tmp-&gt;ds_fract = buf&#91;1&#93;&gt;&gt;6;<br /><br />TWI_read_buf(DS3231_ADDR,0x0e,1,buf);<br />buf&#91;0&#93; |= (1&lt;&lt;5);<br />TWI_write_buf(DS3231_ADDR,0x0e,1,buf);<br />}[/syntax]<br /><br />zegarek.h<br /><br />[syntax=c]#ifndef ZEGAREK_H_<br />#define ZEGAREK_H_<br /><br /><br /><br />extern uint8_t ust_dataczas;<br />enum {godzina=1,minuta,rok,miesiac,dzien,dzien_tyg};<br />extern uint8_t ust_flag;<br /><br />typedef union{<br />uint8_t bytes&#91;7&#93;;<br />struct{<br />uint8_t ss;<br />uint8_t mm;<br />uint8_t hh;<br />uint8_t dayofwek;<br />uint8_t day;<br />uint8_t month;<br />uint8_t year;<br />};<br />}TDATETIME;<br /><br />typedef struct{<br />int8_t ds_cel;<br />uint8_t ds_fract;<br />}TTEMP;<br /><br />extern TDATETIME datetime;<br />extern TTEMP temperature;<br /><br />void zegarek_init(void);<br />void zegarek_odczyt (TDATETIME * dt);<br />void zegarek_show (TDATETIME * dt);<br />void data_show (TDATETIME * dt);<br />void ds_get_temp(TTEMP * tmp);<br />void zegarek_zapis (TDATETIME * dt);<br /><br /><br />#endif /* ZEGAREK_H_ */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2697">Rafał555</a> — 22 paź 2014, o 18:10</p><hr />
]]></content>
</entry>
</feed>