<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>
	Komentáře: Komunikace s čidlem přes I2C bez použití knihovny	</title>
	<atom:link href="https://www.petanovo.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.petanovo.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/</link>
	<description></description>
	<lastBuildDate>Mon, 21 Oct 2019 18:22:16 +0000</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>
		Od: Kvetak		</title>
		<link>https://www.petanovo.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/#comment-1903</link>

		<dc:creator><![CDATA[Kvetak]]></dc:creator>
		<pubDate>Mon, 21 Oct 2019 18:22:16 +0000</pubDate>
		<guid isPermaLink="false">https://www.mylms.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/#comment-1903</guid>

					<description><![CDATA[Odpověď na &lt;a href=&quot;https://www.petanovo.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/#comment-1902&quot;&gt;Kvetak&lt;/a&gt;.

Už jsem trochu pokročil. Není to prdel číst to takhle nahrubo.  Ale když si chci postavit např  meteostanici, která bude logovat na sd kartu a ještě přístupná přez wi-fi tak už tam mám pět knihoven a jen načtení všech hodnot z čidel a rtc hodin a jejich uložení na sd kartu je dost náročná procedura. Ještě tam není wi-fi. Nechci se vyhnout všem knihovnám a dělat vše po svém, ale zas bych rád věděl jak to funguje a ne že když napíšu getTemperature() , knihovna &quot;nějak vykouzlí&quot; teplotu. Zatim čtu ty první tři kalibrační hodnoty (3.11.2 tab 17) pak ty bity co vracejí nějakou hodnotu teploty (4.2 tab 18) a počítám podle vzorečku v odstavci 3.12 ale dostávám nesmysly jako třeba 0.01 st. C... Koukám že ještě chvíli budu muset zústat u knihoven. 
Ale kurňik řekl bych že sem blízko :-D]]></description>
			<content:encoded><![CDATA[<p>Odpověď na <a href="https://www.petanovo.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/#comment-1902">Kvetak</a>.</p>
<p>Už jsem trochu pokročil. Není to prdel číst to takhle nahrubo.  Ale když si chci postavit např  meteostanici, která bude logovat na sd kartu a ještě přístupná přez wi-fi tak už tam mám pět knihoven a jen načtení všech hodnot z čidel a rtc hodin a jejich uložení na sd kartu je dost náročná procedura. Ještě tam není wi-fi. Nechci se vyhnout všem knihovnám a dělat vše po svém, ale zas bych rád věděl jak to funguje a ne že když napíšu getTemperature() , knihovna &#8222;nějak vykouzlí&#8220; teplotu. Zatim čtu ty první tři kalibrační hodnoty (3.11.2 tab 17) pak ty bity co vracejí nějakou hodnotu teploty (4.2 tab 18) a počítám podle vzorečku v odstavci 3.12 ale dostávám nesmysly jako třeba 0.01 st. C&#8230; Koukám že ještě chvíli budu muset zústat u knihoven.<br />
Ale kurňik řekl bych že sem blízko 😀</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Od: Kvetak		</title>
		<link>https://www.petanovo.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/#comment-1902</link>

		<dc:creator><![CDATA[Kvetak]]></dc:creator>
		<pubDate>Sun, 20 Oct 2019 15:13:20 +0000</pubDate>
		<guid isPermaLink="false">https://www.mylms.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/#comment-1902</guid>

					<description><![CDATA[Zdravím, krásný článek a určitě užitečny. Jen mám dotaz, jak autor zjistil že čidlo odpovídá dvěma 8b bajty? Kde to vyčku? A co znamenají ty poměry (15:8, 7:0 apod) u těch bajtu/bitu? Rád bych se to naučil, ale když si otevřu jakýkoliv jiný datasheet není to tam takhle krásně. Zkoušel jsem například čidlo tlaku BMP280, tak sem něco málo zjistil, ale stejně dostávám odpovědi které určitě nejsou správné (například samé jedničky) apod.

&lt;strong&gt;Peťan&lt;/strong&gt;: Záleží na datasheetu jak je tam komunikace popsaná. Zrovna v tomto případě se dá vyčíst délka odpovědi např. z obrázku &quot;measurement sequence example&quot;. Je tam znázorněn dotaz s jedním bajtem (master &gt; slave) a odpověď dvěma bajty (slave &gt; master) + nějaký ty Acky a podobně (to odchytí knihovna Wire). Jednotlivé adresy jsou v tabulce &quot;Instruction set&quot;. Ty &quot;poměry&quot; jsou jednotlivé bity 7:0 (= nultý až sedmý bit). Někdy data můžou jít pozpátku.&lt;br&gt;Čidlo BMP280 jsem takhle přímo nezkoušel. Ale v datasheetu je tabulka adres v části 5.2.2 návod jak číst přes I2C. Potom je ještě nutné hodnoty překódovat. Můžu doporučit nahlédnout např. do knihovny &lt;a href=&quot;https://github.com/adafruit/Adafruit_BMP280_Library/blob/master/Adafruit_BMP280.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer nofollow ugc&quot;&gt;Adafruit_BMP280&lt;/a&gt;, kde se dá okouknout kód.]]></description>
			<content:encoded><![CDATA[<p>Zdravím, krásný článek a určitě užitečny. Jen mám dotaz, jak autor zjistil že čidlo odpovídá dvěma 8b bajty? Kde to vyčku? A co znamenají ty poměry (15:8, 7:0 apod) u těch bajtu/bitu? Rád bych se to naučil, ale když si otevřu jakýkoliv jiný datasheet není to tam takhle krásně. Zkoušel jsem například čidlo tlaku BMP280, tak sem něco málo zjistil, ale stejně dostávám odpovědi které určitě nejsou správné (například samé jedničky) apod.</p>
<p><strong>Peťan</strong>: Záleží na datasheetu jak je tam komunikace popsaná. Zrovna v tomto případě se dá vyčíst délka odpovědi např. z obrázku &#8222;measurement sequence example&#8220;. Je tam znázorněn dotaz s jedním bajtem (master > slave) a odpověď dvěma bajty (slave > master) + nějaký ty Acky a podobně (to odchytí knihovna Wire). Jednotlivé adresy jsou v tabulce &#8222;Instruction set&#8220;. Ty &#8222;poměry&#8220; jsou jednotlivé bity 7:0 (= nultý až sedmý bit). Někdy data můžou jít pozpátku.<br />Čidlo BMP280 jsem takhle přímo nezkoušel. Ale v datasheetu je tabulka adres v části 5.2.2 návod jak číst přes I2C. Potom je ještě nutné hodnoty překódovat. Můžu doporučit nahlédnout např. do knihovny <a href="https://github.com/adafruit/Adafruit_BMP280_Library/blob/master/Adafruit_BMP280.cpp" target="_blank" rel="noopener noreferrer nofollow ugc">Adafruit_BMP280</a>, kde se dá okouknout kód.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Od: Jarda		</title>
		<link>https://www.petanovo.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/#comment-1901</link>

		<dc:creator><![CDATA[Jarda]]></dc:creator>
		<pubDate>Thu, 07 Mar 2019 19:43:26 +0000</pubDate>
		<guid isPermaLink="false">https://www.mylms.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/#comment-1901</guid>

					<description><![CDATA[&lt;strong&gt;[2] Jarda:&lt;/strong&gt;  Rád se přihlásím na diskuzi, ale na otázky takovéhoto charakteru nereaguji:&lt;br&gt; Jaký dopravní prostředek se dá nalézt ve spojení „mo&lt;strong&gt;ko lo&lt;/strong&gt;ko“?:

Jinak Scanner funguje a adresu 0×31 vpoho najde.

&lt;li&gt;&lt;strong&gt;Peťan&lt;/strong&gt;: Ber to tak, že je to ochrana proti botům. Jinak jsou tyhle fóra zaspamovaný, že jsou k ničemu. Takže je to jen v tobě - buď chceš, nebo ne...&lt;/li&gt;]]></description>
			<content:encoded><![CDATA[<p><strong>[2] Jarda:</strong>  Rád se přihlásím na diskuzi, ale na otázky takovéhoto charakteru nereaguji:<br /> Jaký dopravní prostředek se dá nalézt ve spojení „mo<strong>ko lo</strong>ko“?:</p>
<p>Jinak Scanner funguje a adresu 0×31 vpoho najde.</p>
<li><strong>Peťan</strong>: Ber to tak, že je to ochrana proti botům. Jinak jsou tyhle fóra zaspamovaný, že jsou k ničemu. Takže je to jen v tobě &#8211; buď chceš, nebo ne&#8230;</li>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Od: Jarda		</title>
		<link>https://www.petanovo.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/#comment-1900</link>

		<dc:creator><![CDATA[Jarda]]></dc:creator>
		<pubDate>Thu, 07 Mar 2019 14:28:30 +0000</pubDate>
		<guid isPermaLink="false">https://www.mylms.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/#comment-1900</guid>

					<description><![CDATA[&lt;strong&gt;[1] Jarda:&lt;/strong&gt;  Na debilní otázky nelze odpovědět.

&lt;li&gt;&lt;strong&gt;Peťan&lt;/strong&gt;: To ne, ale tohle není fórum k řešení takových dotazů (nepodporuje vkládání zdrojových kódu, citování atd). Když napíšeš na fórum dotaz s kódem a s tím, co ti to dělá/nedělá tak tam denně chodí daleko víc lidí, kteří dokážou odpovědět, nebo o tom podebatovat. Napiš dotaz &lt;a href=&quot;https://arduino-forum.cz/viewforum.php?f=21&amp;sid=78a5bc90e4f2294a1acaa96e6d2002f5&quot; target=&quot;_blank&quot; rel=&quot;nofollow ugc&quot;&gt;sem&lt;/a&gt;.&lt;br&gt;Jinak, ze všeho nejdřív bych si vyzkoušel nějakej program na hledání I2C zařízení, jestli máš vůbec dobrou adresu (jestli zařízení odpovídá). Co že je to za zařízení?&lt;/li&gt;]]></description>
			<content:encoded><![CDATA[<p><strong>[1] Jarda:</strong>  Na debilní otázky nelze odpovědět.</p>
<li><strong>Peťan</strong>: To ne, ale tohle není fórum k řešení takových dotazů (nepodporuje vkládání zdrojových kódu, citování atd). Když napíšeš na fórum dotaz s kódem a s tím, co ti to dělá/nedělá tak tam denně chodí daleko víc lidí, kteří dokážou odpovědět, nebo o tom podebatovat. Napiš dotaz <a href="https://arduino-forum.cz/viewforum.php?f=21&#038;sid=78a5bc90e4f2294a1acaa96e6d2002f5" target="_blank" rel="nofollow ugc">sem</a>.<br />Jinak, ze všeho nejdřív bych si vyzkoušel nějakej program na hledání I2C zařízení, jestli máš vůbec dobrou adresu (jestli zařízení odpovídá). Co že je to za zařízení?</li>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Od: Jarda		</title>
		<link>https://www.petanovo.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/#comment-1899</link>

		<dc:creator><![CDATA[Jarda]]></dc:creator>
		<pubDate>Thu, 07 Mar 2019 13:09:10 +0000</pubDate>
		<guid isPermaLink="false">https://www.mylms.cz/komunikace-s-cidlem-pres-i2c-bez-pouziti-knihovny/#comment-1899</guid>

					<description><![CDATA[Nedaří se mi komunikovat bez knihovny se senzorem: V manuálu je:&lt;br /&gt; I2C Communication (Only Slave Mode Operation)&lt;br /&gt; Internal pull up resister&lt;br /&gt; Slave Address: 0×31, Slave Address Byte: Slave Address(0×31) 7 Bit + R/W 1 Bit&lt;br /&gt; R/W Bit : Read = 1/Write = 0&lt;br /&gt; When reading the data, Slave Address Byte is 0×63, When writing the data, Slave Address Byte is0×62.&lt;br /&gt; Block Diagram&lt;br /&gt; Transmission Sequence in Master

&lt;ol&gt;
	&lt;li&gt;I2C Start Condition&lt;/li&gt;

	&lt;li&gt;Write Command(Slave Address + R/W Bit(0) = 0×62) Transmission and Check Acknowledge&lt;/li&gt;

	&lt;li&gt;Write Command(ASCII ‘R’ : 0×52) Transmission and Check Acknowledge&lt;/li&gt;

	&lt;li&gt;I2C Stop Command&lt;/li&gt;

	&lt;li&gt;I2C Start Command&lt;/li&gt;

	&lt;li&gt;Read Command(Slave Address + R/W Bit(1) = 0×63) Transmission and Check Acknowledge&lt;/li&gt;

	&lt;li&gt;Read 7 Byte Receiving Data from Module and Send Acknowledge&lt;/li&gt;
&lt;/ol&gt;

(Delay at least 1ms for reading each byte)

muj program je:&lt;br /&gt; #include &#060;Wire.h&#062;

int hodnota;&lt;br /&gt; byte mb=1;&lt;br /&gt; byte mb1=1;&lt;br /&gt; byte mb2=1;&lt;br /&gt; byte mb3=1;&lt;br /&gt; byte mb4=1;&lt;br /&gt; byte mb5=1;&lt;br /&gt; byte mb6=1;&lt;br /&gt; byte error;

void setup(){&lt;br /&gt; Wire.begin();&lt;br /&gt; Serial.begin(115200);&lt;br /&gt; }

void loop(){&lt;br /&gt; Wire.beginTran­smission(0×31);&lt;br /&gt; // error = Wire.endTransmis­sion();&lt;br /&gt; Wire.write(0×62);&lt;br /&gt; Wire.write(0×52);&lt;br /&gt; Wire.endTransmis­sion(); //ukončení komunikace&lt;br /&gt; Wire.beginTran­smission(0×31);&lt;br /&gt; Wire.requestFrom(0×63,7­);&lt;br /&gt; while(Wire.ava­ilable() &#062; 0){&lt;br /&gt; mb = Wire.read(); //nižší byte&lt;br /&gt; mb1 = Wire.read(); //vyšší byte&lt;br /&gt; mb2 = Wire.read();&lt;br /&gt; mb3 = Wire.read();&lt;br /&gt; mb4 = Wire.read();&lt;br /&gt; mb5 = Wire.read();&lt;br /&gt; mb6 = Wire.read();&lt;br /&gt; //nyní hodnoty opět spojíme dohromady&lt;br /&gt; hodnota = mb + mb1;&lt;br /&gt;  }

Serial.println(mb);&lt;br /&gt; Serial.println(mb1);&lt;br /&gt; Serial.println(mb2);&lt;br /&gt; Serial.println(mb3);&lt;br /&gt; Serial.println(mb4);&lt;br /&gt; Serial.println(mb5);&lt;br /&gt; Serial.println(mb6);&lt;br /&gt; Serial.println(hod­nota);&lt;br /&gt; delay(5000);

}

&lt;li&gt;&lt;strong&gt;Peťan&lt;/strong&gt;: Napiš na &lt;a href=&quot;https://arduino-forum.cz/&quot; target=&quot;_blank&quot; rel=&quot;nofollow ugc&quot;&gt;Arduino fórum&lt;/a&gt;.&lt;/li&gt;]]></description>
			<content:encoded><![CDATA[<p>Nedaří se mi komunikovat bez knihovny se senzorem: V manuálu je:<br /> I2C Communication (Only Slave Mode Operation)<br /> Internal pull up resister<br /> Slave Address: 0×31, Slave Address Byte: Slave Address(0×31) 7 Bit + R/W 1 Bit<br /> R/W Bit : Read = 1/Write = 0<br /> When reading the data, Slave Address Byte is 0×63, When writing the data, Slave Address Byte is0×62.<br /> Block Diagram<br /> Transmission Sequence in Master</p>
<ol>
<li>I2C Start Condition</li>
<li>Write Command(Slave Address + R/W Bit(0) = 0×62) Transmission and Check Acknowledge</li>
<li>Write Command(ASCII ‘R’ : 0×52) Transmission and Check Acknowledge</li>
<li>I2C Stop Command</li>
<li>I2C Start Command</li>
<li>Read Command(Slave Address + R/W Bit(1) = 0×63) Transmission and Check Acknowledge</li>
<li>Read 7 Byte Receiving Data from Module and Send Acknowledge</li>
</ol>
<p>(Delay at least 1ms for reading each byte)</p>
<p>muj program je:<br /> #include &lt;Wire.h&gt;</p>
<p>int hodnota;<br /> byte mb=1;<br /> byte mb1=1;<br /> byte mb2=1;<br /> byte mb3=1;<br /> byte mb4=1;<br /> byte mb5=1;<br /> byte mb6=1;<br /> byte error;</p>
<p>void setup(){<br /> Wire.begin();<br /> Serial.begin(115200);<br /> }</p>
<p>void loop(){<br /> Wire.beginTran­smission(0×31);<br /> // error = Wire.endTransmis­sion();<br /> Wire.write(0×62);<br /> Wire.write(0×52);<br /> Wire.endTransmis­sion(); //ukončení komunikace<br /> Wire.beginTran­smission(0×31);<br /> Wire.requestFrom(0×63,7­);<br /> while(Wire.ava­ilable() &gt; 0){<br /> mb = Wire.read(); //nižší byte<br /> mb1 = Wire.read(); //vyšší byte<br /> mb2 = Wire.read();<br /> mb3 = Wire.read();<br /> mb4 = Wire.read();<br /> mb5 = Wire.read();<br /> mb6 = Wire.read();<br /> //nyní hodnoty opět spojíme dohromady<br /> hodnota = mb + mb1;<br />  }</p>
<p>Serial.println(mb);<br /> Serial.println(mb1);<br /> Serial.println(mb2);<br /> Serial.println(mb3);<br /> Serial.println(mb4);<br /> Serial.println(mb5);<br /> Serial.println(mb6);<br /> Serial.println(hod­nota);<br /> delay(5000);</p>
<p>}</p>
<li><strong>Peťan</strong>: Napiš na <a href="https://arduino-forum.cz/" target="_blank" rel="nofollow ugc">Arduino fórum</a>.</li>
]]></content:encoded>
		
			</item>
	</channel>
</rss>
