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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-01-08T12:27:13+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=17247&amp;mode</id>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2017-01-08T12:27:13+01:00</updated>
<published>2017-01-08T12:27:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179383#p179383</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179383#p179383"/>
<title type="html"><![CDATA[Re: MPL3115A2 i I2C problem z komunikacją]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179383#p179383"><![CDATA[
No nie bądźcie tacy, niech ktoś coś podpowie  <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=548">Tom277</a> — 8 sty 2017, o 12:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2017-01-08T00:02:58+01:00</updated>
<published>2017-01-08T00:02:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179368#p179368</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179368#p179368"/>
<title type="html"><![CDATA[Re: MPL3115A2 i I2C problem z komunikacją]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179368#p179368"><![CDATA[
Tak więc po długich bojach, coś otrzymuję z czujnika. Proszę teraz o pomoc w przekonwertowaniu danych z czujnika.<br />Otrzymałem np takie dane z rejestrów:<br />OUT_T_MSB = 20<br />OUT_T_LSB = 16<br />w dokumentacji jest pokazana funkcja do konwersji części całkowitej.<br /><br />[syntax=c]void SCI_s8dec_Out (tword data)<br />{<br />byte a, b, c;<br />word r;<br />/*<br />** Determine sign and output<br />*/<br />if (data.Byte.hi &gt; 0x7F)<br />{<br />SCI_CharOut ('-');<br />data.Word = ~data.Word + 1;<br />}<br />else<br />{<br />SCI_CharOut ('+');<br />}<br />/*<br />** Calculate<br />*/<br />a = (byte)((data.Word &gt;&gt;8) / 100); //Shift the data over since it is MSB only<br />r = (data.Word &gt;&gt;8) % 100;<br />b = (byte)(r / 10);<br />c = (byte)(r % 10);<br />/*<br />** Format<br />*/<br />if (a == 0)<br />{<br />a = 0xF0;<br />if (b == 0)<br />{<br />b = 0xF0;<br />}<br />}<br />/*<br />** Output result<br />*/<br />SCI_NibbOut (a);<br />SCI_NibbOut (b);<br />SCI_NibbOut (c);<br />}[/syntax] <br /><br />Podstawiając powyższe dane z czujnika MSB wychodzi mi, że:<br />a = 240<br />b = 240<br />c = 2<br />r = 2<br /><br />Znalazłem gdzieś w pdf-ach NXP ciało  funkcji SCI_NibbOut(...) oraz jej opisu<br /><br />&quot;Located in the driver program, the code below performs this conversion. It also adds the additional output formatting step of replacing each leading zero digit with a space character, which is done by passing 0xF0 to SCI_NibbOut(). Looking more closely, you can see that this routine will add 0x30 to 0xF0, resulting in a value of 0x120, which gets truncated to 0x20 (the ASCII space character)&quot;<br /><br />Ciało funkcji<br />[syntax=c]Here is the routine used above which will output a single nibble character:<br />void SCI_NibbOut(byte data)<br />{<br />byte c;<br />c = data + 0x30;<br />if (c &gt; 0x39)<br />c += 0x07;<br />SCI_CharOut(c);<br />}[/syntax]<br /><br />Jak bym nie podstawiał to wychodzą bzdury.<br /><br />a tu funkcja konwersji części po przecinku<br />[syntax=c]void SCI_s4fracun_Out (tword data)<br />{<br />BIT_FIELD value;<br />word result;<br />byte a, b, c, d;<br />word r;<br />SCI_CharOut ('.');<br />/*<br />** Determine mantissa value<br />*/<br />result = 0;<br />value.Byte = data.Byte.hi;<br />if (value.Bit._7 == 1)<br />result += FRAC_2d1;<br />if (value.Bit._6 == 1)<br />result += FRAC_2d2;<br />if (value.Bit._5 == 1)<br />result += FRAC_2d3;<br />if (value.Bit._4 == 1)<br />result += FRAC_2d4;<br />//<br />/*<br />** Convert mantissa value to 4 decimal places<br />*/<br />r = result % 1000;<br />a = (byte)(result / 1000);<br />b = (byte)(r / 100);<br />r %= 100;<br />c = (byte)(r / 10);<br />d = (byte)(r % 10);<br />/*<br />** Output mantissa<br />*/<br />SCI_NibbOut (a);<br />SCI_NibbOut (b);<br />SCI_NibbOut (c);<br />SCI_NibbOut (d);<br />}[/syntax]<br /><br />Pomóżcie proszę, bo godziny / dni lecą a ja dalej w miejscu stoję.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 8 sty 2017, o 00:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2017-01-07T13:46:33+01:00</updated>
<published>2017-01-07T13:46:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179306#p179306</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179306#p179306"/>
<title type="html"><![CDATA[Re: MPL3115A2 i I2C problem z komunikacją]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179306#p179306"><![CDATA[
Podaję adres 8-bitowy, czyli 0xC0 jako adres urządzenia podczas zapisu. W funkcji odbioru do adresu dodawane jest 1 czyli &quot;robi&quot; się z tego adres odczytu.<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">TWI_write(0xC0 + 1);</div> <br />Wydaje mi się, że powoli zaczynam dogadywać się z czujnikiem. Na razie jeszcze nie wiem tylko czy poprawnie tzn. czy czujnik wysyła mi to co bym chciał. Otrzymuję dane z dwóch rejestrów OUT_T_MSB_Register i OUT_T_LSB_Register (na razie odczytuję tylko temperaturę dla uproszczenia). Wiem, że rejestr OUT_T_LSB to wartość &quot;po kropce&quot; temperatury natomiast rejestr OUT_T_MSB to całe stopnie z informacją czy temperatura jest dodatnia czy ujemna, gdy większa od 0x7F to ujemna. Tylko jak z tej wartości teraz uzyskać wartość dziesiętną temperatury, no bo chyba nie jest tak, że wartość rejestru OUT_T_MSB np 0x19 to zwyczajne 25 stopni?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 7 sty 2017, o 13:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szymonciow]]></name></author>
<updated>2017-01-07T01:07:55+01:00</updated>
<published>2017-01-07T01:07:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179289#p179289</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179289#p179289"/>
<title type="html"><![CDATA[Re: MPL3115A2 i I2C problem z komunikacją]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179289#p179289"><![CDATA[
<div class="quotetitle">Tom277 napisał(a):</div><div class="quotecontent"><br />Funkcje z BB są dla mnie zrozumiałe, z powodzeniem wykorzystuje je (delikatnie przerobione)do komunikacji z PCF8563. Niestety nie mogę z ich pomocą nawiązać komunikacji z MPL3115A2. Dlatego zacząłem kombinować z funkcjami z pdf-a (te które wkleiłem w pierwszym poście). W pdf-ie faktycznie mam ładnie rozpisane co i jak powinno być w komunikacji z czujnikiem, ale na razie mam chyba problem z samą funkcją wysyłającą pojedynczy bajt do czujnika. Tego nie mogę zrozumieć co tu jest nie tak. Sprawdzałem stosując debug z diodą led  ale już po wysłaniu pierwszych komend <br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">TWI_start ();</div><br />do czujnika program mi się zawiesza.<br />Chyba tu jest coś nie tak, nie rozumiem tego co jest?<br /></div><br /><br />Z wątku tego nie wyczytałem, powiedz zatem jaki podajesz adres urządzenia dla MPL3115A2?<br /><br />Spotykane biblioteki w internecie różnie interpretują co to jest &quot;adres urządzenia&quot;.<br />Jest różnica pomiędzy adresem &quot;7 bitowym&quot; i &quot;8 bitowym&quot;.<br /><br />Mirek w BB stosuje adres 8 bitowy, a czytanie od zapisywania do urządzenia rozróżnia poprzez dodawanie 1 do adresu (najmniej znaczący bit ustawiany jest na 1).<br />PDF do urządzeń zwykle podają adres 7 bitowy, ale z wyraźnym zaznaczeniem:<br />&quot;<em>The device uses 7-bit addressing and does not acknowledge general call address 000 0000. Slave address has been set<br />to <strong><span style="color: #0040FF">60h</span></strong> or 110 0000. 8-bit read is <strong><span style="color: #0040FF">C1h</span></strong>, 8-bit write is <strong><span style="color: #0040FF">C0h</span></strong></em>.&quot;<br />Powyżej to dokładny cytat z noty do MPL3115A2.<br /><br />Można zatem wpaść w pułapkę i definiując w stałych podawać adres 7 bitowy: <strong><span style="color: #0040FF">0x60</span></strong> z tym, że do biblioteki Mirka jest potrzebny adres 8 bitowy: <strong><span style="color: #0040FF">0xC0 </span> </strong><br /><br />Jeśli popatrzymy do adafruitowej biblioteki (arduino) to znajdzimy:<br />[syntax=c]/*=========================================================================<br />    I2C ADDRESS/BITS<br />    -----------------------------------------------------------------------*/<br />    #define MPL3115A2_ADDRESS                       (0x60)    // 1100000<br />/*=========================================================================*/[/syntax]<br />Podanie tego adresu do mirkowej biblioteki spowoduje brak komunikacji z czujnikiem, bo poprawna definicja powinna wyglądać tak:<br /><br />[syntax=c]/*=========================================================================<br />    I2C ADDRESS/BITS<br />    -----------------------------------------------------------------------*/<br />    #define MPL3115A2_ADDRESS                        (0xC0    // 11000000)<br />/*=========================================================================*/[/syntax]<br /><br />Ciekawe jak to u Ciebie wygląda.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4075">szymonciow</a> — 7 sty 2017, o 01:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2017-01-06T17:53:27+01:00</updated>
<published>2017-01-06T17:53:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179236#p179236</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179236#p179236"/>
<title type="html"><![CDATA[Re: MPL3115A2 i I2C problem z komunikacją]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179236#p179236"><![CDATA[
To teraz mam głupie pytanie, wychodzi brak systematycznego układania wiedzy w głowie  <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /> <br />Skoro mam temperaturę podaną z rozdzielczością 12 bitową to co to znaczy? Jak z tego wyłuskać wartość dziesiętna temperatury. Wartość temperatury zmierzona przez czujnik zapisana jest do dwóch rejestrów: <em>Temperature Data Out MSB</em> starcza część oraz <em>Temperature Data Out LSB</em> młodsza część. Są to dwa ośmio bitowe rejestry gdzie  młodszy zapełniony jest tylko czterema starszymi bitami. W sumie tworzą wartość 12 bitową.<br />W przypadku &quot;zwykłego&quot; ADC w mikrokontrolerze gdy mam rozdzielczość np 10 bitową to znaczy, że napięcie referencyjne dzielę przez 1024 i mam prostą informację ile jeden bit to jest V-tów. Jak to jest w omawianym czujniku MPL3115A2? Nie wiem jak to wyłuskać. W AN4519 są funkcje konwersji tyle, że znowu jest coś (nic nie jest jasne)niejasne w tych funkcjach. <br />Poniżej funkcja konwertująca, pochodzi z AN4519 (umieściłem w pierwszym poście) str.15 <br /><br />[syntax=c]void SCI_s8dec_Out (tword data)<br />{<br />byte a, b, c;<br />word r;<br />/*<br />** Determine sign and output<br />*/<br />if (data.Byte.hi &gt; 0x7F)<br />{<br />SCI_CharOut ('-');<br />data.Word = ~data.Word + 1;<br />}<br />else<br />{<br />SCI_CharOut ('+');<br />}<br />/*<br />** Calculate<br />*/<br />a = (byte)((data.Word &gt;&gt;8) / 100); //Shift the data over since it is MSB only<br />r = (data.Word &gt;&gt;8) % 100;<br />b = (byte)(r / 10);<br />c = (byte)(r % 10);<br />/*<br />** Format<br />*/<br />if (a == 0)<br />{<br />a = 0xF0;<br />if (b == 0)<br />{<br />b = 0xF0;<br />}<br />}<br />/*<br />** Output result<br />*/<br />SCI_NibbOut (a);<br />SCI_NibbOut (b);<br />SCI_NibbOut (c);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 6 sty 2017, o 17:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2017-01-06T13:19:57+01:00</updated>
<published>2017-01-06T13:19:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179224#p179224</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179224#p179224"/>
<title type="html"><![CDATA[Re: MPL3115A2 i I2C problem z komunikacją]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179224#p179224"><![CDATA[
Dziękuję za zainteresowanie. Na razie nie udało mi się jeszcze nic osiągnąć w temacie, jak ruszę z miejsca dam znać. Dzięki jeszcze raz.<br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 6 sty 2017, o 13:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fobos]]></name></author>
<updated>2017-01-05T18:54:32+01:00</updated>
<published>2017-01-05T18:54:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179179#p179179</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179179#p179179"/>
<title type="html"><![CDATA[Re: MPL3115A2 i I2C problem z komunikacją]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179179#p179179"><![CDATA[
No &quot;panie kolego&quot; pięknie i wisienka całkiem całkiem dzięki jak dla mnie pomógł.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7548">fobos</a> — 5 sty 2017, o 18:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mellanogaster]]></name></author>
<updated>2017-01-05T18:40:34+01:00</updated>
<published>2017-01-05T18:40:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179176#p179176</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179176#p179176"/>
<title type="html"><![CDATA[Re: MPL3115A2 i I2C problem z komunikacją]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179176#p179176"><![CDATA[
Ja polecam zrobić sobie prostą komunikację uart z terminalem na pc i po każdym kroku komunikowania się z czujnikiem (TWI_start.... TWI_write...) wysyłać do terminala zawartość rejestru TWSR.<br />TO SPRAWDZONY PRZEZE MNIE SPOSÓB i skuteczny <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> w tym przypadku powie nam dużo więcej niż dioda.<br />A i jeszcze taki cukierasek od lisełka<br /><a href="http://www.xdimax.com/sub20/doc/HTML/index.html?i2c_status.htm"  class="postlink">Lista statusów komunikacji</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2911">Mellanogaster</a> — 5 sty 2017, o 18:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fobos]]></name></author>
<updated>2017-01-05T17:25:53+01:00</updated>
<published>2017-01-05T17:25:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179165#p179165</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179165#p179165"/>
<title type="html"><![CDATA[Re: MPL3115A2 i I2C problem z komunikacją]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179165#p179165"><![CDATA[
Jestem początkującym i moje sugestie mogą Cię wprowadzić w maliny, jeżeli to pomoże zrobiłbym tak. Spróbował bym nawiązać podstawową komunikację :<br />- sekwencja (sygnatura) startu TWI_start();<br />- następnie komunikacja z układem slave  czyli funkcja TWI_write(adr)  adres + bit kierunku transmisji 0 write , w tym miejscu przebuduj program w taki sposób by sprawdzić czy slave nadaje 9 bit ACK, (np dioda) jeżeli 9 bit jest ACK to znaczy, że podstawowa komunikacja jest OK slave odpowiada na adres, następnie zmień adres układu slave w funkcji write na inny (nieprawidłowy) dioda nie powinna się palić (zły adres slave) zrób to po to by uzyskać większą pewność.<br />- na koniec sekwencja (sygnatura) stop.<br /><br />Jeżeli Cię to interesuje mogę (możemy ?) to rozwijać dalej ale nie mam pewności czy to właściwa droga i jeszcze jedno wydaje mi się, że łatwiej powyższe zrobić wykorzystując programową implementację I2C, pisałem w uproszczeniu posługując się terminologią ze sprzętowej obsługi.<br />Inne sugestie to jakie rezystory podciągające zastosowałeś w I2C, jaką częstotliwość ustawiłeś na ICL<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7548">fobos</a> — 5 sty 2017, o 17:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2017-01-05T12:08:34+01:00</updated>
<published>2017-01-05T12:08:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179122#p179122</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179122#p179122"/>
<title type="html"><![CDATA[Re: MPL3115A2 i I2C problem z komunikacją]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179122#p179122"><![CDATA[
Funkcje z BB są dla mnie zrozumiałe, z powodzeniem wykorzystuje je (delikatnie przerobione)do komunikacji z PCF8563. Niestety nie mogę z ich pomocą nawiązać komunikacji z MPL3115A2. Dlatego zacząłem kombinować z funkcjami z pdf-a (te które wkleiłem w pierwszym poście). W pdf-ie faktycznie mam ładnie rozpisane co i jak powinno być w komunikacji z czujnikiem, ale na razie mam chyba problem z samą funkcją wysyłającą pojedynczy bajt do czujnika. Tego nie mogę zrozumieć co tu jest nie tak. Sprawdzałem stosując debug z diodą led  ale już po wysłaniu pierwszych komend <br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">TWI_start ();</div><br />do czujnika program mi się zawiesza.<br />Chyba tu jest coś nie tak, nie rozumiem tego co jest?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 5 sty 2017, o 12:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tonygryps]]></name></author>
<updated>2017-01-05T09:59:17+01:00</updated>
<published>2017-01-05T09:59:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179112#p179112</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179112#p179112"/>
<title type="html"><![CDATA[Re: MPL3115A2 i I2C problem z komunikacją]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179112#p179112"><![CDATA[
W pdf an4481 masz pokazane na stronie 5 jak powinna być zbudowana ramka danych do odzczytu .<br />Ja bym spróbował tak zbudować funkcję z wykorzystaniem biblioteki z BB.  <br />[syntax=c]void TWI_read_buf(uint8_t SLA, uint8_t adr, uint8_t len, uint32_t *buf) {<br />TWI_start ();<br />TWI_write((&quot;adres czujnika&quot; 0xC0) SLA ):<br />TWI_write((&quot;adres rejestru który chcesz odczytać zapisać&quot;(na stronie 6 tego pdf masz adresy rejestrów) adr);<br />TWI_start();<br />TWI_write((0xC0 + 1) SLA+1);<br />while (len--) *buf++ = TWI_read( len ? ACK : NACK );<br />TWI_stop ();<br />}[/syntax] <br />gdzie SLA - adres czujnika <br />adr - adres rejestru<br />len - ile rejestwów do odczytu <br />*buf wskaźnik na bufor gdzie mają się zapisać dane musisz zrobić sobie bufor na dane 32bitowy ponieważ dane z czujników są 20 bitowe.<br />czyli do odczytu ciśnienia będziesz musiał odczytać 3 bajty i je poskładać i masz odczyt ciśnienia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12014">tonygryps</a> — 5 sty 2017, o 09:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mellanogaster]]></name></author>
<updated>2017-01-05T09:25:38+01:00</updated>
<published>2017-01-05T09:25:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179109#p179109</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179109#p179109"/>
<title type="html"><![CDATA[Re: MPL3115A2 i I2C problem z komunikacją]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179109#p179109"><![CDATA[
Witaj!<br />Najpierw na spokojnie przestudiuj sobie pdf'a (Zwłaszcza &quot;fig. 7&quot; i &quot;fig. 8&quot; ). Tam masz krok po kroku objaśnione jak wygląda komunikacja z czujnikiem.<br />Zapoznaj się również z (bo warto!) z obsługą błędów - w skrócie pewne flagi są zgłaszane w odpowiednim rejestrze uC-ka. Tutaj niestety trzeba bardziej w internecie poszperać bo w nocie AVRów nie wszystko opisano, a szkoda (przynajmniej w tych co sprawdzałem  <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" />)<br />Biblioteki z BB są bardzo OK. Co prawda można, a nawet polecam je troszkę podrasować pod obsługę konkretnego SLAVE'a <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />W wyżej opisany sposób napisałem kiedyś własną procedurę do obsługi HTU21D - chciałem napisać kod który rozumiem i przy okazji się wiele nauczyłem. Zajęło mi to niewiele czasu, a diabeł okazał się nie taki straszny jak na początku się zdawało <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2911">Mellanogaster</a> — 5 sty 2017, o 09:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom277]]></name></author>
<updated>2017-01-05T08:20:05+01:00</updated>
<published>2017-01-05T08:20:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179105#p179105</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179105#p179105"/>
<title type="html"><![CDATA[MPL3115A2 i I2C problem z komunikacją]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17247&amp;p=179105#p179105"><![CDATA[
Usiłuję dogadać się z czujnikiem MPL3115A2. Niestety problem mam chyba już na etapie samej komunikacji I2C. W swoich bojach wykorzystuję (a przynamniej próbuję) bibliotekę z BB  do komunikacji I2C, ale może po kolei.<br />Sprzętowo mam wszystko ok. sprawdziłem programem z Arduino. Czujnik ładnie dogaduje się z procesorem wysyłając na terminal ciśnienie, wysokość oraz temperaturę.<br />Chciałem, wzorem Mirka poradników oprzeć się na bibliotece z wspomnianego wyżej Arduino, ale w pewnym momencie odniosłem wrażenie, że czytam Dziennik Ustaw.  W pliku z funkcjami do obsługi MPL3115A2 jest załączony plik obsługi I2C. Z kolei   w pliku I2C dołączony jest kolejny z kolejnymi funkcjami a następnie kolejny itd. Z Arduino jestem kompletnie zielony, i  po wyrwaniu połowy włosów odpuściłem ten kierunek.<br />Ponownie zacząłem studiować dokumentację do samego czujnika MPL31115A2. Po kilkunastu godzinach przyzwyczajania się do treści wydawało mi się, że coś zaczynam rozumieć. Więc zbudowałem prosty main wzorem grafu z dokumentacji, no i klapa.<br />Stosując  „debag” diodą led doszedłem do wniosku, że problem leży już na etapie wysyłania komunikatów na szynę I2C.<br />Proszę o podpowiedź, o co chodzi w poniższej funkcji?<br />Co to jest  „IICC_MST = 1;” i to „IICS_BUSY” i po co jest „error |= 0x01;”<br />Rozumiem, że „IICC_MST = 1;” to przypisanie zmiennej IICC_MST wartości 1, ale po co? Chyba mi czegoś brakuje, w/w zmienne są chyba globalnymi zmiennymi. <br /><br />[syntax=c]IIC_Start<br />/*********************************************************\<br />* Initiate IIC Start Condition<br />\*********************************************************/<br />void IIC_Start(void)<br />{<br />IICC_MST = 1;<br />timeout = 0;<br />while ((!IICS_BUSY) &amp;&amp; (timeout&lt;1000))<br />timeout++;<br />if (timeout &gt;= 1000)<br />error |= 0x01;<br />} //*** Wait until BUSY=1<br />4.2 IIC_Stop<br />/*********************************************************\<br />* Initiate IIC Stop Condition<br />\*********************************************************/<br />void IIC_Stop(void)<br />{<br />IICC_MST = 0;<br />timeout = 0;<br />while ( (IICS_BUSY) &amp;&amp; (timeout&lt;1000))<br />timeout++;<br />if (timeout &gt;= 1000)<br />error |= 0x02;<br />} //*** Wait until BUSY=0[/syntax]<br /><br />Powyższy kod jest z pdf-a AN4481, obsługa czujnika MPL3115A2 jest z AN4519 obydwa pdf-y w załączniku.<br />Chyba się zapętliłem w swoich rozważaniach, proszę o podpowiedź. Od trzech dni siedzę nad tematem i nie drgnąłem z miejsca.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=548">Tom277</a> — 5 sty 2017, o 08:20</p><hr />
]]></content>
</entry>
</feed>