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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-01-09T18:11:58+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=30&amp;t=21850&amp;mode</id>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2019-01-09T18:11:58+01:00</updated>
<published>2019-01-09T18:11:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21850&amp;p=215631#p215631</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21850&amp;p=215631#p215631"/>
<title type="html"><![CDATA[Re: DS18B20 - ID (odróżnienie czujników)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21850&amp;p=215631#p215631"><![CDATA[
Nie mam żadnych przycisków i enkodera w projekcie <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> Dlatego problem rozwiązałem w inny sposób, żeby nowych funkcji nie tworzyć. Jakby ktoś miał taką potrzebę to podaję jak to zrobiłem.<br /><br />Osobno napisałem programik odczytujący i wysyłający adresy czujników na terminal w takiej postaci:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">28866fcb080000b0</div><br /><br />Następnie wpisałem go w kodzie w ten sposób do zmiennej temp_in:<br />[syntax=c]unsigned char temp_in&#91;8&#93; = {0x28, 0x86, 0x6f, 0xcb, 0x08, 0x00, 0x00, 0xb0};[/syntax]<br /><br />I odczytuję temperaturę w ten sposób podając zmienną przechowującą odpowiedni adres czujnika:<br />[syntax=c]tmp.status_in = DS18X20_read_meas(temp_in, &amp;tmp.znak_in, &amp;tmp.jedn_in, &amp;tmp.dzie_in);[/syntax]<br /><br />Teraz czujniki się nie mieszają i nie jest pokazywana temperatura w zależności od kolejności na magistrali 1-wire. Wiadomo jak czujnik się uszkodzi to trzeba odczytać ID nowego czujnika i wpisać jego adres w miejsce starego <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=11336">Tom92</a> — 9 sty 2019, o 18:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[roberto_k_w]]></name></author>
<updated>2019-01-08T19:02:42+01:00</updated>
<published>2019-01-08T19:02:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21850&amp;p=215606#p215606</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21850&amp;p=215606#p215606"/>
<title type="html"><![CDATA[Re: DS18B20 - ID (odróżnienie czujników)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21850&amp;p=215606#p215606"><![CDATA[
Ahoj,<br />ja miałem przyjemność przypisywać ID czujników pojedynczo, poniżej funkcja przypisania Id czujnika z wykorzystaniem enkodera <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /><br />[syntax=c]void assign_id_do_name(void ){<br />timer_init( 3, 750, 1, display_temp_timer);<br />uint8_t idx;<br />service = 0;<br />if(ds_cnt == 1){<br />idx = get_encoder();<br />if ( idx &lt; 1 ){<br />set_encoder(0);<br />idx = 0;<br />}<br />if (idx &gt;= (MAXSENSORS - 1)){<br />set_encoder((MAXSENSORS - 1));<br />idx = (MAXSENSORS - 1);<br />}<br /><br />ALL.Tsens&#91;idx&#93;.id_sens.mark = idx;<br />lcd_locate(2,0);<br />lcd_str_P(PSTR(&quot;Przypisac&quot;));<br />lcd_str(&quot; do &quot;);<br />lcd_str(ALL.Tsens&#91;idx&#93;.id_sens.name_char);<br />lcd_str_P(PSTR(&quot; ?&quot;));<br />lcd_locate(3,0);<br />lcd_str(&quot;                   &quot;);<br />licz_zapis = 40;<br />current_id = idx;<br />}else {<br />lcd_locate(2,0);<br />lcd_str_P(PSTR(&quot; Czujniki programuj &quot;));<br />lcd_locate(3,0);<br />lcd_str_P(PSTR(&quot;   POJEDYNCZO !!!  &quot;));<br />licz_menu = 4;<br />}<br />}[/syntax]<br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13729">roberto_k_w</a> — 8 sty 2019, o 19:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2019-01-08T18:06:21+01:00</updated>
<published>2019-01-08T18:06:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21850&amp;p=215603#p215603</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21850&amp;p=215603#p215603"/>
<title type="html"><![CDATA[DS18B20 - ID (odróżnienie czujników)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21850&amp;p=215603#p215603"><![CDATA[
Witam, <br /><br />Mam problem odnośnie czujników DS18B20. Chodzi mi dokładnie o to, że mam np. dwa czujniki (temp_in, temp_out). Obydwa mierzą temperaturę i pokazują ją na wyświetlaczu. Poniżej kod z odczytu temperatury:<br /><br />[syntax=c]if( 2 == ( licznik%3 )  ) {<br />tmp.status_in = DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;tmp.znak_in, &amp;tmp.jedn_in, &amp;tmp.dzie_in);<br />tmp.status_out = DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;tmp.znak_out, &amp;tmp.jedn_out, &amp;tmp.dzie_out);<br /><br />if( tmp.status_in == DS18X20_OK ) {<br /><br />// składamy wartość temperatury w string - temperatura_in&#91;&#93;<br />char * twsk_in = temperatura_in;<br />if( !tmp.znak_in )  *(twsk_in++) = ' ';<br />else *(twsk_in++) = '-';<br /><br />if( tmp.jedn_in&lt;10 ) *(twsk_in++) = ' ';<br />itoa( tmp.jedn_in, twsk_in++, 10 );<br />if( tmp.jedn_in&gt;9 ) twsk_in++;<br />*(twsk_in++) = '.';<br />itoa( tmp.dzie_in, twsk_in++, 10 );<br />*(twsk_in++) = '/';<br />*(twsk_in++) = ':';<br />*(twsk_in++) = 0;<br /><br />} else {<br />memset( temperatura_in, 0, 10 );<br />strcpy_P( temperatura_in, PSTR(&quot;IN.err&quot;) );<br />}<br /><br />if( tmp.status_out == DS18X20_OK ) {<br /><br />// składamy wartość temperatury w string - temperatura_out&#91;&#93;<br />char * twsk_out = temperatura_out;<br />if( !tmp.znak_out )  *(twsk_out++) = ' ';<br />else *(twsk_out++) = '-';<br /><br />if( tmp.jedn_out&lt;10 ) *(twsk_out++) = ' ';<br />itoa( tmp.jedn_out, twsk_out++, 10 );<br />if( tmp.jedn_out&gt;9 ) twsk_out++;<br />*(twsk_out++) = '.';<br />itoa( tmp.dzie_out, twsk_out++, 10 );<br />*(twsk_out++) = '/';<br />*(twsk_out++) = ':';<br />*(twsk_out++) = 0;<br /><br />} else {<br />memset( temperatura_out, 0, 10 );<br />strcpy_P( temperatura_out, PSTR(&quot;OUT.err&quot;) );<br />}<br />}[/syntax]<br /><br />Ale w powyższym kodzie wiadomo, że odróżnia te czujniki kolejność na magistrali 1-wire. I TERAZ jeżeli wyciągnę pierwszy w kolejności czujnik do się zaczyna mieszać, czyli w miejscu na wyświetlaczu gdzie ma pokazać error pierwszego czujnika pokazuje temperaturę drugiego czujnika, który wskoczył na jego miejsce. A w miejsce drugiego pokazuje error...<br /><br />Dużo szukałem i natknąłem się na ten temat:<br /><!-- l --><a class="postlink-local" href="https://forum.atnel.pl/topic939.html" >topic939.html</a><!-- l --><br />W opisie jest punkt 7, który mnie interesuje, a mianowicie przypisanie czujnika do odpowiedniego miejsca.<br /><br />Nie wiem czy dobrze myślę, pomóżcie: <br />PRZED MAIN()<br />- powinienem odczytać id z dwóch czujników,<br />- wpisać id czujników do osobnych zmiennych np. temp_in, temp_out,<br />- zapisać te zmienne do pamięci EEPROM<br />W PĘTLI<br />- odczytać id z dwóch czujników,<br />- wpisać id czujników do osobnych zmiennych np. t1, t2,<br />- odczytać zmienne temp_in, temp_out z pamięci eeprom do ram<br />- porównać zmienne t1 == temp_in, t2 == temp_out<br />- jeżeli się zgadzają wyświetlić temperaturę, a jeżeli nie to wyrzucić error.<br /><br />Zacząłem przerabiać powyższy kod i nie wiem czy jestem na dobrej drodze:<br /><br />[syntax=c]if( 2 == ( licznik%3 )  ) {<br />tmp.status_in = DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;tmp.znak_in, &amp;tmp.jedn_in, &amp;tmp.dzie_in);<br />uint8_t k;<br />for(k=0; k&lt;8; k++) {<br />tmp.temp_in = gSensorIDs&#91;1&#93;&#91;k&#93;;<br />if(tmp.temp_in&lt;10) copy_ram_to_eem();<br /><br />}<br />tmp.status_out = DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;tmp.znak_out, &amp;tmp.jedn_out, &amp;tmp.dzie_out);<br />//uint8_t k;<br />for(k=0; k&lt;8; k++) {<br />tmp.temp_out = gSensorIDs&#91;1&#93;&#91;k&#93;;<br />if(tmp.temp_out&lt;10) copy_ram_to_eem();<br />}<br /><br />if( tmp.status_in == DS18X20_OK ) {<br /><br />// składamy wartość temperatury w string - temperatura_in&#91;&#93;<br />char * twsk_in = temperatura_in;<br />if( !tmp.znak_in )  *(twsk_in++) = ' ';<br />else *(twsk_in++) = '-';<br /><br />if( tmp.jedn_in&lt;10 ) *(twsk_in++) = ' ';<br />itoa( tmp.jedn_in, twsk_in++, 10 );<br />if( tmp.jedn_in&gt;9 ) twsk_in++;<br />*(twsk_in++) = '.';<br />itoa( tmp.dzie_in, twsk_in++, 10 );<br />*(twsk_in++) = '/';<br />*(twsk_in++) = ':';<br />*(twsk_in++) = 0;<br /><br />} else {<br />memset( temperatura_in, 0, 10 );<br />strcpy_P( temperatura_in, PSTR(&quot;IN.err&quot;) );<br />}<br /><br />if( tmp.status_out == DS18X20_OK ) {<br /><br />// składamy wartość temperatury w string - temperatura_out&#91;&#93;<br />char * twsk_out = temperatura_out;<br />if( !tmp.znak_out )  *(twsk_out++) = ' ';<br />else *(twsk_out++) = '-';<br /><br />if( tmp.jedn_out&lt;10 ) *(twsk_out++) = ' ';<br />itoa( tmp.jedn_out, twsk_out++, 10 );<br />if( tmp.jedn_out&gt;9 ) twsk_out++;<br />*(twsk_out++) = '.';<br />itoa( tmp.dzie_out, twsk_out++, 10 );<br />*(twsk_out++) = '/';<br />*(twsk_out++) = ':';<br />*(twsk_out++) = 0;<br /><br />} else {<br />memset( temperatura_out, 0, 10 );<br />strcpy_P( temperatura_out, PSTR(&quot;OUT.err&quot;) );<br />}<br />}[/syntax]<br /><br />Lub może ktoś już napisał funkcję przypisującą czujnik do określonego miejsca i zechciałby się podzielić?<br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 8 sty 2019, o 18:06</p><hr />
]]></content>
</entry>
</feed>