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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-11-27T22:46:32+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1845&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-11-27T22:46:32+01:00</updated>
<published>2012-11-27T22:46:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1845&amp;p=19651#p19651</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1845&amp;p=19651#p19651"/>
<title type="html"><![CDATA[Re: Programowa implementacja I2C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1845&amp;p=19651#p19651"><![CDATA[
Nie wykorzystują <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale mogą - tzn ty możesz i dzięki temu będziesz w stanie lepiej zareagować na jakieś tam błędy magistrali jeśli się pojawią a ty zechcesz je przewidzieć i obsłużyć w swoim kodzie. Ja w książce opisałem najprostsze przypadki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 lis 2012, o 22:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mg101]]></name></author>
<updated>2012-11-27T22:25:39+01:00</updated>
<published>2012-11-27T22:25:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1845&amp;p=19647#p19647</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1845&amp;p=19647#p19647"/>
<title type="html"><![CDATA[Re: Programowa implementacja I2C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1845&amp;p=19647#p19647"><![CDATA[
Dzięki Krauser<br />Chyba wyprowadziłeś mnie na prostą. Właściwie powinienem postawić Ci piwo &quot;Leżajsk&quot;<br />Czy mógłbyś potwierdzić czy prawidłowo widzę co się dzieje na liniach SDA i CSL przy wywołaniu np. i2cPutbyte(0xff)?<br />Czyli powinny polecieć same jedynki.<br /> <br />W poniższym kawałku na  linia SDA będzie cały czas +5V, a SCL wyśle 8 impulsów zegarowych<br /> <div class="codetitle"><b>Code:</b></div><div class="codecontent">  do {<br />      if ( b &amp; i ) I2C_SDL_HI;<br />      else I2C_SDL_LO;<br />      I2C_SCL_TOGGLE;<br />   } while ( i &gt;&gt;= 1 );  </div>    // wysyłanie bajtu<br /><br />A w tym kawałku MASTER sprawdzi czy SLAVE odebrał w/w 8 bitów (liczbę 0xff). Co ciekawe źródlem 9 bitu jest SLAVE a nie MASTER!<br /><br />   <div class="codetitle"><b>Code:</b></div><div class="codecontent">I2C_SDL_HI;         // pozostawienie SDA w stanie wysokim<br />   DDR(SDAPORT) &amp;= ~(1&lt;&lt;SDA);<br />   HDEL;<br />   I2C_SCL_HI;<br />   b = PIN(SDAPORT) &amp; (1&lt;&lt;SDA);   // sprawdzenie bitu ACK<br />   HDEL;<br />   I2C_SCL_LO;<br />   DDR(SDAPORT) |= (1&lt;&lt;SDA);<br />   HDEL;</div><br /><br />Tu natomiast funkcja &quot;wie&quot;  czy SLAVE odebrał 8 bitów danych. Inna rzecz że program nie musi tej wiedzy wykorzystywać! Np  funkcje I2C_write_buf_(...) i I2C_read_buf_(...) (str 286 i 287 &quot;...C Podstawy Programowania&quot; nie wykorzystują wiedzy na temat stanu ACK/NACK chociaż znają te stany.<br />  <div class="codetitle"><b>Code:</b></div><div class="codecontent"> return (b == 0);   //zwrócenie ACK jako rezultatu funkcji</div>. <br />}<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=683">mg101</a> — 27 lis 2012, o 22:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2012-11-27T20:37:37+01:00</updated>
<published>2012-11-27T20:37:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1845&amp;p=19642#p19642</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1845&amp;p=19642#p19642"/>
<title type="html"><![CDATA[Re: Programowa implementacja I2C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1845&amp;p=19642#p19642"><![CDATA[
Funkcja nie zwraca tego co wysyła. Te 9 bitów nie ma nic do rzeczy, bo zwracana jest tylko ACK=true lub NACK=false - co jest odpowiedzią układu na przesłany bajt. Rezultat takiej funkcji należy testować w warunku np.<br />[syntax=c]if( i2cPutbyte(bajt_do_wysłania) )<br />//lub <br />if( i2cPutbyte(bajt_do_wysłania) == true)[/syntax]<br />Nie ma też totolotka tylko true to 1, a false to 0.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 27 lis 2012, o 20:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mg101]]></name></author>
<updated>2012-11-27T17:25:47+01:00</updated>
<published>2012-11-27T17:25:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1845&amp;p=19634#p19634</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1845&amp;p=19634#p19634"/>
<title type="html"><![CDATA[Programowa implementacja I2C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1845&amp;p=19634#p19634"><![CDATA[
niniejsza funkcja wysyła szeregowo bajt np z MASTER do SLAVE<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">u08 i2cPutbyte(u08 b) {<br />   u08 i=0x80;<br />   do {<br />      if ( b &amp; i ) I2C_SDL_HI;<br />      else I2C_SDL_LO;<br />      I2C_SCL_TOGGLE;<br />   } while ( i &gt;&gt;= 1 );      // wysyłanie bajtu<br />   I2C_SDL_HI;         // pozostawienie SDA w stanie wysokim<br />   DDR(SDAPORT) &amp;= ~(1&lt;&lt;SDA);<br />   HDEL;<br />   I2C_SCL_HI;<br />   b = PIN(SDAPORT) &amp; (1&lt;&lt;SDA);   // sprawdzenie bitu ACK<br />   HDEL;<br />   I2C_SCL_LO;<br />   DDR(SDAPORT) |= (1&lt;&lt;SDA);<br />   HDEL;<br />   return (b == 0);   //zwrócenie ACK jako rezultatu funkcji<br />}<br /></div><br /><br />1. Zastanawiam się co zwraca ta funkcja. Niby bajt (u08), ale przecież wysyłanych jest 9 bitów (dane8 bitów  + 1bit ACK).   Poza tym przyzwyczajony jestem do tego, że funkcja zwraca wartość natychmiastowo. np x =234. czy można tak sobie uogólnić na liczbę 234 ale przesłaną szeregowo?<br /><br />2. Co robi return (b == 0)? Przecież gdy b jest równe 0 to powinno zwrócić TRUE czyli dowolną liczbę różną od 0. Czy nie powstaje tu jakiś totolotek?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=683">mg101</a> — 27 lis 2012, o 17:25</p><hr />
]]></content>
</entry>
</feed>