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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-03-21T15:04:35+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=11126&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-21T15:04:35+01:00</updated>
<published>2015-03-21T15:04:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124110#p124110</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124110#p124110"/>
<title type="html"><![CDATA[Re: Problem ze zrozumieniem unii i struktury, DS3231]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124110#p124110"><![CDATA[
<div class="quotetitle">Zombol napisał(a):</div><div class="quotecontent"><br />Nie rozumiem co robi pętla for?<br /></div><br />Tak z ciekawości tylko zapytam - kolega posiada Bluebooka ? ... pytam no bo przecież tam takie podstawy ale także i wskaźniki są wyjaśnione. Chyba że kolega ma tę książkę ale pominął te rozdziały ? czy jak ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 mar 2015, o 15:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zombol]]></name></author>
<updated>2015-03-21T14:59:47+01:00</updated>
<published>2015-03-21T14:59:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124109#p124109</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124109#p124109"/>
<title type="html"><![CDATA[Re: Problem ze zrozumieniem unii i struktury, DS3231]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124109#p124109"><![CDATA[
<div class="quotetitle">atmel napisał(a):</div><div class="quotecontent"><br />[syntax=c]send_digit(datetime.hh / 10);[/syntax]<br /><br />Operator &quot;strzałki&quot; można stosować w przypadku wskaźników na obiekt, a dla statycznych obiektów jest to operator &quot;kropki&quot;.<br /></div><br /><br />Faktycznie, ten kod działa. <br />Wydaje mi się, że próbowałem czegoś takiego i Eclipse wywalał błąd. Może zrobiłem literówkę, albo coś.<br />Skoro kod już mi działa, to chciałbym wiedzieć dlaczego. Co to tak właściwie jest to dt, które tak usilnie wykorzystywałem? Wydaje mi się, że jest to wskaźnik. Wnioskuję po gwiazdce przed nazwą. Nie za bardzo rozumiem po co on i jak to ma działać.<br />Np taka funkcja:<br />[syntax=c]void ds3231_get_datatime (TDATETIME * dt)<br />{<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 />}[/syntax]<br /><br />Nie rozumiem co robi pętla for? Wskaźnik dt przechowuje informację o adresie komórki aktualnie pobranej i za jego pomocą zapisujemy dane do kolejnego elementu tablicy? <br /><br />Prosiłbym o &quot;łopatologiczne&quot;  wyjaśnienie, bo temat jest ciekawy i na pewno w niego w przyszłości skorzystam <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=6251">Zombol</a> — 21 mar 2015, o 14:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2015-03-21T13:54:19+01:00</updated>
<published>2015-03-21T13:54:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124103#p124103</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124103#p124103"/>
<title type="html"><![CDATA[Re: Problem ze zrozumieniem unii i struktury, DS3231]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124103#p124103"><![CDATA[
[syntax=c]send_digit(datetime.hh / 10);[/syntax]<br /><br />Operator &quot;strzałki&quot; można stosować w przypadku wskaźników na obiekt, a dla statycznych obiektów jest to operator &quot;kropki&quot;.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 21 mar 2015, o 13:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-03-21T13:42:59+01:00</updated>
<published>2015-03-21T13:42:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124100#p124100</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124100#p124100"/>
<title type="html"><![CDATA[Re: Problem ze zrozumieniem unii i struktury, DS3231]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124100#p124100"><![CDATA[
<div class="quotetitle">Zombol napisał(a):</div><div class="quotecontent"><br />../main.c:102:15: error: 'dt' undeclared<br /></div><br />No przecież masz jak byk napisane i to jeszcze nawet numer linii w której masz błąd<br /><br />dt<br /><br />co to jest ? widzisz gdzieś zmienną o takiej nazwie, którą przekazujesz do teh funkcji w linii 102 ?<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />send_digit(<strong><span style="color: #FF0000">dt</span></strong>.hh /10);<br /></div><br /><br />poszukaj sam i pokaż gdzie masz w kodzie definicję tej zmiennej ok?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 mar 2015, o 13:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zombol]]></name></author>
<updated>2015-03-21T13:22:45+01:00</updated>
<published>2015-03-21T13:22:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124099#p124099</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124099#p124099"/>
<title type="html"><![CDATA[Re: Problem ze zrozumieniem unii i struktury, DS3231]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124099#p124099"><![CDATA[
Kod j23 nie działa. Załączam kod całego programu. To chyba dozwolone, bo Pan Mirek go udostępnił pod filmikiem o DS3231. Jeśli nie może być, to niech mod go wywal <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 10-03-2015<br /> *      Author: Dawid1<br /> */<br /><br /><br />#include&lt;avr/io.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/delay.h&gt;<br />#include&quot;led_mux.h&quot;<br />#include &quot;i2c_twi.h&quot;<br />#include &quot;lcd.h&quot;<br /><br />#define DS3231_ADDR 0xD0<br /><br />#define EEMEM __attribute__((section(&quot;.eeprom&quot;)))<br /><br /><br /><br />void DS3231_init(void);<br />uint8_t dec2bcd(uint8_t dec);<br />uint8_t bcd2dec (uint8_t bcd);<br /><br />//unia i struktura do przechowywania czasu i daty odczytanych z zegara<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 />TDATETIME datetime;<br /><br />//struktura do przechowywania temperatury odczytanej z czujnika<br />typedef struct<br />{<br />int8_t cel;<br />uint8_t fract;<br />} TTEMP;<br /><br />TTEMP temperature;<br /><br />//tablica zmiennych do przechowywania nazw dni tygodnia<br />char days&#91;7&#93;&#91;4&#93; =<br />{<br />&quot;pon&quot;, &quot;wto&quot;, &quot;sro&quot;, &quot;czw&quot;, &quot;pia&quot;, &quot;sob&quot;, &quot;nie&quot;<br />};<br /><br /><br />void DS3231_init( void );<br />uint8_t dec2bcd(uint8_t dec);<br />uint8_t bcd2dec(uint8_t bcd);<br />void DS3231_get_datetime( TDATETIME * dt );<br />void show_time( TDATETIME * dt );<br />void show_date( TDATETIME * dt );<br />void DS3231_set_time( uint8_t hh, uint8_t mm, uint8_t ss );<br />void DS3231_set_date( uint8_t year, uint8_t month, uint8_t day, uint8_t dayofweek );<br />void DS3231_get_temp( TTEMP * tmp );<br />void show_temperature( TTEMP * tmp );<br /><br /><br /><br />#define LED_PIN (1&lt;&lt;PB1)//def pinu diody LED<br />#define LED_ON PORTD &amp;= ~LED_PIN//makrodefinicja- zalaczenie diody<br /><br />uint8_t stc&#91;&#93; = {12,18,18,12,32,32,32,32};<br /><br />uint8_t g1, g2, m1, m2;//zmienne do przechowywania cyfr godziny i minuty<br /><br /><br />int main(void)<br />{<br /><br />i2cSetBitrate(100);//ustawienie predkosci transmisji i2c<br />DS3231_init();<br />//DS3231_set_time(16,16,00);<br />//DS3231_set_date(14, 3, 13, 5);<br /><br />//DDRB |= LED_PIN;<br />    led_init();<br />    clear_dsp();<br />    cursor_off();<br />    sei();<br /><br /><br />while(1) {<br /><br /><br /><br />DS3231_get_datetime( &amp;datetime );<br /><br />send_digit(dt.hh /10);<br /><br /><br /><br /><br />//lcd_locate(0,0);<br />//show_date( &amp;datetime );<br /><br />//lcd_locate(1,0);<br />//show_time( &amp;datetime );<br /><br /><br />}//koniec while<br /><br />}//koniec main/////////////////////////////////////////////////////<br /><br /><br />//inicjalizacja modulu RTC<br />void DS3231_init(void)<br />{<br />uint8_t ctrl =0;<br />TWI_write_buf(DS3231_ADDR, 0x0E, 1, &amp;ctrl);<br />}<br /><br />//kowersja liczby dziesietnej na bcd<br />uint8_t dec2bcd(uint8_t dec)<br />{<br />return ( (dec/10) &lt;&lt;4 )  | (dec % 10) ;<br />}<br /><br />//konwersja liczby bcd na dziesietna<br />uint8_t bcd2dec (uint8_t bcd)<br />{<br />return ( (  (  ( bcd) &gt;&gt;4 ) &amp; 0x0F ) *10) + ( (bcd) &amp; 0x0F) ;<br />}<br /><br />//funkcja do pobierania czasu i daty z zegara<br />void ds3231_get_datatime (TDATETIME * dt)<br />{<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 /><br />//funkcja do wyswietlania czasu i daty na wyswietlaczu lcd<br />void show_time( TDATETIME * dt ) {<br />if( dt-&gt;hh &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;hh);<br />lcd_str(&quot;:&quot;);<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 />//funkcja do wyswietlania daty poranej z zegar<br />void show_date( TDATETIME * dt ) {<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( dt-&gt;month &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;month);<br />lcd_str(&quot;-&quot;);<br />if( dt-&gt;day &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;day);<br />lcd_str(&quot;  &quot;);<br />lcd_str( days&#91; dt-&gt;dayofwek - 1 &#93; );<br />}<br /><br />void DS3231_get_datetime( 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 DS3231_set_time( uint8_t hh, uint8_t mm, uint8_t ss ) {<br />uint8_t buf&#91;3&#93;;<br />buf&#91;0&#93;=dec2bcd(ss);<br />buf&#91;1&#93;=dec2bcd(mm);<br />buf&#91;2&#93;=dec2bcd(hh);<br />TWI_write_buf( DS3231_ADDR, 0x00, 3, buf );<br />}<br /><br />void DS3231_set_date( uint8_t year, uint8_t month, uint8_t day, uint8_t dayofweek ) {<br />uint8_t buf&#91;4&#93;;<br />buf&#91;0&#93;=dayofweek;<br />buf&#91;1&#93;=dec2bcd(day);<br />buf&#91;2&#93;=dec2bcd(month);<br />buf&#91;3&#93;=dec2bcd(year);<br />TWI_write_buf( DS3231_ADDR, 0x03, 4, buf );<br />}<br /><br /><br />void DS3231_get_temp( TTEMP * tmp ) {<br />uint8_t buf&#91;2&#93;;<br />TWI_read_buf( DS3231_ADDR, 0x11, 2, buf );<br />tmp-&gt;cel = buf&#91;0&#93; ;<br />tmp-&gt;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 />}<br /><br /><br />void show_temperature( TTEMP * tmp ) {<br />uint8_t fr&#91;4&#93; = {0,2,5,7};<br /><br />if( tmp-&gt;cel &lt; 100 ) lcd_str(&quot; &quot;);<br />if( tmp-&gt;cel &lt; 10 ) lcd_str(&quot; &quot;);<br /><br />lcd_int(tmp-&gt;cel);<br />lcd_str(&quot;.&quot;);<br />if( tmp-&gt;cel &gt;= 0 ) lcd_int( fr&#91; tmp-&gt;fract &#93; );<br />else lcd_int( fr&#91; 3 - tmp-&gt;fract &#93; );<br /><br />lcd_str(&quot;\x80&quot;&quot;C&quot;);<br />}[/syntax]<br /><br />Eclipse wyrzuca takie oto błędy:<br /><br />**** Build of configuration Release for project RTC ****<br /><br />make all <br />Building file: ../main.c<br />Invoking: AVR Compiler<br />avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega8 -DF_CPU=8000000UL -MMD -MP -MF&quot;main.d&quot; -MT&quot;main.d&quot; -c -o &quot;main.o&quot; &quot;../main.c&quot;<br />../main.c: In function 'main':<br />../main.c:102:15: error: 'dt' undeclared (first use in this function)<br />../main.c:102:15: note: each undeclared identifier is reported only once for each function it appears in<br />make: *** [main.o] Błąd 1<br /><br />**** Build Finished ****<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6251">Zombol</a> — 21 mar 2015, o 13:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[j23]]></name></author>
<updated>2015-03-21T12:47:50+01:00</updated>
<published>2015-03-21T12:47:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124096#p124096</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124096#p124096"/>
<title type="html"><![CDATA[Re: Problem ze zrozumieniem unii i struktury, DS3231]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124096#p124096"><![CDATA[
<div class="quotetitle">Zombol napisał(a):</div><div class="quotecontent"><br />(...)<br />[syntax=c]send_digit(dt -&gt; hh / 10);[/syntax]<br /><br />Chodzi mi o wyciągnięcie cyfry z unii bądź struktury i podzielenie jej przez 10 w celu uzyskania liczby dziesiątek, a potem modulo i otrzymaniu jedności. <br />Co robię źle? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br />Odwołujesz się do pola struktury jak do obiektu klasy. C to nie jest C++.<br /><br />Chyba powinno być tak:<br />[syntax=c]send_digit(dt.hh / 10);[/syntax]<br /><br />Pozdrawiam! j23<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4504">j23</a> — 21 mar 2015, o 12:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zombol]]></name></author>
<updated>2015-03-21T10:32:04+01:00</updated>
<published>2015-03-21T10:32:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124084#p124084</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124084#p124084"/>
<title type="html"><![CDATA[Problem ze zrozumieniem unii i struktury, DS3231]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11126&amp;p=124084#p124084"><![CDATA[
Próbuję zrozumieć jak działa odczyt i zapis danych z układu DS3231. Pan Mirek w swoim poradniku zaproponował stworzenie unii i struktury, do których wpisuje się dane. Teoretycznie wiem jak to działa. Z praktyką jest gorzej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Próbuję przerobić program na wyświetlanie godzin i minut na wyświetlaczu  7-segmentowym i nie umiem przeskoczyć podziału cyfry. Próbowałem czegoś takiego <br />[syntax=c]send_digit(dt -&gt; hh / 10);[/syntax]<br /><br />Chodzi mi o wyciągnięcie cyfry z unii bądź struktury i podzielenie jej przez 10 w celu uzyskania liczby dziesiątek, a potem modulo i otrzymaniu jedności. <br />Co robię źle? <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=6251">Zombol</a> — 21 mar 2015, o 10:32</p><hr />
]]></content>
</entry>
</feed>