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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-11-03T19:52:39+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=16663&amp;mode</id>
<entry>
<author><name><![CDATA[RadekB86]]></name></author>
<updated>2016-11-03T19:52:39+01:00</updated>
<published>2016-11-03T19:52:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173642#p173642</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173642#p173642"/>
<title type="html"><![CDATA[Re: Zarejestrowanie najniższej odczytanej temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173642#p173642"><![CDATA[
O tak dobrze mnie koledzy nakierowali właśnie zupełnie wyleciało mi z głowy żeby liczbę przeciekową &quot;przerobić&quot; na całkowitą do porównania ...eh a pomyśleć że sam już to robiłem tylko w odwrotną stronę bo chciałem konkretną cyferkę podać na wyświetlacz LED i tam również dokonywałem takich &quot;obliczeń&quot; i do tego wykorzystywałem jeszcze operator &quot;miodulo&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Poniżej moje rozwiązanie najpierw deklaracje zmiennych do zapisu:<br />[syntax=c]//********************rejestracja najniżej temperatury************<br />    uint8_t subzero2,temp_low_ca,temp_low_dz;//najniższa temperatura częśc całkowita i dziesiętna<br />    int16_t suma_temp_act;//suma cz dziesietnej i przecinkowej temperatura aktualna<br />    int16_t suma_temp_low;//suma cz dziesietnej i przecinkowej temperatura najniższa<br />    //********************zrejestracja najniżej temperatury************[/syntax]<br />Potem w funkcji głównej zaraz po odczycie z czujnika jeszcze przed pętlą while(1):<br />[syntax=c]DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits);<br />//********************rejestracja najniżej temperatury************<br />        temp_low_ca=cel;<br />        temp_low_dz=cel_fract_bits;<br />     suma_temp_low =((temp_low_ca*10)+temp_low_dz);<br />        if(subzero)suma_temp_low =(((temp_low_ca*10)+temp_low_dz)*-1);<br />//********************zrejestracja najniżej temperatury************[/syntax]<br />I na koniec już w pętli while(1) zaraz po 1 fladze odczytaniu z 1 czujnika[syntax=c]//********************rejestracja najniższej temperatury************  <br />                                            suma_temp_act =((cel*10)+cel_fract_bits);<br />                                            if(subzero)suma_temp_act =(((cel*10)+cel_fract_bits)*-1);<br />                                            <br />                             //********************rejestracja najniższej temperatury************            <br />                                            //zapis najniższej temperatury do zmiennej ze znakiem<br />                                            if (suma_temp_act&lt;suma_temp_low){<br />                                            suma_temp_low=suma_temp_act;<br />                                           //na zmienne bez znaku<br />                                            subzero2=subzero;<br />                                            temp_low_ca=cel;<br />                                            temp_low_dz=cel_fract_bits;<br />                                                }<br />                           //********************rejestracja najniższej temperatury************[/syntax]<br /><br />Dziękuje i najważniejsze że osiągnąłem zamierzony efekt. <img src="https://forum.atnel.pl/images/smilies/icon_cool.gif" alt="8-)" title="Cool" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1837">RadekB86</a> — 3 lis 2016, o 19:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-10-30T22:13:26+01:00</updated>
<published>2016-10-30T22:13:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173245#p173245</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173245#p173245"/>
<title type="html"><![CDATA[Re: Zarejestrowanie najniższej odczytanej temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173245#p173245"><![CDATA[
ha...<br />No właśnie.  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Na<strong> int</strong>'ach to nawet nie trzeba dodawać przykładowych 2000.  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  Fajnie.  <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=11549">Daro69</a> — 30 paź 2016, o 22:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-10-30T21:32:46+01:00</updated>
<published>2016-10-30T21:32:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173240#p173240</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173240#p173240"/>
<title type="html"><![CDATA[Re: Zarejestrowanie najniższej odczytanej temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173240#p173240"><![CDATA[
nie dość , że już w niejednym poradniku takie zagadnienia poruszałem - to powiedz mi pan - czy tak trudno sobie zrobić temperaturę bez przecinka ?<br /><br /><span style="color: #0040FF">(część_przed_przecinkiem * 10) + część_ po_przecinku</span> ? Oczywiście jeśli temperatura ujemna to mnożysz tę liczbę * -1<br /><br />dzięki czemu do wszelkich porównań będziesz używał liczby całkowitej. Czyli np nie temperatura <span style="color: #FF0000">18,5</span> tylko <span style="color: #0080FF"><strong>185 </strong></span>, nie temperatura <span style="color: #FF0000">12,3</span> tylko <strong><span style="color: #0080FF">123</span></strong>, nie temperatura <span style="color: #FF0000">-5,4</span> tylko <strong><span style="color: #0080FF">-54</span></strong><br /><br /><br />i porównujesz ile wlezie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 30 paź 2016, o 21:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-10-30T20:24:46+01:00</updated>
<published>2016-10-30T20:24:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173225#p173225</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173225#p173225"/>
<title type="html"><![CDATA[Re: Zarejestrowanie najniższej odczytanej temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173225#p173225"><![CDATA[
może jakoś w tę stronę?<br />zamienić temperaturę na liczbę ciągłą ?<br /><br />poglądowo!!<br /><br />[syntax=c]uint16_t temp_pomiar ;<br />uint16_t temp_zapis;<br /><br />/*wynikiem będzie ilość dziesiętnych temperatury  - 2*ilość dziesiętnych temp ujemnej - jeżeli jest ujemna!<br />dla -20,2°C  --&gt;  2000+202 - 2*(1*202)=1798 <br />dla +20,2°C --&gt; 2000+202 - 2*(0*202)=2202*/<br />temp_pomiar=2000 +(    ((10*cel) +cel_fract_bits) -  ( 2* (subzero*((10*cel) +cel_fract_bits))  );<br /><br />temp_zapis  =2000 +(    ((10*cel) +zapisane_cel_fract_bits) -  ( 2* (zapisane_subzero*((10*cel) +zapisane_cel_fract_bits))  );<br /><br />if(temp_pomiar&lt;temp_zapis) {<br />   zapisane_subzero=subzero;<br />   zapisane_cel = cel;<br />   zapisane_cel_fract_bits = cel_fract_bits;<br />   }[/syntax]<br /> <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" />  tak mi się wymyśliło.  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />a kolega QuadMan był szybszy i profesjonalniejszy.  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 30 paź 2016, o 20:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2016-10-30T20:24:00+01:00</updated>
<published>2016-10-30T20:24:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173224#p173224</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173224#p173224"/>
<title type="html"><![CDATA[Re: Zarejestrowanie najniższej odczytanej temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173224#p173224"><![CDATA[
Witam,<br /><br />poniżej masz szkielet pętli głównej:[syntax=c]int main( void )<br />    {<br /><br />    int16_t temp_act = 0, temp_low = 5000;<br />    uint8_t subzero, cel, cel_fract_bits;<br /><br />    while(1)<br />    {<br />    DS18x20_start_meas(....);<br /><br />    delay_ms(750);<br /><br />    DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits);<br /><br />          temp_act = 10 * cel + cel_fract_bits;<br />          if(subzero)<br />          {<br />          temp_act = ~temp_act + 1;// Wartosc ujemna - reprezentacja w U2 -&gt; zanegowac i dodac 1<br />          }<br /><br />          temp_low=cel;<br /><br />          if(temp_act &lt; temp_low)<br />          {<br />          // Aktualna temperatura mniejsza niz ta, która była wyświetlana jako minimalna.<br />          temp_low = temp_act;<br />          display( subzero);// Te funkcje display maja przepisywac te zmienne do pamieci wyswietlacza<br />          display(cel);// A samo wyswietlanie poza tym warunkiem<br />          display(cel_fract_bits);<br />          }<br /><br />          LCD_DISPLAY(....)// Wyswietlanie temperatury.<br /><br />    }<br /><br />    }[/syntax]<br /><br />Najprościej przekonwertować zmierzoną wartość temperatury na U2 i wtedy po prostu możesz wykonać proste porównanie wartości: temperatury aktualnej i tej zapamiętanej jako ujemna. Przy pierwszym obiegu pętli while porównuje zmierzoną temperaturę z temp_act z temp_low ustawioną na wartość większą niż możliwa do odczytania z czujnika ( 5000 odpowiada w tym wypadku 500 stopniom ). To tyle, powinno działać po uzupełnieniu funkcji jak w komentarzach. Teraz muszę uciekać, ale w razie pytań pisz, postaram się później wyjaśnić.<br /><br />Pozdrawiam, QuadMan.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 30 paź 2016, o 20:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nondzu]]></name></author>
<updated>2016-10-30T19:16:50+01:00</updated>
<published>2016-10-30T19:16:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173207#p173207</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173207#p173207"/>
<title type="html"><![CDATA[Re: Zarejestrowanie najniższej odczytanej temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173207#p173207"><![CDATA[
Witaj, możesz najniższą temperaturę zapisywać sobie w pamięci EEPROM kontrolera, wtedy nie będzie Ci się ona kasowała po resecie. Możesz przy starcie odczytywać tę temperaturę z pamięci. Mirek dobrze to wyjaśnia w poradnikach <br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.it/2012/11/avr-eeprom-struktury-poradnik-do-ksiazek.html" >http://mirekk36.blogspot.it/2012/11/avr ... iazek.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1672">Nondzu</a> — 30 paź 2016, o 19:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RadekB86]]></name></author>
<updated>2016-10-30T20:13:31+01:00</updated>
<published>2016-10-30T18:22:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173197#p173197</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173197#p173197"/>
<title type="html"><![CDATA[Zarejestrowanie najniższej odczytanej temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16663&amp;p=173197#p173197"><![CDATA[
Więc do rzeczy  potrzebuje napisać funkcję która:<br />1.odczytuje temperaturę przy starcie programu<br />2.następnie porównuje temperaturę odczytaną  przy starcie z temperaturą odczytywaną cały czas na bieżąco w pętli jeśli temperatura jest niższa niż ta odczytana wcześnie to wtedy ją wyświetlam na LCD jeśli nie to na LCD nadal jest wyświetlana ostatnia najniższa zarejestrowana temperatura.<br />3.w pętli cały czas porównuję temperatury i jak tylko zarejsetruję najniższą to ją od razu zapisuję do LCD.<br /><br />Oczywiście po restarcie procka zostaje to zresetowane.<br />i np jeśli włączę w południe to odczyta mi np. temperaturę 15stopni i pracujące urządzenie przez całą dobę zarejestruje mi że w nocy(czy kiedykolwiek) była &quot;-2&quot;<br />Napisałem wprawdzie coś takiego ale nie działa to satysfakcjonująco może coś poprawić ? tylko co?<br /><br />zmienne globalne:<br />[syntax=c]uint8_t temp_low,temp_low_dz,suma_templow;//najniższa temperatura częśc całkowita i dziesiętna[/syntax]<br />potem to robię przed while:<br />[syntax=c]DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits);<br /><br />         temp_low=cel;<br />         temp_low_dz= cel_fract_bits;<br />         suma_templow=(temp_low+temp_low_dz);[/syntax]<br /><br />i tą funkcję wklejam zaraz po odczycie z pierwszego (we fladze )czujnika:<br />[syntax=c]void rejestracja_low_temp(void){<br /><br />    if((cel+cel_fract_bits)&lt;suma_templow){<br />      temp_low=cel;<br />    temp_low_dz=cel_fract_bits;<br />        }<br />    if(subzero&amp;&amp;((suma_templow)&gt;0)){<br />        temp_low=cel;<br />        temp_low_dz=cel_fract_bits;<br />        lcd_locate(0,14);<br />        if(subzero)lcd_str(&quot;-&quot;);<br />       }<br />    }[/syntax]<br /><br />ps. wiem że zmienna(suma_templow ) jest źle określona bo nie ma sensu gdy jest 1,8 C albo np 2,7 C bo jednak niższa temperatura to 1,8 a tutaj w tym przypadku wychodzi że są równe:<br /><br />Prawdę mówiąc to liczę na jakieś konkretne rozwiązanie bo niestety na chwilę obecną mam pustkę ...w głowie... <img src="https://forum.atnel.pl/images/smilies/icon_cry.gif" alt=":cry:" title="Płacze" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1837">RadekB86</a> — 30 paź 2016, o 18:22</p><hr />
]]></content>
</entry>
</feed>