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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-01-07T09:34:57+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14089&amp;mode</id>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2016-01-07T09:34:57+01:00</updated>
<published>2016-01-07T09:34:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149871#p149871</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149871#p149871"/>
<title type="html"><![CDATA[Re: Funkcja callback - prośba o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149871#p149871"><![CDATA[
<div class="quotetitle">krafin napisał(a):</div><div class="quotecontent"><br />Co do 1 obiegu pętli to raczej nie jest to ok. chyba że tak zmula ci obsługa NTP. Po co pobierać czas non stop starczy raz na kilka sekund czy nawet minut.<br /></div><br />Dziękuję. Czas nie jest pobierany non-stop tylko w odstępach określonych w funkcji GetNTPEvent(...). Niestety po włączeniu do pętli while(1) eventów BMP i DHT22 timer programowy, który napędzał odliczanie w tej funkcji czasu do synchronizacji całkowicie się rozjechał. Postanowiłem nie walczyć z tym problemem (po wielu próbach) i do odliczania czasu wdrożyłem timer sprzętowy.<br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 7 sty 2016, o 09:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krafin]]></name></author>
<updated>2016-01-06T22:16:55+01:00</updated>
<published>2016-01-06T22:16:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149852#p149852</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149852#p149852"/>
<title type="html"><![CDATA[Re: Funkcja callback - prośba o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149852#p149852"><![CDATA[
Co do DHT to działało to w ten sposób że timer 1 był skonfigurowany jako ICP i wyzwalany zboczem opadającym. W obsłudze przerwania porównywałem wartość aktualną timera z poprzednią, dzięki czemu wiedziałem ile trwał jeden bit i czy był on 1 czy 0. Właściwie po sekwencji startu całość działała &quot;automatycznie&quot; i po odebraniu 40 bitów była ustawiana flaga i w pętli już można było odczytać gotową temperaturę. <br />Co do 1 obiegu pętli to raczej nie jest to ok. chyba że tak zmula ci obsługa NTP. Po co pobierać czas non stop starczy raz na kilka sekund czy nawet minut.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=487">krafin</a> — 6 sty 2016, o 22:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2016-01-05T23:42:06+01:00</updated>
<published>2016-01-05T23:42:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149763#p149763</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149763#p149763"/>
<title type="html"><![CDATA[Re: Funkcja callback - prośba o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149763#p149763"><![CDATA[
<div class="quotetitle">krafin napisał(a):</div><div class="quotecontent"><br />Po 1: Wprowadź sobie kilka timerów programowych lub jeden wielki 32 bitowy i w eventach czytaj czujniki co określony czas (niewiem jakiego potrzebujesz może być 10ms może być 10s) teraz wszystko jest aktualizowane &quot;ile pętla dała  &quot;<br />Po 2: DHT22 wymaga aktualizacji jak już wspomniałeś co nie mniej niż 1.5s - to wieczność. Wywal je i jak już mówiłem odczyty rób z uwzględnieniem timera. Można też bardzo ładnie te czujki obsłużyć przerwaniami i jednym globalnym timerem programowym - ale o to już nie męczę bo to bardziej skomplikowane.<br />Po 3: Typy zmiennoprzecinkowe też zwalniają jednak gdy będzie całość czytana co określone interwały czasowe to nie powinno być to wielkim problemem.<br /></div><br />Bardzo dziękuję. Zaraz ogarnę eventy timerami i dam znać. Napisz proszę o tej bardziej skomplikowanej obsłudze DHT22 - mam otwarty umysł i myślę, że ogarnę temat z Twoją oczywiście pomocą (będę wdzięczny). Rozumiem, że LED_TOG co 300-500ms w pętli while(1) obciążonej kilkoma eventami to normalne zjawisko?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 5 sty 2016, o 23:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krafin]]></name></author>
<updated>2016-01-05T23:14:17+01:00</updated>
<published>2016-01-05T23:14:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149760#p149760</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149760#p149760"/>
<title type="html"><![CDATA[Re: Funkcja callback - prośba o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149760#p149760"><![CDATA[
Po 1: Wprowadź sobie kilka timerów programowych lub jeden wielki 32 bitowy i w eventach czytaj czujniki co określony czas (niewiem jakiego potrzebujesz może być 10ms może być 10s) teraz wszystko jest aktualizowane &quot;ile pętla dała <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> &quot;<br />Po 2: DHT22 wymaga aktualizacji jak już wspomniałeś co nie mniej niż 1.5s - to wieczność. Wywal je i jak już mówiłem odczyty rób z uwzględnieniem timera. Można też bardzo ładnie te czujki obsłużyć przerwaniami i jednym globalnym timerem programowym - ale o to już nie męczę bo to bardziej skomplikowane.<br />Po 3: Typy zmiennoprzecinkowe też zwalniają jednak gdy będzie całość czytana co określone interwały czasowe to nie powinno być to wielkim problemem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=487">krafin</a> — 5 sty 2016, o 23:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2016-01-05T20:26:54+01:00</updated>
<published>2016-01-05T20:26:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149737#p149737</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149737#p149737"/>
<title type="html"><![CDATA[Re: Funkcja callback - prośba o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149737#p149737"><![CDATA[
<div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br />tak mi się nasuwa jeszcze pytanie - a co jest jak zostawisz sam EVENT DTH22 i zakomentujesz tą linię<br />// dht_gettemperaturehumidity(&amp;temperature, &amp;humidity);<br /><br />co prawda nie pobierze Ci wyników, ale pokaże czy callback spowalnia czy nie<br /></div><br /><br />Sprawdziłem. Oba eventy spowalniają program, niezależnie co jest w ich ciele. Zakomentowanie pomiarów ciśnienia i wilgotności nic nie zmienia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 5 sty 2016, o 20:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2016-01-05T15:07:33+01:00</updated>
<published>2016-01-05T15:07:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149724#p149724</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149724#p149724"/>
<title type="html"><![CDATA[Re: Funkcja callback - prośba o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149724#p149724"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />tak mi się nasuwa jeszcze pytanie - a co jest jak zostawisz sam EVENT DTH22 i zakomentujesz tą linię<br />// dht_gettemperaturehumidity(&amp;temperature, &amp;humidity);<br /><br />co prawda nie pobierze Ci wyników, ale pokaże czy callback spowalnia czy nie<br /></div><br />Dziękuję Ci bardzo za zainteresowanie. To jest dobry pomysł z zakomentowaniem operacji dokonania pomiaru. Gdy wrócę do domu wieczorem (ok. 21) przetestuję i dam znać. Nie bardzo mi się podoba sekwencja: DHT22_EVENT() -&gt; pomiar -&gt; callback -&gt; odczyt. Musi być przecież odpowiedni czas na start pomiaru i odczyt. Dobrze by było może zainicjować pomiar w czasie eventu, ale wywołanie funkcji callback odwlec w czasie, aby czujnik zmierzył (potrzebuje ok. 2, sekund tak wyczytałem). Ale eventy nadchodzą tak szybko... Zmiany wilgotności czujnik rejestruje, ale z dużym opóźnieniem są wyświetlane gdy czynnik sprawczy już nie działa co może świadczyć o problemach z czasami pomiar-odczyt. Przykładowy blokujący kod w c dla tego czujnika obejmuje pomiar i opóźnienie 1500ms w pętli while(1).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 5 sty 2016, o 15:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2016-01-05T12:44:10+01:00</updated>
<published>2016-01-05T12:44:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149715#p149715</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149715#p149715"/>
<title type="html"><![CDATA[Re: Funkcja callback - prośba o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149715#p149715"><![CDATA[
tak mi się nasuwa jeszcze pytanie - a co jest jak zostawisz sam EVENT DTH22 i zakomentujesz tą linię<br />// dht_gettemperaturehumidity(&amp;temperature, &amp;humidity);<br /><br />co prawda nie pobierze Ci wyników, ale pokaże czy callback spowalnia czy nie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 5 sty 2016, o 12:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2016-01-05T11:37:19+01:00</updated>
<published>2016-01-05T11:37:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149713#p149713</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149713#p149713"/>
<title type="html"><![CDATA[Re: Funkcja callback - prośba o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149713#p149713"><![CDATA[
<div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br />a spróbuj jeszcze sam BMP180_EVENT()??<br />oraz potem sam DHT22_EVENT() - bo jeden z nich spowalnia a nie oba na raz.<br /></div><br />Próbowałem wczoraj. Obie spowalniają, ale pojedynczo dużo bardziej DHT22_EVENT() niż BMP180_EVENT(). Jedynie ich zakomentowanie w while(1) przywraca sprawność programu. Może jest jakiś problem z wywoływanie callbacków, którego nie widzę?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 5 sty 2016, o 11:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2016-01-05T11:16:31+01:00</updated>
<published>2016-01-05T11:16:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149711#p149711</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149711#p149711"/>
<title type="html"><![CDATA[Re: Funkcja callback - prośba o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149711#p149711"><![CDATA[
a spróbuj jeszcze sam BMP180_EVENT()??<br />oraz potem sam DHT22_EVENT() - bo jeden z nich spowalnia a nie oba na raz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 5 sty 2016, o 11:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2016-01-05T10:20:16+01:00</updated>
<published>2016-01-05T10:20:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149707#p149707</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149707#p149707"/>
<title type="html"><![CDATA[Re: Funkcja callback - prośba o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149707#p149707"><![CDATA[
<div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br />Ja bym zaczął od sprawdzenia na którym EVENT'cie jest opóźnienie<br />Masz ich dodatkowo trzy<br />IR_EVENT();<br />BMP180_EVENT();<br />DHT22_EVENT();<br />Od tego bym zaczął.<br />najpierw wywal wszystkie 3 - sprawdź co ile odświeża czas potem dołóż pierwszego, itd.<br />Ograniczy to w szybki sposób zakres poszukiwania błędu.<br /></div><br />Dzięki. Wprowadzenie dwóch eventów BMP180_EVENT() i DHT22_EVENT() rozłożyło synchronizację. Pozostałe eventy są bez wpływu na nią:<br />RTC_EVENT(), UART_RX_STR_EVENT(uart_buf), IR_EVENT().<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 5 sty 2016, o 10:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2016-01-05T10:08:36+01:00</updated>
<published>2016-01-05T10:08:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149705#p149705</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149705#p149705"/>
<title type="html"><![CDATA[Re: Funkcja callback - prośba o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149705#p149705"><![CDATA[
Ja bym zaczął od sprawdzenia na którym EVENT'cie jest opóźnienie<br />Masz ich dodatkowo trzy<br />                IR_EVENT();<br />                BMP180_EVENT();<br />                DHT22_EVENT();<br />Od tego bym zaczął. <br />najpierw wywal wszystkie 3 - sprawdź co ile odświeża czas potem dołóż pierwszego, itd. <br />Ograniczy to w szybki sposób zakres poszukiwania błędu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 5 sty 2016, o 10:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2016-01-05T06:46:39+01:00</updated>
<published>2016-01-05T06:46:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149702#p149702</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149702#p149702"/>
<title type="html"><![CDATA[Re: Funkcja callback - prośba o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149702#p149702"><![CDATA[
Witam.<br />Proszę o sprawdzenie  prawidłowości rejestracji i wywołania w/w funkcji callback. Czy takie podejście do obsługi tych czujników jest słuszne i ma szansę działać prawidłowo. BMP180_EVENT() i DHT22_EVENT() wywoływane są w pętli while(1) bardzo wolno jak na szybkość obiegu tej pętli (nie wiem dlaczego). Dioda wstawiona w ciało eventa zmienia stan co ok. 0.5s. (powinna świecić non-stop tylko trochę słabiej). Próbowałem timerami programowymi zwolnić częstość odczytu z czujników w evencie do co 3s, ale to nic nie zmienia. W związku ze zwolnieniem pętli zmniejsza się tempo wywołań w pętli while(1)<br />[syntax=c]GetNtpTime_EVENT (&amp;Timer2, 0, 1, 0, NULL);[/syntax] co bezpośrednio rzutuje na odliczanie czasu do synchronizacji. Miało być nie blokująco, a blokuje <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 5 sty 2016, o 06:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[avrfun]]></name></author>
<updated>2016-01-04T20:51:42+01:00</updated>
<published>2016-01-04T20:51:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149685#p149685</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149685#p149685"/>
<title type="html"><![CDATA[Funkcja callback - prośba o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14089&amp;p=149685#p149685"><![CDATA[
Witam!<br />W &quot;Dawcy czasu - mikrostacja pogodowa&quot; wykorzystuję czujnik BMP180 i DHT22. Gdy ich obsługę powierzam zdarzeniu RTC_EVENT() wszystko działała dobrze. Postanowiłem napisać zdarzenie dla każdego z nich ( BMP180_EVENT() i DHT22_EVENT() ) i zaczęły się schody tzn. zdarzenia działają, ale bardzo opóźniają pętlę główną programu co wydłuża czas do następnej synchronizacji np. ma być co 10min., a jest co 13 i im. dłuższe czasy tym opóźnienia większe. Proszę o sprawdzenie zdarzeń i prawidłowości wywołania funkcji callback.<br /><br />bmp180.c<br />[syntax=c]void (*bmp180_callback)(void);<br /><br />void register_bmp180_callback( void (*callback)(void)){<br />bmp180_callback = callback;<br />}<br /><br />void BMP180_EVENT(){<br /><br />temp = BMP180_gett();  /* odczyt ciśnienia - zawsze konieczna jest sekwencja wywołania: BMP_gett i BMP_getp */<br />press = BMP180_getp(); /* odczyt temperatury - bo ciśnienie obliczane jest dla danej chwilowej temperatury */<br /><br />if(bmp180_callback) bmp180_callback();<br />}[/syntax]<br />dht22.c<br />[syntax=c]void (*dht22_callback)(void);<br /><br />void register_dht22_callback( void (*callback)(void)){<br />dht22_callback = callback;<br />}<br /><br />void DHT22_EVENT(){<br /><br />dht_gettemperaturehumidity(&amp;temperature, &amp;humidity);<br /><br />if(dht22_callback) dht22_callback();<br />}[/syntax]<br />main.c<br />[syntax=c]register_bmp180_callback(BMP180_ShowOnLCD);<br />register_dht22_callback(DHT22_ShowOnLCD);[/syntax]<br />[syntax=c]while(1){<br /><br />UART_RX_STR_EVENT(uart_buf);<br />RTC_EVENT();<br />GetNtpTime_EVENT(&amp;Timer3, 0, 1, 0, NULL);<br />IR_EVENT();<br />BMP180_EVENT();<br />DHT22_EVENT();[/syntax]<br />Funkcje własne wywoływane przez zdarzenie:<br />[syntax=c]void BMP180_ShowOnLCD(void){<br /><br />lcd_locate(1,0);<br />lcd_int(press/100);<br />lcd_str(&quot;.&quot;);<br />if (press%100&lt;10) lcd_str(&quot;0&quot;);<br />lcd_int(press%100);<br />lcd_str(&quot;hPa&quot;);<br />}[/syntax]<br />[syntax=c]void DHT22_ShowOnLCD(void){<br /><br />lcd_locate(0,11);<br />lcd_str(dtostrf(temperature, 3, 1, printbuff));<br />lcd_str(&quot;\x80&quot;); /* wyświetlenie własnego znaku &quot;stopień&quot; na LCD */<br />lcd_locate(1,11);<br />lcd_str(dtostrf(humidity, 3, 1, printbuff));<br />lcd_str(&quot;%&quot;);<br />}[/syntax]<br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9310">avrfun</a> — 4 sty 2016, o 20:51</p><hr />
]]></content>
</entry>
</feed>