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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-10-17T11:39:10+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=30&amp;t=19393&amp;mode</id>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2017-10-17T11:39:10+01:00</updated>
<published>2017-10-17T11:39:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197234#p197234</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197234#p197234"/>
<title type="html"><![CDATA[Re: Biblioteka BMP085 nie działa pod PIC32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197234#p197234"><![CDATA[
<div class="quotetitle">wat1970 napisał(a):</div><div class="quotecontent"><br />0x0C i 0xC0 to nie to samo jakby co <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br /><br />Tyle, to ja wiem. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Zakładam tylko, że ta sytuacja wynika z jakiegoś błędu w bibliotece stdio.h, używanej do wysłania danych przez UART. Bo wartości czytane przez analizator stanów logicznych (podczas transmisji I2C) oraz debuger (po scaleniu odebranych danych w jedną zmienną szesnastobitową) są ze sobą zgodne. Gdyby w buforze z jakiegos powodu półbajty były zamieniane miejscami, to debuger by to zauważył też w docelowej zmiennej.<br /><br />UPDATE:<br /><br />Dane z debugera wyglądają następująco, jeśli chodzi o wartości rejestrów kalibracyjnych:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">buff&#91;0&#93;    0x1E<br />buff&#91;1&#93;    0x12<br />buff&#91;2&#93;    0xFB<br />buff&#91;3&#93;    0xC6<br />buff&#91;4&#93;    0xC7<br />buff&#91;5&#93;    0x0C<br />buff&#91;6&#93;    0x85<br />buff&#91;7&#93;    0x3B<br />buff&#91;8&#93;    0x5E<br />buff&#91;9&#93;    0xEC<br />buff&#91;10&#93;    0x52<br />buff&#91;11&#93;    0x58<br />buff&#91;12&#93;    0x15<br />buff&#91;13&#93;    0x7A<br />buff&#91;14&#93;    0x00<br />buff&#91;15&#93;    0x38<br />buff&#91;16&#93;    0x80<br />buff&#91;17&#93;    0x00<br />buff&#91;18&#93;    0xD4<br />buff&#91;19&#93;    0xBD<br />buff&#91;20&#93;    0x09<br />buff&#91;21&#93;    0x80<br /><br />bmp085_regac1   __int16_t   0xA0000336   0x1E12   7698   <br />bmp085_regac2   __int16_t   0xA000033E   0xFBC6   -1082   <br />bmp085_regac3   __int16_t   0xA0000328   0xC70C   -14580   <br />bmp085_regac4   __uint16_t   0xA0000320   0x853B   34107   <br />bmp085_regac5   __uint16_t   0xA000033A   0x5EEC   24300   <br />bmp085_regac6   __uint16_t   0xA0000332   0x5258   21080   <br />bmp085_regb1   __int16_t   0xA0000330   0x157A   5498   <br />bmp085_regb2   __int16_t   0xA0000322   0x0038   56   <br />bmp085_regmb   __int16_t   0xA0000338   0x8000   -32768   <br />bmp085_regmc   __int16_t   0xA000033C   0xD4BD   -11075   <br />bmp085_regmd   __int16_t   0xA0000334   0x0980   2432<br /></div><br /><br />Wygląda chyba na to, że wszystko jest poskładane prawidłowo... Powinienem szukać przyczyny gdzie indziej?<br /><br /><br />UPDATE2:<br /><br />Sprawdziłem zawartość zmiennych lokalnych w funkcji getrawpressure(). Jest coś dziwnego. Jak mam rozumieć to &quot;invalid address&quot;?<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">b6   __int32_t   0xA0009F3C   0xA2D0C9CE   -1563375154   <br />x3   __int32_t   0xBFFCBFFF   Invalid Address   Invalid Address   <br />b4   __uint32_t   0xBFFDBFFF   Invalid Address   Invalid Address   <br />b3   __int32_t   0xFF3FBFFF   Invalid Address   Invalid Address   <br />up   __int32_t   0xFFFFFFF0   Invalid Address   Invalid Address   <br />b7   __uint32_t   0x5127A   Invalid Address   Invalid Address   <br />buff   unsigned char&#91;3&#93;   0xA000FF78   &quot;\x a2\x 4f\x 40&quot;      <br />x1   __int32_t   0x0 (CONST)   0x00000000   0   <br />p   __int32_t   r02  (CPU)   0x000180E5   98533   <br />x2   __int32_t   0x0 (CONST)   0x00000010   16   <br /></div><br /><br /><br />UPDATE3:<br />Problem został rozwiązany przy pomocy debugera. Okazuje się, że lekarstwem na komunikat &quot;Invalid Address&quot; było wyłączenie optymalizacji dla konkretnej funkcji. Dzięki temu mogłem już na bieżąco podglądać wartości lokalnych zmiennych. Okazało się, że obliczenia przebiegają prawidłowo i na końcu uzyskuje się wiarygodną wartość. Z tego miejsca było już łatwo trafić do źródła problemu, którym nie była wcale biblioteka, ale pomyłka w innej części kodu, polegająca na przypisywaniu wartości zwracanej przez funkcję do zmiennej o zbyt małym rozmiarze.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2174">Atlantis</a> — 17 paź 2017, o 11:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wat1970]]></name></author>
<updated>2017-10-17T10:31:49+01:00</updated>
<published>2017-10-17T10:31:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197225#p197225</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197225#p197225"/>
<title type="html"><![CDATA[Re: Biblioteka BMP085 nie działa pod PIC32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197225#p197225"><![CDATA[
0x0C i 0xC0 to nie to samo jakby co <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 45 minutach ]</span></strong><br /><br />jak masz to na AVR postawione to na sztywno zapodaj dane (bez odczytu z DT22) na wejście sekwencji /*calculate raw pressure*/ i zobacz wyniki a potem porównaj co z tymi samymi danymi na wejściu robi PIC32. Funkcja bmp085_getrawpressure(), robi sporo obliczeń i tu bym trochę kijem pogrzebał. To że kody wyglądają tak samo nie oznacza , że będą wypluwać te same dane <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=2179">wat1970</a> — 17 paź 2017, o 10:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2017-10-17T07:00:33+01:00</updated>
<published>2017-10-17T07:00:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197206#p197206</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197206#p197206"/>
<title type="html"><![CDATA[Re: Biblioteka BMP085 nie działa pod PIC32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197206#p197206"><![CDATA[
<div class="quotetitle">wat1970 napisał(a):</div><div class="quotecontent"><br />A próbowałeś trochę sprzętowego debugowania programu, np. podglądu danych  jakie przychodzą po I2C. Masz możliwość przecież ustawiania pułapek czy podglądu zmiennych, wyczerpałeś tę drogę ???.  MPLABX IDE i PICKIT3 to bardzo dobry duet do sprzętowego debugowania a zakładam , że taki zestaw masz. Jeśli nie wiesz jak to zrobić to chętnie pomogę w tym zakresie.<br /></div><br /><br />Na razie próbowałem dwóch rzeczy:<br />1) Sprawdziłem komunikację przez I2C za pomocą prostego analizatora stanów logicznych Saleae. Wygląda na to, że dane są czytane prawidłowo.<br />2) Podejrzałem szesnastobitowe zmienne, przechowujące (już poskładane z dwóch odebranych bajtów) kopie rejestrów z danymi kalibracyjnymi. Mają właściwe typy i zawartość. To znaczy w zapisie hex widać, że składają się z tych samych bajtów, które chwilę wcześniej widziałem na analizatorze podpiętym do I2C.<br /><br />Jedyna dziwna rzecz wystąpiła, gdy chciałem podejrzeć wartości bufora odbiorczego, wykorzystywanego przy odczycie części MSB i LSB rejestrów kalibracyjnych. Tym razem skorzystałem uarta i zwykłej instrukcji printf(&quot;MSB: %x, LSB%x\n&quot;, buff[0], buff[1]). W dwóch miejscach zaobserwowałem dziwny efekt zamiany półbajtów miejscami w stosunku do tego, co pokazywał analizator i debugger<br />Czyli na przykład analizator pokazywał, że przez I2C szły kolejno dwa bajty: 0x12 oraz 0x0C. Debugger pokazał, że zostały one złożone w 0x120C. Natomiast wśród danych przesłanych przez serial pojawiało się coś takiego: &quot;MSB: 12, LSB: C0&quot;. To ma jakieś znaczenie? Czy raczej wina leży po stronie jakiegoś błędu w stdio.h?<br /><br />Dokładne dane z analizatora i podglądu zmiennych debuggera prześlę wieczorem, teraz nie mam do nich dostępu.<br /><br />Przeglądałem też kod funkcji odpowiedzialnych za obliczenia, porównując go z przykładem z dokumentacji czujnika. Wygląda w porządku. Zresztą na AVR ten sam kod działał,<br /><br />Testowałem układ także na innym czujniku BMP085 i występuje dokładne ten sam efekt, więc nie jest to chyba problem sprzętowy. No chyba, że obydwa czujniki będące w moim posiadaniu zostały dotknięte w tym samym momencie przez dokładnie taki sam problem. <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=2174">Atlantis</a> — 17 paź 2017, o 07:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wat1970]]></name></author>
<updated>2017-10-16T20:51:12+01:00</updated>
<published>2017-10-16T20:51:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197185#p197185</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197185#p197185"/>
<title type="html"><![CDATA[Re: Biblioteka BMP085 nie działa pod PIC32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197185#p197185"><![CDATA[
A próbowałeś trochę sprzętowego debugowania programu, np. podglądu danych  jakie przychodzą po I2C. Masz możliwość przecież ustawiania pułapek czy podglądu zmiennych, wyczerpałeś tę drogę ???.  MPLABX IDE i PICKIT3 to bardzo dobry duet do sprzętowego debugowania a zakładam , że taki zestaw masz. Jeśli nie wiesz jak to zrobić to chętnie pomogę w tym zakresie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2179">wat1970</a> — 16 paź 2017, o 20:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2017-10-16T17:58:03+01:00</updated>
<published>2017-10-16T17:58:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197168#p197168</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197168#p197168"/>
<title type="html"><![CDATA[Biblioteka BMP085 nie działa pod PIC32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19393&amp;p=197168#p197168"><![CDATA[
Przepraszam, że zawracam głowę, ale mam pewien problem, którego nie jestem w stanie rozwiązać. Patrzę w kod już kolejną godzinę przez kolejny dzień z rzędu i za nic nie mogę dojść do tego, co jest nie tak.<br /><br />Ale do rzeczy...<br />Jeszcze na AVR-ach używałem pewnej biblioteki do obsługi sensora temperatury i ciśnienia BMP085. Wszystko działało idealnie.<br />Teraz przenoszę pewien projekt na PIC32, więc zabrałem się za portowanie tej biblioteki. Nie wydawało się to niczym specjalnie trudnym - podmieniłem instrukcje odpowiedzialne za komunikację po I2C i zastąpiłem wszystkie typy zmiennych na takie, które jasno określają rozmiar, aby uniezależnić się od architektury (&quot;int16_t&quot; zamiast &quot;int&quot;, &quot;int32_t&quot; zamiast &quot;long&quot; itp.).<br /><br />Komunikacja po I2C najwyraźniej działa - sprawdzałem analizatorek stanów logicznych.<br />Temperatura jest czytana prawidłowo - różni się maksymalnie o 0.3 stopnia C od wskazań drugiego czujnika DHT22.<br />Natomiast wskazanie ciśnienia jest dziwne...<br /><br />[syntax=c]&quot;bmp&quot;: {&quot;temparature&quot;: 22.3, &quot;pressure&quot;: 332.16, &quot;timestamp&quot;: 1508172549}[/syntax]<br /><br />W załączniku kod dla PIC32 z moimi zmianami, a także oryginalna biblioteka dla AVR.<br /><br />Ktoś ma jakiś pomysł, co może być nie tak? <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=2174">Atlantis</a> — 16 paź 2017, o 17:58</p><hr />
]]></content>
</entry>
</feed>