<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=58&amp;t=17196&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-01-01T21:53:38+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=17196&amp;mode</id>
<entry>
<author><name><![CDATA[fobos]]></name></author>
<updated>2017-01-01T21:53:38+01:00</updated>
<published>2017-01-01T21:53:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178783#p178783</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178783#p178783"/>
<title type="html"><![CDATA[Re: BB programowa implementacja  I2C  4.10.2 funkcja i2cGetb]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178783#p178783"><![CDATA[
OK dotarło dopiero teraz, Daro69 mogłeś mi dać drugiego psztyczka nie dałeś oberwałem od Mirka - ale tak poważnie rozumiem, że takie pisanie jak to moje wcześniejsze to o kant i nikt nie zechce pomóc jak się ma taki bałagan.<br /><br />Następnym razem już tak nie zrobię.<br />Dzięki za lekcje.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7548">fobos</a> — 1 sty 2017, o 21:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-01-01T20:56:41+01:00</updated>
<published>2017-01-01T20:56:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178776#p178776</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178776#p178776"/>
<title type="html"><![CDATA[Re: BB programowa implementacja  I2C  4.10.2 funkcja i2cGetb]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178776#p178776"><![CDATA[
<div class="quotetitle">fobos napisał(a):</div><div class="quotecontent"><br />Daro69 no pięknie, że za mnie to przepisałeś<br /></div><br /><span style="color: #FF0000">Tu nie chodzi o przepisywanie, panie kolego - zajrzyj, że proszę do tej instrukcji: <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7402.html" >topic7402.html</a><!-- l --><br />i w ten sposób wstawiaj kody źródłowe na forum zamiast kolorować je na niebiesko ok?</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 1 sty 2017, o 20:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fobos]]></name></author>
<updated>2017-01-01T13:13:54+01:00</updated>
<published>2017-01-01T13:13:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178747#p178747</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178747#p178747"/>
<title type="html"><![CDATA[Re: BB programowa implementacja  I2C  4.10.2 funkcja i2cGetb]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178747#p178747"><![CDATA[
Daro69 no pięknie, że za mnie to przepisałeś wielkie dzięki właśnie chciałem poprawiać, bo przecież to ja Was proszę o korektę moich przemyśleń chodzi o to czy poprawnie to zrozumiałem.<br /><br />Często jak już myślę, że zrozumiałem jakiś fragment kodu to po jakimś czasie okazuje się, że zrozumiem prawie dobrze a czasami niedobrze.<br />Jak jest niedobrze to brnę tak długo aż znowu robi się dobrze bo dostrzegam gdzie było niedobrze.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7548">fobos</a> — 1 sty 2017, o 13:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2017-01-01T02:50:50+01:00</updated>
<published>2017-01-01T02:50:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178738#p178738</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178738#p178738"/>
<title type="html"><![CDATA[Re: BB programowa implementacja  I2C  4.10.2 funkcja i2cGetb]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178738#p178738"><![CDATA[
Witam,<br />to raczej chodzi o taki sposób wstawiania kodu.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  syntax C .<br />[syntax=c]u08 i2cGetbyte(uint8_t ack) {<br />u08 i;<br />u08 c,b = 0;<br /><br />I2C_SDL_HI;<br />/*Master ustaw 1(HI) na PC1 (SDA-MASTER) uwaga to nie znaczy, że linia SDA będzie cały czas HI, stan <br />jest podawany przez rezystor wewnętrzny w procesorze, jeżeli SLAVE ustawi 0 to taki stan będzie panował na linii SDA*/<br /><br />DDR(SDAPORT) &amp;= ~(1&lt;&lt;SDA); <br />/*DDRC PIN1 na 0 (PC1=SDA-MASTER) PC1 wejście &quot;PC1 czyta stan linii SDA&quot;*/<br /><br />for(i=8;i&gt;0;i--) {/*zmienna i odlicza bity dla odbieranego bajtu*/<br /><br />HDEL;<br />I2C_SCL_HI;<br />/*ustaw linię SCL 1 HI -już można czytać stan linii SDA*/<br /><br />c = PIN(SDAPORT) &amp; (1&lt;&lt;SDA); <br />/*PC1 czyta bit z linii SDA (0b xxxx xx 0/1 x) maska &quot;zeruje wszystkie bity prócz bitu 1&quot; inaczej mówiąc co przeczyta<br />PC1 to zapamięta zmienna c (0b 0000 00 0/1 0) 0/1 oczywiście wartość &quot;zapamiętana&quot; przez c zależy od stanu linii SDA*/<br /><br />b &lt;&lt;= 1; <br />/*przesuń o 1 bit w lewo, zmienna b będzie w pętli for x8 przesuwana w lewo i jednocześnie będzie pamiętała wartość kolejnych &quot;czytanych z linii SDA (PC1) bitów, */<br /><br />if(c) b |= 1; <br />/*jeżeli wyrażenie P(1) to b=1 , jeżeli wyrażenie F(0) to b=0 uwaga b już było równe 0 linia wyżej i dlatego ten if nie musi w np else b=0 */<br /><br />HDEL;<br /><br />I2C_SCL_LO;<br />/*ustaw linię SCL 0 LO koniec czytania linii SDA*/<br /><br />/*pętla for(i=8;i&gt;0;i--) przewija się 8 razy i czyta kolejne bity na linii SDA zmienna b je zapamiętuje dzięki przesuwaniu w lewo o 1 w każdym cyklu */<br />}<br /><br />DDR(SDAPORT) |= (1&lt;&lt;SDA); <br />/*DDRC PIN1 na 1, PC1 wyjście (PC1=SDA MASTER) będzie można wygenerować ACK/NACK do układu SLAVE*/<br /><br /><br />if (ack) I2C_SDL_LO;<br />/*wyślij ACK (ack=1) ustaw na linii SDL LO czyli wyślij na SDA ACK*/<br /><br />else I2C_SDL_HI;<br />/*wyślij NA (nack=0) ustaw na linii SDL HI czyli wyślij na SDA NACK*/<br /><br />I2C_SCL_TOGGLE;<br />/*HDEL; PORTC |= (1&lt;&lt;PC0); HDEL; PORTC &amp;= ~(1&lt;&lt;PC0); generuj impulsy zegara linia SCL*/<br /><br />I2C_SDL_HI;<br />/*(SDA-MASTER) ustaw 1(HI)*/<br /><br />return b;<br />/*funkcja zwraca odczytany z linii SDA bajt */<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 1 sty 2017, o 02:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fobos]]></name></author>
<updated>2017-01-01T02:17:47+01:00</updated>
<published>2017-01-01T02:17:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178737#p178737</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178737#p178737"/>
<title type="html"><![CDATA[Re: BB programowa implementacja  I2C  4.10.2 funkcja i2cGetb]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178737#p178737"><![CDATA[
43kuku<br />masz rację wyglądało strasznie, poprawiłem mam nadzieję, że teraz jest trochę lepiej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7548">fobos</a> — 1 sty 2017, o 02:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[43kuku]]></name></author>
<updated>2017-01-01T01:22:23+01:00</updated>
<published>2017-01-01T01:22:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178734#p178734</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178734#p178734"/>
<title type="html"><![CDATA[Re: BB programowa implementacja  I2C  4.10.2 funkcja i2cGetb]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178734#p178734"><![CDATA[
Popraw kod, bo źle sie go analizuje w takiej formie.<br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7402.html" >topic7402.html</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3190">43kuku</a> — 1 sty 2017, o 01:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fobos]]></name></author>
<updated>2017-01-01T21:46:05+01:00</updated>
<published>2016-12-31T23:41:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178731#p178731</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178731#p178731"/>
<title type="html"><![CDATA[BB programowa implementacja  I2C  4.10.2 funkcja i2cGetbyte]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17196&amp;p=178731#p178731"><![CDATA[
BB programowa implementacja  I2C  4.10.2 funkcja i2cGetbyte  odebranie 1 bajtu,  prośba do Was o korektę moich przemyśleń dotyczących tej funkcji - nie mam pewności czy poprawnie zrozumiałem kod funkcji jak to zwykle bywa u początkujących pewnie są tu błędy.  <br /><br />Na wstępie dla tych co podobnie jak ja próbują opanować nieco protokół i zasady dotyczące I2C, polecam opis (plik w załączniku opis_I2C)  jaki za zgodą autora Pana Pawła Rochumskiego (<!-- e --><a href="mailto:paweluss@poczta.fm">paweluss@poczta.fm</a><!-- e -->  <!-- m --><a class="postlink" href="http://www.paweluss.prv.pl" >http://www.paweluss.prv.pl</a><!-- m --> )  zamieszczam jako materiał pomocniczy. W pewnym momencie kiedy analizowałem temat poprzedni z BB 4.10.1 RTC - sprzętowa obsługa I2C zrozumiałem, że bez podstawowej wiedzy dotyczącej protokołu I2C nie ma mowy o zrozumieniu tego co przygotował Mirek, stąd dla tych co podobnie jak ja uczą się podstaw polecam ten załącznik w mojej ocenie jest świetny,  przy okazji jeżeli ktoś z czytających  ma podobne lub lepsze opisy dotyczące i2c proponuję podać link lub inny odnośnik o ile to możliwe. <br /><br />Kurcze mam tylko nadzieję, że kodu nie umieściłem za dużo i nie dostanę BANA ani reprymendy od Mirka.  <br /><br />funkcja czytaj i2cGetbyte  (read) 1 bajt Master czyta bity nadawane przez Slave na linii SDA<br /><br />[syntax=c]u08 i2cGetbyte(uint8_t ack) {<br />u08 i;<br />u08 c,b = 0;<br /><br />I2C_SDL_HI;  <br />       /* Master ustaw 1(HI) na PC1 (SDA-MASTER) uwaga to nie znaczy, że linia SDA będzie cały czas HI//<br />   stan Hi jest podawany przez rezystor wewnętrzny w procesorze, jeżeli SLAVE ustawi 0 to taki stan będzie ustawiony na linii SDA */<br /><br />DDR(SDAPORT) &amp;= ~(1&lt;&lt;SDA);                 <br />       /*DDRC PIN1 na 0 (PC1=SDA-MASTER) PC1 wejście &quot;PC1 czyta stan linii SDA&quot; */<br /><br />for(i=8;i&gt;0;i--) {            <br />       /*zmienna i odlicza bity dla odbieranego bajtu */<br /><br />HDEL;<br />I2C_SCL_HI;      <br />                /* ustaw linię SCL 1 HI -już można czytać stan linii SDA */<br /><br />c = PIN(SDAPORT) &amp; (1&lt;&lt;SDA);        <br />               /*PC1 czyta bit z linii SDA (0b xxxx xx 0/1 x) maska &quot;zeruje wszystkie bity prócz bitu 1&quot; inaczej mówiąc co przeczyta PC1 to zapamięta <br />                  zmienna c (0b 0000 00 0/1 0)  0/1 wartość &quot;zapamiętana&quot; przez c zależy od stanu linii SDA */<br /><br />b &lt;&lt;= 1;  <br />                /* przesuń o 1 bit w lewo, zmienna b będzie w pętli for x8 przesuwana w lewo i jednocześnie będzie pamiętała wartość kolejnych &quot;czytanych z linii SDA (PC1) bitów */<br /><br />if(c) b |= 1;<br />                /*jeżeli wyrażenie P(1) to b=1 , jeżeli wyrażenie F(0) to b=0 uwaga b już było równe 0 linia wyżej i dlatego ten if nie musi w np else b=0 */<br /><br />HDEL;<br />I2C_SCL_LO;<br />               /*ustaw linię SCL 0 LO koniec czytania linii SDA */<br /><br /><br />               /* pętla for(i=8;i&gt;0;i--) przewija się 8 razy i czyta kolejne bity na linii SDA zmienna b je zapamięta  dzięki przesuwaniu w lewo o 1 w każdym cyklu */<br /><br /><br />}<br /><br />DDR(SDAPORT) |= (1&lt;&lt;SDA);  <br />       /* DDRC PIN1 na 1, PC1 wyjście (PC1=SDA MASTER) będzie można wygenerować ACK/NACK do układu SLAVE */<br /><br />if (ack) I2C_SDL_LO;         <br />        /*wyślij ACK (ack=1) ustaw na linii SDL LO czyli wyślij na SDA ACK */<br /><br />else I2C_SDL_HI;          <br />       /* wyślij NACK (nack=0) ustaw na linii SDL HI czyli wyślij na SDA NACK SLAVE kończy transmisję */<br /><br /><br /><br />I2C_SCL_TOGGLE;            <br />       /* makro można zapisać HDEL; PORTC |= (1&lt;&lt;PC0); HDEL; PORTC &amp;= ~(1&lt;&lt;PC0);  Master generuje impulsy zegara linia SCL ponieważ wyżej przygotowano  do wysłania do SLAVE ACK/NACK<br />           teraz przy SCL HI układ SLAVE odczyta nadaną przez MASTER na SDL wartość (ACK/NACK) i odpowiednio się zachowa tzn jeżeli ACK (SDA LO) SLAVE możne dalej nadawać jeżeli NACK <br />           koniec cyklu łączności */<br /><br />I2C_SDL_HI;   <br />       /* (SDA-MASTER) ustaw 1(HI) */<br /><br />return b;          <br />       /* funkcja zwraca odczytany z linii SDA bajt */<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7548">fobos</a> — 31 gru 2016, o 23:41</p><hr />
]]></content>
</entry>
</feed>