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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-05-01T18:49:18+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=23&amp;t=7586&amp;mode</id>
<entry>
<author><name><![CDATA[Grzybeq8]]></name></author>
<updated>2020-05-01T18:49:18+01:00</updated>
<published>2020-05-01T18:49:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=226819#p226819</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=226819#p226819"/>
<title type="html"><![CDATA[Re: Czujnik natężenia światła- BH1750 Program testowy na AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=226819#p226819"><![CDATA[
Odgrzeję trochę kotleta, mam nadzieję, że mi wybaczycie.<br />[syntax=c]TWI_read_buf(BH1750_ADR, 0x2n, 2, light_buf);[/syntax]<br />Przy ustawieniu 0x2n (n=0 lub 1 lub 3) odczyt miałem tylko 1 raz - potem czujnik przechodzi w tryb uśpienia i nawet ponowne wywołanie Power On i Reset nie dawały efektu.<br />Pomogło przestawienie na 0x1n, czyli pracę w trybie odczytu ciągłego.<br /><br />Pozdrawiam!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21438">Grzybeq8</a> — 1 maja 2020, o 18:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2019-10-30T09:25:15+01:00</updated>
<published>2019-10-30T09:25:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=222788#p222788</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=222788#p222788"/>
<title type="html"><![CDATA[Re: Czujnik natężenia światła- BH1750 Program testowy na AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=222788#p222788"><![CDATA[
Nie jest bliższe prawdy - jest tożsame.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 30 paź 2019, o 09:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[karlowic]]></name></author>
<updated>2019-10-30T08:19:27+01:00</updated>
<published>2019-10-30T08:19:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=222786#p222786</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=222786#p222786"/>
<title type="html"><![CDATA[Re: Czujnik natężenia światła- BH1750 Program testowy na AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=222786#p222786"><![CDATA[
Przesunięcie bitowe o 1 w lewo jest bardziej bliskie prawdy niż pomnożenie x2. Teraz nawet ja wiem o co chodzi. <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=9685">karlowic</a> — 30 paź 2019, o 08:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zealota]]></name></author>
<updated>2019-10-29T12:22:44+01:00</updated>
<published>2019-10-29T12:22:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=222773#p222773</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=222773#p222773"/>
<title type="html"><![CDATA[Re: Czujnik natężenia światła- BH1750 Program testowy na AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=222773#p222773"><![CDATA[
<div class="quotetitle">karlowic napisał(a):</div><div class="quotecontent"><br />Dlaczego należy pomnożyć adres przez 2?<br /></div><br />Poczytaj o 7-bitowym adresie w komunikacji I2C - tak najczęściej jest przedstawiany adres w dokumentacji scalaków I2C.<br />Pomnożenie przez 2 to inaczej przesunięcie bitowe w lewo, o 1. Najmniej znaczący bit takiego bajtu determinuje o odczycie lub zapisie do urządzenia slave.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16487">Zealota</a> — 29 paź 2019, o 12:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[karlowic]]></name></author>
<updated>2019-10-29T11:53:48+01:00</updated>
<published>2019-10-29T11:53:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=222772#p222772</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=222772#p222772"/>
<title type="html"><![CDATA[Re: Czujnik natężenia światła- BH1750 Program testowy na AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=222772#p222772"><![CDATA[
Chcę wykorzystać czujnik BH1750. Ten wątek choć już bardzo stary bardzo mi w tym pomógł. Kod po małej modyfikacji sprawdził się wspaniale, działa bez problemu, jednak nie daje mi spokoju sprawa z adersem do tego czujnika.<br />W nocie adres jest 0x23, natomiast w kodzie <strong>Intre</strong> jest taka linijka:<br />[syntax=c]//adres czujnika &lt;span class=&quot;posthilit&quot;&gt;BH1750&lt;/span&gt; 0x23 przemnożony x2 dla trybu 8 bit<br />#define BH1750_ADR 0x46[/syntax] <br />Dlaczego należy pomnożyć adres przez 2?<br />PS<br />Znalazłem w internecie, w innym kodzie dotyczącym tego czujnika operację bitową na adresie (addr&lt;&lt;1).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9685">karlowic</a> — 29 paź 2019, o 11:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matw]]></name></author>
<updated>2014-08-17T20:59:37+01:00</updated>
<published>2014-08-17T20:59:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=91823#p91823</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=91823#p91823"/>
<title type="html"><![CDATA[Re: Czujnik natężenia światła- BH1750 Program testowy na AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=91823#p91823"><![CDATA[
O proszę, trochę odkopię temat bo sam ostatnio się bawiłem tym sensorkiem, zagłębiając nabytą wiedzę w C dla AVR-ków. Swoją przygodę z tym czujnikiem zacząłem dość przypadkowo, ale nie widziałem wcześniej tego tematu więc zacząłem pisać testowy program na podstawie datasheet-u <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Teraz gdy trafiłem tu na ten post kolegi @Intre, to znalazłem wiele podobieństw jakie stworzyłem w stosunku do kodu tu zaprezentowanego. Nie mniej jednak kilka moich spostrzeżeń i sugestii napiszę, bo może rozwieją one wszelkie wątpliwości i będą komuś pomocne.<br /><br />I tak, faktycznie jak słusznie zauważył kolega @jkarczew, jeśli korzystamy z funkcji <strong>lcd_int()</strong>,to faktycznie mogą się &quot;minusy&quot; pojawić, bo dla tej funkcji my mamy liczbę 16-bitową ze znakiem czyli operujemy za zakresie -32768 - 32767, a w rejestrze tegoż układu dane są w zakresie int bez znaku czyli 0 - 65535. Ja się  identycznie jak ty @Intre natknąłem na &quot;minusy&quot; bo w UART'cie wyświetlić chciałem dane, za pomocą funkcji z BB <strong>uart_putint()</strong>. Wystarczyło użycie funkcji dla long i nie ma już z tym problemu.<br /><br />Kolejna sprawa, to zauważyłem że jak liczysz wartość <strong>lux_light</strong>, to wystarczy ci typ uint16_t do tego celu, pozostałe działania robisz poprawnie, mam na myśli &quot;sklejenie&quot; dwóch bajtów: <strong>lux_light = (light_buf[0]&lt;&lt;8) + light_buf[1];</strong>. Pozostałe przeliczenia które tu podałeś na wartość LUX są także zgodne z tym co podano w nocie. Tu dodam, że jeśli nie potrzebujesz tej wartości LUX gdzieś wyświetlić lub zapisać, to nie ma sensu robić tych przeliczeń, do sterowania np. natężeniem świecenia LED'ów wystarczy jak porównasz lub porobisz sobie przedziały &quot;surowych&quot; wartości z rejestrów układu.<br /><br />Teraz jeszcze jedno, bo nie mam pewności, ale w DS tego sensora, jeśli dobrze zrozumiałem, to nie potrzeba na samym starcie wydawać polecenia <strong>BH1750_POWER_ON</strong>, gdyż ten robi to automatycznie po wydaniu któregokolwiek rozkazu pomiaru, także w przypadku tego modułu funkcja <strong>BH1750_init();</strong> jest wg. mnie zbędna. W każdym razie mi działa pomiar bez żadnej inicjalizacji. Oczywiście niczemu ona też nie szkodzi (tak mi się wydaje), także zasadność jej używania uznaję jako kwestię dowolną <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Ostatnia już sprawa, to czas oczekiwania na wykonanie pomiaru po wydaniu rozkazu. Może on być w zależności od wybranego trybu i rozdzielczości w przedziale od 16-120ms. U Ciebie @Intre nie widzę takiego opóźnienia, czego nie uważam oczywiście za błąd, bo masz przecież to zrealizowane poprzez cykliczne odczyty w timerze programowym, ale zwracam na to uwagę, że pierwszy twój pomiar po podaniu zasilania do układu zwróci 0, a kolejny pomiar da rezultat z poprzedniego rozkazu pomiarowego, także niejako masz rezultat z poprzedniego cyklu pomiaru. Ja u siebie użyłem paskudnego <strong>_delay_ms(120)</strong> w procedurze <strong>BH1750_read();</strong> i oczywiście zamierzam to w docelowych projektach oprzeć także o timer programowy, tak aby nie wprowadzać sobie żadnych dodatkowych opóźnień blokujących.<br /><br />Mam nadzieję, że moje skromne uwagi do czegoś się przydadzą, a w razie pytań lub wątpliwości chętnie odpowiem w oparciu o swoją wiedzę i nabyte w tym zakresie doświadczenie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2394">matw</a> — 17 sie 2014, o 20:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jkarczew]]></name></author>
<updated>2014-06-29T13:37:42+01:00</updated>
<published>2014-06-29T13:37:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=86067#p86067</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=86067#p86067"/>
<title type="html"><![CDATA[Re: Czujnik natężenia światła- BH1750 Program testowy na AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=86067#p86067"><![CDATA[
Nie mam teraz jak sprawdzić, ale wydaje mi się, że funkcja lcd_int nie wyświetla uint_32<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=593">jkarczew</a> — 29 cze 2014, o 13:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Intre]]></name></author>
<updated>2014-06-29T13:08:42+01:00</updated>
<published>2014-06-29T13:08:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=86066#p86066</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=86066#p86066"/>
<title type="html"><![CDATA[Re: Czujnik natężenia światła- BH1750 Program testowy na AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=86066#p86066"><![CDATA[
No dobra zrobiłem wg. noty i tak jak coś czułem jest nie tak <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Więc tak dane z noty:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />High Byte is &quot;10000011&quot; and Low Byte is &quot;10010000&quot;<br /></div><br /><br />Powinno wyjść: 28067<br /><br />[syntax=c]light_buf&#91;0&#93; = 0b10000011;<br />light_buf&#91;1&#93; = 0b10010000;<br /><br />lcd_locate(0,0);<br />lcd_int(light_buf&#91;0&#93;);  //wyświetla się decymalne 131<br />lcd_int(light_buf&#91;1&#93;);  //wyświetla się decymalne 144<br /><br />lux_light = (light_buf&#91;0&#93;&lt;&lt;8) | (light_buf&#91;1&#93;);<br /><br />lux_light = lux_light * 10;<br />lux_light = lux_light / 12;<br /><br />lcd_locate(1,0);<br />lcd_int(lux_light);[/syntax]<br /><br />No i coś nie tak bo wyświetla się -4702 I skąd ten &quot;-&quot; skoro to jest u_int? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Zrobiłem też wersje bez przesunięcia bitowego z + i z |. Przesunięcia o &lt;&lt;4 itp. zabiegi. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Jakieś pomysły? <br />To działanie w sumie możecie zrobić bez czujnika u siebie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1356">Intre</a> — 29 cze 2014, o 13:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jkarczew]]></name></author>
<updated>2014-06-29T11:29:34+01:00</updated>
<published>2014-06-29T11:29:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=86058#p86058</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=86058#p86058"/>
<title type="html"><![CDATA[Re: Czujnik natężenia światła- BH1750 Program testowy na AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=86058#p86058"><![CDATA[
Witam!<br /><br />A czy czasem w 3 linijce nie powinien być znak | zamiast +<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=593">jkarczew</a> — 29 cze 2014, o 11:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Intre]]></name></author>
<updated>2014-06-28T22:50:10+01:00</updated>
<published>2014-06-28T22:50:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=86030#p86030</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=86030#p86030"/>
<title type="html"><![CDATA[Re: Czujnik natężenia światła- BH1750 Program testowy na AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=86030#p86030"><![CDATA[
Dambo dzięki za wskazówkę czy twoim zdaniem taki zapis jest prawidłowy? :<br /><br />[syntax=c]uint32_t lux_light;<br /> <br />lux_light = (light_buf&#91;0&#93;&lt;&lt;8) + light_buf&#91;1&#93;;<br />lux_light = lux_light * 10;<br />lux_light = lux_light / 12;<br /><br />lcd_locate(1,0);<br />lcd_int(lux_light);[/syntax]<br /><br />No przeliczają się wartości ale nie jestem do końca pewien czy jest to dobrze. W sumie się zastanawiam jak można sprawdzić te wskazania takim domowym sposobem o ile jest to możliwe nie mając dedykowanego urządzenia fabrycznego.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1356">Intre</a> — 28 cze 2014, o 22:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2014-06-28T09:14:25+01:00</updated>
<published>2014-06-28T09:14:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85972#p85972</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85972#p85972"/>
<title type="html"><![CDATA[Re: Odp: Czujnik natężenia światła- BH1750 Program testowy n]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85972#p85972"><![CDATA[
Tez sie glowilem nad zakupem tego ukladu. Ostatecznie w lapki wpadl mi malutki fotorezystor i czytam go po ADC lecz patrzac na twoj kodzik to jest czytelny i widze ze nie ma wiekszego problemu by sie z ukladem skomunikowac.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 28 cze 2014, o 09:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Intre]]></name></author>
<updated>2014-06-28T09:12:07+01:00</updated>
<published>2014-06-28T09:12:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85971#p85971</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85971#p85971"/>
<title type="html"><![CDATA[Re: Czujnik natężenia światła- BH1750 Program testowy na AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85971#p85971"><![CDATA[
<img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" />  wow, miłe to co piszecie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ale żeby to trafiło do działu DIY to myślę że trzeba by jeszcze rozwiązać tą kwestie przeliczania wyniku na Luxy<br /><br />W nocie jest napisane coś takiego:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />How to calculate when the data High Byte is &quot;10000011&quot; and Low Byte is &quot;10010000&quot;<br />( 2 15 + 2 9 + 2 8 + 2 7 + 2 4 ) / 1.2 ≒ 28067 [ lx ]<br /></div> (to są potęgi przy tych liczbach nota str.7 do spojrzenia.) <br /><br />Biblioteka od Arduino do tego czujnika z tego co z niej zrozumiałem za pomocą przesunięć bitowych wpisuje wartości do 1 liczby uint16_t a następnie dzieli przez 1,2 zgodnie więc z powyższym wzorem. No ale wiadomo działania za pomocą liczb z przecinkiem to nie bardzo w AVR. Więc trzeba by zrobić jakby jakąś metodę matematyczną przeliczania tego wyniku by uniknąć liczby zmiennoprzecinkowej. Ktoś ma jakieś pomysły? <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=1356">Intre</a> — 28 cze 2014, o 09:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2014-06-28T08:47:16+01:00</updated>
<published>2014-06-28T08:47:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85970#p85970</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85970#p85970"/>
<title type="html"><![CDATA[Re: Czujnik natężenia światła- BH1750 Program testowy na AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85970#p85970"><![CDATA[
Fajny projekt.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 28 cze 2014, o 08:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-06-28T04:24:38+01:00</updated>
<published>2014-06-28T04:24:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85965#p85965</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85965#p85965"/>
<title type="html"><![CDATA[Re: Czujnik natężenia światła- BH1750 Program testowy na AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85965#p85965"><![CDATA[
To się nadaje do działu DIY - projekty programistyczne ...<br /><br /><div class="quotetitle">Intre napisał(a):</div><div class="quotecontent"><br />Mam nadzieje że program jest czytelny więc nie będę go dodatkowo opisywać.<br /></div><br /><br />aż serce rośnie jak się widzi TAK napisane kody źródłowe ... ten kod wręcz tłumaczy się sam <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... w ogóle fajny arcik. Gratki Intre - miło się czyta ...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 28 cze 2014, o 04:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Intre]]></name></author>
<updated>2014-06-28T03:56:31+01:00</updated>
<published>2014-06-28T03:56:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85964#p85964</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85964#p85964"/>
<title type="html"><![CDATA[Czujnik natężenia światła- BH1750 Program testowy na AVR w C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7586&amp;p=85964#p85964"><![CDATA[
W ramach nauki by wyjść jakby poza przykłady z BB i Grenn booków, zaczynam eksperymentować z rzeczami bliżej mi nie znanymi <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />W sumie jakby na 1 ogień poszedł taki czujnik natężenia światła BH1750, który sobie nabyłem z stąd: <br /><a href="http://botland.com.pl/czujniki-swiatla-i-koloru/2024-czujnik-natezenia-swiatla-bh1750.html"  class="postlink">http://botland.com.pl/czujniki-swiatla-i-koloru/2024-czujnik-natezenia-swiatla-bh1750.html</a> <br />dokładnie ten model jako moduł na gotowej PCB:<br /><a href="http://forum.atnel.pl/_obrazki/o/1356/7cd06b5238ea0281cf26bbf3b2bf69c6.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1356/7cd06b5238ea0281cf26bbf3b2bf69c6.jpg" alt="Obrazek" /></a><br /><br />link do noty układu (dodaje także jako załącznik do posta): <a href="http://www.elechouse.com/elechouse/images/product/Digital%20light%20Sensor/bh1750fvi-e.pdf"  class="postlink">http://www.elechouse.com/elechouse/images/product/Digital%20light%20Sensor/bh1750fvi-e.pdf</a><br /><br />Wiadomo można sobie z powodzeniem takowy czujnik zrobić za pomocą fotorezystora i pomiaru ADC ale mi chodzi raczej o ćwiczenia z czymś nowym w komunikacji I2C.<br />Po małych perypetiach związanych z nawiązaniem komunikacji z w/w czujnikiem, a raczej jego błędnym adresowaniu, które pomógł mi rozwiązać kolega <strong>Rezasurmar </strong>za co mu serdecznie dziękuję, zrobiłem taki oto program do jego testowania:<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br />  *  Created on: 28-06-2014<br /> *      Author: Intre<br /> *<br /> *  MCU Type: Atemega 32<br /> *  Clock: 11059200 Mhz<br /> *<br /> *<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;      //biblioteka Mikrokontrolery AVR Język C Podstawy programowania M. Kardaś<br />#include &quot;I2C_TWI/i2c_twi.h&quot;   //biblioteka Mikrokontrolery AVR Język C Podstawy programowania M. Kardaś<br /><br /><br /><br />//definicja dla diody<br />#define LED1 (1&lt;&lt;PC7)// definicja pinu do którego podłączona jest dioda<br />#define LED1_OFF PORTC |= LED1// makrodefinicja – wyłączenie diody<br />#define LED1_TOG PORTC ^= LED1// makrodefinicja – zmiana stanu diody<br /><br />//adres czujnika BH1750 0x23 przemnożony x2 dla trybu 8 bit<br />#define BH1750_ADR 0x46<br /><br />// załączenie czujnika<br />#define BH1750_POWER_ON 0x01<br /><br />// reset rejestru pomiaru<br />#define BH1750_RESET 0x07<br /><br />//tryby pomiaru do wybrania<br />#define BH1750_ONE_TIME_HIGH_RES_MODE    0x20<br />#define BH1750_ONE_TIME_HIGH_RES_MODE_2  0x21<br />#define BH1750_ONE_TIME_LOW_RES_MODE     0x23<br /><br />// bufor dla dczytu pomiarów<br />uint8_t light_buf &#91;2&#93;;<br /><br />//zmienne oraz deklaracja funkcji inicjalizacji dla Timerów programowych<br />volatile uint16_t cnt;<br />volatile uint16_t Timer1, Timer2;<br />void timer2_init ( void );<br /><br />//deklaracje funkcji dla inicjalizaji i odczytu danych z czujnika BH1750<br />void BH1750_init (void);<br />void BH1750_read (uint8_t Adress, uint8_t Mode, uint8_t Length, uint8_t *buf);<br /><br /><br />int main(void) {<br /><br />DDRC |= LED1;<br />LED1_OFF;<br /><br />DDRA |= (1&lt;&lt;PA7);// ustawiamy kierunek linii podświetlenia LCD jako WYJŚCIE<br />PORTA |= (1&lt;&lt;PA7);// załączamy podświetlenie LCD - stan wysoki<br /><br />// inicjalizacja Timera<br />timer2_init();<br /><br />// inicjalizacja LCD<br />lcd_init();<br /><br />// ustawienie prędkość 100 kHz na magistrali I2C<br />i2cSetBitrate( 100 );<br /><br />// zezwolenie na przerwania<br />sei();<br /><br />//napis startowy<br />lcd_locate(0,3);<br />lcd_str_P(PSTR(&quot;BH1750 TEST&quot;));<br />_delay_ms(1000);<br />lcd_cls();<br /><br />//inicjalizacja BH1750_ADR<br />BH1750_init();<br /><br />//pętla główna<br />while(1) {<br /><br />lcd_locate(0,0);<br />lcd_str (&quot;POMIAR LUX:&quot;);<br />lcd_locate(1,0);<br />lcd_int(light_buf&#91;0&#93;);<br />lcd_int(light_buf&#91;1&#93;);<br /><br /><br />if( !Timer1 ) {<br />Timer1=200;<br />BH1750_read( BH1750_ADR, BH1750_ONE_TIME_HIGH_RES_MODE, 2, light_buf );<br />}<br /><br /><br />if( !Timer2 ) {<br />Timer2=100;<br />LED1_TOG;<br />lcd_cls();<br />}<br /><br />}<br />}<br /><br />//funkcja inicjalizacji pracy czujnika BH1750<br />void BH1750_init (void){<br />TWI_start();<br />TWI_write(BH1750_ADR);<br />TWI_write(BH1750_POWER_ON);<br />TWI_write(BH1750_RESET);<br />TWI_stop();<br />}<br /><br />//funkcja odczytu danych z czujnika BH1750<br />void BH1750_read(uint8_t Adress, uint8_t Mode, uint8_t Length, uint8_t *buf) {<br />TWI_start();<br />TWI_write(Adress);<br />TWI_write(Mode);<br />TWI_start();<br />TWI_write(Adress +1);<br />while (Length--) *buf++ = TWI_read( Length ? ACK : NACK );<br />TWI_stop();<br />}<br /><br />//funkcja inicjalizacji Timera 2<br />void timer2_init ( void ){<br />TCCR2 |= (1&lt;&lt;WGM21);            // tryb pracy CTC<br />TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);// preskaler = 1024<br />OCR2 = 107;            // przerwanie porównania co 10ms (100Hz)<br />TIMSK |= (1&lt;&lt;OCIE2);            // Odblokowanie przerwania CompareMatch<br />}<br /><br />// obsługa przerwania Timera 2<br />ISR(TIMER2_COMP_vect){<br />cnt = Timer1;<br />if (cnt) Timer1 = --cnt;<br />cnt = Timer2;<br />if (cnt) Timer2 = --cnt;<br />}[/syntax]<br /><br />Mam nadzieje że program jest czytelny więc nie będę go dodatkowo opisywać. Napisałem go i testowałem na ATB z Atmega32 oraz zegarem 11059200 Mhz. Do komunikacji z czujnikiem przez I2C oraz wyświetlania pomiaru na LCD wykorzystałem biblioteki Mirka z niebieskiej książki. <br /><br />Dopowiem tylko że przy podłączaniu czujnika proszę zwrócić uwagę na to że pomimo, iż na module widnieją rezystory 4,7K to i tak należy linie SDA i SCL podciągnąć rezystorem 4,7K do VCC. Mi wydawało się że moduł już to po prostu ma,  jednakże należy go potraktować jak by był scalakiem i takowe rezystory podciągające wstawić bo inaczej po prostu nie działa. <br /><br />W programie brakuje przeliczania danych pomiaru na wartość Lux. Jak wyczytacie z noty albo po analizie programu wynik pomiaru zapisuje się w dwóch bajtach H i L. Ja sobie je wyświetlam jeden obok drugiego odczytując wartości z tablicy. Myślę że by jednak wypadało zrobić działanie matematyczne, które by takowy wynik przeliczało na wartości lux. Ja jednakże nie mam pomysłu na razie jak i liczę na to że, ktoś może coś doradzi albo 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=1356">Intre</a> — 28 cze 2014, o 03:56</p><hr />
]]></content>
</entry>
</feed>