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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-07-27T21:10:12+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3650&amp;mode</id>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2013-07-27T21:10:12+01:00</updated>
<published>2013-07-27T21:10:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43611#p43611</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43611#p43611"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43611#p43611"><![CDATA[
Jak to już drążymy ten temat, to w sumie jedna sprawa mnie nurtuje, po co wysylamy na koncu ten bit, który odebraliśmy?<br /><br />Po odebraniu tego bitu jesli pasuje z wyslanym to tylko ten ds wysyla reszte bitów?<br />Jesli tak, to all jest jasne, bo w sumie już jeden ziomek opisał w tym temacie odnośnie tej operacji AND i mozliwych konfiguracjach. <br /><br /><br />A co do tej twojej funckji to ona mi nie działa. Ja przerobiłem w sumie te biblioteki dallas, tak, żeby uwzględniały all kombinacje, tak dla mojej przejrzystości na przyszłość. Bo wiadomo jest, że potem jest łatwiej analizowac i optymalizować.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 27 lip 2013, o 21:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-07-25T20:34:05+01:00</updated>
<published>2013-07-25T20:34:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43364#p43364</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43364#p43364"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43364#p43364"><![CDATA[
Tylko, że 1 to obecność układu i należy zrobić tak:<br />[syntax=c]while(!RESET_PULSE());<br />send_byte(0xf0);[/syntax]<br />W funkcji main pamiętaj, że po resecie znowu musisz wysłać adres układu, czyli Reset, MATCH ROM, CONVERT T, RESET, MATCH ROM, READ STRACHPAD, odczyt bajtów.<br /><br />Inne uwagi do programu:<br />- dodaj w pliku ds1820 coś takiego: #define SKIP_ROM 0xCC wtedy łatwiej się analizuje program<br />- nie używaj F_CPU, bo teraz masz inne w pliku main i inne lub nie w ds1820.c<br /><br />Tablicę możesz wyświetlić umieszczając taką linię w pętli for:<br />[syntax=c]lcd_puts(utoa(rom&#91;0&#93;&#91;i&#93;,buf,16));[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 25 lip 2013, o 20:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-07-25T19:02:03+01:00</updated>
<published>2013-07-25T19:02:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43345#p43345</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43345#p43345"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43345#p43345"><![CDATA[
No po wypowiedzi kolegi Jaglarza - nic dodać nic ująć <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 lip 2013, o 19:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jaglarz]]></name></author>
<updated>2013-07-25T16:14:44+01:00</updated>
<published>2013-07-25T16:14:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43324#p43324</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43324#p43324"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43324#p43324"><![CDATA[
No akurat w tym przypadku nie zadziałał bo wpisałeś duże C a nie małe.<br /><br />Wybierając z listy nie trzeba się o to martwić, klikasz i wstawiasz kod między znaczniki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=471">Jaglarz</a> — 25 lip 2013, o 16:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kanc1erz]]></name></author>
<updated>2013-07-25T15:45:04+01:00</updated>
<published>2013-07-25T15:45:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43320#p43320</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43320#p43320"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43320#p43320"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">Kanc1erz napisał(a):</div><div class="quotecontent">- Szybka odpowiedź nie ma takich featurów<br /></div><br /><br />To można wyedytować post i poprawić tak jak trzeba - wtedy będzie dostępna opcja.</div><br /><br /><br />A jest jakaś istotna różnica między tym, że sobie ręcznie wpiszę syntaxy (które działają!), wybiorę sobie górnej list listing kodu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1536">Kanc1erz</a> — 25 lip 2013, o 15:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-07-25T15:39:33+01:00</updated>
<published>2013-07-25T15:39:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43317#p43317</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43317#p43317"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43317#p43317"><![CDATA[
<div class="quotetitle">Kanc1erz napisał(a):</div><div class="quotecontent"><br />- Szybka odpowiedź nie ma takich featurów<br /></div><br /><br />To można wyedytować post i poprawić tak jak trzeba - wtedy będzie dostępna opcja.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 lip 2013, o 15:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kanc1erz]]></name></author>
<updated>2013-07-25T19:03:56+01:00</updated>
<published>2013-07-25T13:48:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43312#p43312</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43312#p43312"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43312#p43312"><![CDATA[
<div class="quotetitle">Wojtek001 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">Kanc1erz napisał(a):</div><div class="quotecontent">Na pewno coś z funkcją search_rom, tylko nie wiem gdzie<br /></div><br /><br />No nie sprawdzę kodu w C ,ale może przyda Ci się to co teraz napisze...<br /><br />Jeśli chodzi o search rom to składa się on z 3 stopniowego procesu identyfikacji. <br /><br />1) Pierwszą czynnością funkcji search rom powinno być wysłanie impulsu o długości 1us. Dzięki temu układy slave wiedzą że mają teraz zachowywać się w &quot;specjalny&quot; sposób.<br />2) Po otrzymaniu sygnału układy slave podają na szynę swój najmłodszy bit adresu. Budowa szyny 1-wire sprawia że pojawia się na niej logiczne AND najmłodszego bitu wszystkich układów, wynika więc z tego że jeśli we wszystkich układach najmłodszy bit to 1 to master odczyta 1 (w przeciwnym razie 0)<br />3) Następnie MASTER wysyła kolejny impuls uS a układy na szyni 1-wire odpowiadają znów wartością najmłodszego bitu jednak tym razem zanegowaną.  Znów mamy do czynienia z AND i odbiorem bitu przez MASTERA (jak wyżej).<br />4) Teraz następuje analiza danych przez mastera. Jeśli za pierwszym i za drugim razem otrzymał 0 to sprawa jest niejasna. Jeśli natomiast otrzymał wartość najpierw 0 a potem 1 to wszystkie układy mają bit adresu równy 0,<br />jeśli otrzymał najpierw 1 a potem 0 to wszystkie układy mają pierwszy bit 1.<br />5) w przypadku sytuacji niejasnej master uruchamia proces eliminacji, podaje na szynę np.1 i wtedy scalaki które mają inny bit adresu niż wartość wysłana przed chwilą wyłączają się. W ten sposób następuje eliminacja aż do zbadania tego bitu we wszystkich układach.<br /><br />Teraz wystarczy powyższe punkty powtórzyć 64 razy i mamy adresy, dobrym sposobem jest jee np. wpisywać do dwuwymiarowej tablicy jak ktoś pokazywał wyżej</div><br /><br /><br />@1 Za to odpowiada funkcja send_byte(0xF0), zgodnie z tym: <a href="https://docs.google.com/file/d/0BypxwY1AXgQ9YmY1MzEzYzItYTIyYi00YmMwLThhZDAtNTY1ZGVhM2IxMWI0/edit?hl=pl"  class="postlink">https://docs.google.com/file/d/0BypxwY1AXgQ9YmY1MzEzYzItYTIyYi00YmMwLThhZDAtNTY1ZGVhM2IxMWI0/edit?hl=pl</a><br />Resztę mam w funkcji search_rom, i zgadza się to z tym, co napisałeś. Natomiast funkcja search_rom na samym początku posiada:<br />[syntax=c]do{     //pętla do while wykonuje się tyle razy, ile jest termometrów, w moim przypadku 2.<br />stan=RESET_PULSE(); //resetujemy 1wire<br /><br /> while(stan==1) {<br /> send_byte(0xF0);  //wysyłamy komendę search rom na 1wire.<br /> stan=RESET_PULSE();<br /> }<br />.   //TUTAJ BYŁ TEKST KONTROLNY<br />.<br />...[/syntax]<br /><br />I ustawiłem sobie tekst kontrolny po tym while'u i on się nie wyświetlił, zatem ewidentnie nie umie wyjść z tej pętli. Ale nie wiem dlaczego. Znaczy wiem - stan, czyli wartość, która zwraca funkcja jest cały czas jedynką - i to jest kłopot.<br />Po tej pętelce reszta jest tak jak napisałeś w swojej instrukcji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1536">Kanc1erz</a> — 25 lip 2013, o 13:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wojtek001]]></name></author>
<updated>2013-07-25T13:22:47+01:00</updated>
<published>2013-07-25T13:22:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43310#p43310</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43310#p43310"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43310#p43310"><![CDATA[
<div class="quotetitle">Kanc1erz napisał(a):</div><div class="quotecontent"><br />Na pewno coś z funkcją search_rom, tylko nie wiem gdzie<br /></div><br /><br />No nie sprawdzę kodu w C ,ale może przyda Ci się to co teraz napisze...<br /><br />Jeśli chodzi o search rom to składa się on z 3 stopniowego procesu identyfikacji. <br /><br />1) Pierwszą czynnością funkcji search rom powinno być wysłanie impulsu o długości 1us. Dzięki temu układy slave wiedzą że mają teraz zachowywać się w &quot;specjalny&quot; sposób.<br />2) Po otrzymaniu sygnału układy slave podają na szynę swój najmłodszy bit adresu. Budowa szyny 1-wire sprawia że pojawia się na niej logiczne AND najmłodszego bitu wszystkich układów, wynika więc z tego że jeśli we wszystkich układach najmłodszy bit to 1 to master odczyta 1 (w przeciwnym razie 0)<br />3) Następnie MASTER wysyła kolejny impuls uS a układy na szyni 1-wire odpowiadają znów wartością najmłodszego bitu jednak tym razem zanegowaną.  Znów mamy do czynienia z AND i odbiorem bitu przez MASTERA (jak wyżej).<br />4) Teraz następuje analiza danych przez mastera. Jeśli za pierwszym i za drugim razem otrzymał 0 to sprawa jest niejasna. Jeśli natomiast otrzymał wartość najpierw 0 a potem 1 to wszystkie układy mają bit adresu równy 0,<br />jeśli otrzymał najpierw 1 a potem 0 to wszystkie układy mają pierwszy bit 1.<br />5) w przypadku sytuacji niejasnej master uruchamia proces eliminacji, podaje na szynę np.1 i wtedy scalaki które mają inny bit adresu niż wartość wysłana przed chwilą wyłączają się. W ten sposób następuje eliminacja aż do zbadania tego bitu we wszystkich układach.<br /><br />Teraz wystarczy powyższe punkty powtórzyć 64 razy i mamy adresy, dobrym sposobem jest jee np. wpisywać do dwuwymiarowej tablicy jak ktoś pokazywał wyżej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=500">Wojtek001</a> — 25 lip 2013, o 13:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kanc1erz]]></name></author>
<updated>2013-07-25T12:14:24+01:00</updated>
<published>2013-07-25T12:14:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43300#p43300</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43300#p43300"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43300#p43300"><![CDATA[
Wiem już co jest nie tak.<br />Na pewno coś z funkcją search_rom, tylko nie wiem gdzie, nie umiem sobie z tym poradzić, w każdym razie albo się zawiesza, albo się zapętla gdzieś.<br />kody:<br />[syntax=c]/*<br />   Plik ds1820.c<br />*/<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;ds1820.h&quot;<br />#include &quot;HD44780.h&quot;<br /><br /><br /><br /><br />unsigned char RESET_PULSE(void){<br />unsigned char PRESENCE;<br />CLEAR_1WIRE;<br />_delay_us(500);<br />SET_1WIRE;<br />_delay_us(30);<br />if(bit_is_clear(PORT_1WIRE, WE)){PRESENCE=1;} else{PRESENCE=0;}<br />_delay_us(470);<br />if(bit_is_set(PORT_1WIRE, WE)){PRESENCE=1;} else{PRESENCE=0;}<br />return PRESENCE;<br />}<br /><br />void send(char bit){<br />CLEAR_1WIRE;<br />_delay_us(5);<br />if(bit==1) SET_1WIRE;<br />_delay_us(80);<br />SET_1WIRE;<br />}<br /><br />unsigned char read(void){<br />unsigned char PRESENCE=0;<br />CLEAR_1WIRE;<br />_delay_us(2);<br />SET_1WIRE;<br />_delay_us(15);<br />if(bit_is_set(PORT_1WIRE, WE)){PRESENCE=1;} else {PRESENCE=0;}<br />return(PRESENCE);<br />}<br /><br />void send_byte(char wartosc){<br />unsigned char i, pom;<br />for(i=0;i&lt;8;i++){<br />pom=wartosc&gt;&gt;i;<br />pom&amp;=0x01;<br />send(pom);<br />}<br />_delay_us(100);<br />}<br /><br />unsigned char read_byte(void){<br />unsigned char i, wartosc;<br />wartosc=0;<br /><br />for(i=0;i&lt;8;i++){<br />if(read()) {wartosc|=0x01&lt;&lt;i;}<br />_delay_us(15);<br />}<br />return(wartosc);<br />}<br /><br /><br /><br /><br /> <br /> /**********************************************************************************<br /> Zczytuje kody ROM wszystkich urządzeń na linii 1wire<br /> **********************************************************************************/<br /> void search_rom(void)<br /> {<br /> unsigned char last_zero, a, b, tmp, discrp = 0, last_bit = 0, dscnt = 0, stan;<br /> stan=RESET_PULSE();<br /> do{ <br /> while(stan==1) {<br /> send_byte(0xF0);<br /> stan=RESET_PULSE();<br /> }<br /> <br /> last_zero = 0;<br /> for(a = 0; a &lt; 64; a++){ <br /> b = read();<br /> tmp = read();<br /> if((b == 0)&amp;&amp;(tmp == 0)){<br /> if(a == discrp) b = 1;<br /> else if(a &gt; discrp) b = 0;<br /> else b = last_bit;<br /> if(b == 0)<br /> last_zero = a;<br /> LCD_LOCATE(0,0);<br /> lcd_puts(&quot;Jestem w petli4&quot;);<br /> }<br /> send(b);<br /> rom&#91;dscnt&#93;&#91;(a / 8)&#93;|=(b &lt;&lt; (a % 8));<br /> last_bit = b;<br /> <br /> }<br /> <br /> dscnt++;<br /> discrp = last_zero;<br /><br /> }while((dscnt &lt; 2)&amp;&amp;(discrp &gt; 0));<br /> <br /> LCD_LOCATE(0,0);<br /> lcd_puts(&quot;Jestem w petli4&quot;);<br /> }[/syntax]<br /><br />[syntax=c]/*<br />   Plik ds1820.h<br />*/<br /><br />#ifndef DS1820_H<br />#define DS1820_H<br /><br />#define WE 1<br />#define PORT_1WIRE PINB<br />#define SET_1WIRE DDRB&amp;=~_BV(WE)<br />#define CLEAR_1WIRE DDRB|=_BV(WE)<br /><br /><br />extern unsigned char rom&#91;&#93;&#91;8&#93;; <br />unsigned char RESET_PULSE(void);<br />void send(char bit);<br />unsigned char read(void);<br />void send_byte(char wartosc);<br />unsigned char read_byte(void);<br />void search_rom(void);<br /><br />#endif[/syntax]<br /><br />[syntax=c]/*<br />   Plik main.c<br />   TERMOMETR<br />*/<br /><br />#include &lt;avr/io.h&gt;<br />#define F_CPU 1000000UL <br />#include &lt;util/delay.h&gt;<br />#include &quot;hd44780.h&quot;<br />#include &quot;ds1820.h&quot;<br />#include &quot;stdlib.h&quot;<br /><br />char buf&#91;8&#93;;<br />char buf1&#91;8&#93;;<br />unsigned char rom&#91;2&#93;&#91;8&#93;;<br /><br />void lcd(void){<br />_delay_ms(1000);<br />lcd_init();<br />LCD_DISPLAY(LCDDISPLAY);<br />LCD_CLEAR;<br />LCD_LOCATE(5,0);<br />LCD_WRITE_DATA('W');<br />_delay_ms(200);<br />LCD_WRITE_DATA('i');<br />_delay_ms(200);<br />LCD_WRITE_DATA('t');<br />_delay_ms(200);<br />LCD_WRITE_DATA('a');<br />_delay_ms(200);<br />LCD_WRITE_DATA('j');<br />_delay_ms(200);<br />LCD_WRITE_DATA('!');<br />_delay_ms(2000);<br />LCD_CLEAR;<br />LCD_LOCATE(1,0);<br />lcd_puts(&quot;Milej podrozy!&quot;);<br />_delay_ms(200);<br />//LCD_LOCATE(0,1);<br />//lcd_puts(&quot;Michale&quot;);<br />_delay_ms(2200);<br />LCD_CLEAR;<br />}<br /><br />int main(){<br />unsigned char sprawdz;<br />char temp1, temp2, temp3, temp4;<br />temp1=temp2=temp3=temp4=0;<br />float temp=0, temp8=0;<br />int i=0;<br /><br />lcd();<br /><br /><br />search_rom();<br /><br />LCD_CLEAR;<br />/*<br />char fff=0;<br />for(i=0; i&lt;8; i++)<br />{<br />fff=rom&#91;1&#93;&#91;i&#93;;<br />dtostrf(fff,3,1,buf);<br />LCD_LOCATE(0,0);<br />lcd_puts(buf);<br />_delay_ms(500);<br />LCD_CLEAR;<br />}<br />*/<br />while(1){<br />sprawdz=RESET_PULSE();<br />if(sprawdz==1){<br /><br />/*  Sprawdzenie w ktorym momencie zawiesza sie program.<br />LCD_LOCATE(0,0);<br />lcd_puts(&quot;Jestem w petli&quot;);<br />*/<br /><br />send_byte(0x55);<br />for(i=0;i&lt;8;i++){<br />send_byte(rom&#91;0&#93;&#91;i&#93;);<br />}<br /><br />send_byte(0x44);<br />_delay_ms(750);<br />sprawdz=RESET_PULSE();<br />send_byte(0xBE);<br />temp1=read_byte();<br />temp2=read_byte();<br />sprawdz=RESET_PULSE();<br />temp=(float)(temp1+(temp2*256))/2.0;<br />dtostrf(temp,5,1,buf);<br />LCD_LOCATE(0,0);<br />lcd_puts(&quot;T. zewn.: &quot;);<br />LCD_LOCATE(9,0);<br />lcd_puts(buf);<br />LCD_LOCATE(14,0);<br />lcd_puts(&quot;\xdf&quot;);<br />LCD_LOCATE(15,0);<br />lcd_puts(&quot;C&quot;);<br /><br /><br />send_byte(0x55);<br />for(i=0;i&lt;8;i++){<br />send_byte(rom&#91;1&#93;&#91;i&#93;);<br />}<br /><br />send_byte(0x44);<br />_delay_ms(750);<br />sprawdz=RESET_PULSE();<br />send_byte(0xBE);<br />temp3=read_byte();<br />temp4=read_byte();<br />sprawdz=RESET_PULSE();<br />temp8=(float)(temp3+(temp4*256))/2.0;<br />dtostrf(temp8,5,1,buf1);<br />LCD_LOCATE(0,1);<br />lcd_puts(&quot;T. oleju: &quot;);<br />LCD_LOCATE(9,0);<br />lcd_puts(buf1);<br />LCD_LOCATE(14,0);<br />lcd_puts(&quot;\xdf&quot;);<br />LCD_LOCATE(15,0);<br />lcd_puts(&quot;C&quot;);<br /><br /><br />}<br />else{<br />LCD_LOCATE(0,0);<br />lcd_puts(&quot;Nie wykryto DSa&quot;);<br />}<br />}<br />return 0;<br /><br />}[/syntax]<br /><br /><span style="color: #FF0000">Nie rozumiem po co wpisujesz z &quot;palca&quot; syntax=c skoro masz listę wyboru</span> <strong>SYNTAX wybierz</strong>.<span style="color: #FF0000">.. Zielony J.</span><br />- Szybka odpowiedź nie ma takich featurów <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=1536">Kanc1erz</a> — 25 lip 2013, o 12:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kanc1erz]]></name></author>
<updated>2013-07-24T20:02:11+01:00</updated>
<published>2013-07-24T20:02:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43225#p43225</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43225#p43225"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43225#p43225"><![CDATA[
Dokładnie tak zrobiłem, jak napisałeś, Krauser.<br />Teraz wystarczy porównać tablice i odczytać wartości czujników.<br /><br />@Zielony J. - tak, wiem i przepraszam. Zapomniałem o tym, użyłem [code][/code], ale nie zadziałało <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><br /><br />EDIT:<br />Ostatnia, chyba, rzecz - jak zorganizować to porównanie?<br /><br />Wpisałem coś takiego (tylko nie bijcie, C też nie mam jeszcze jakoś świetnie opanowanego)<br /><br />[syntax=c]while(1){<br />sprawdz=RESET_PULSE();<br />if(sprawdz==1){<br /><br /><br /><br />send_byte(0x55);<br />for(i=0;i&lt;8;i++){<br />send_byte(rom&#91;1&#93;&#91;i&#93;);<br />}<br /><br />RESET_PULSE();<br /><br />send_byte(0x44);<br />_delay_ms(750);<br />sprawdz=RESET_PULSE();<br />send_byte(0xCC);<br />send_byte(0xBE);<br />temp1=read_byte();<br />temp2=read_byte();<br />sprawdz=RESET_PULSE();<br />temp=(float)(temp1+(temp2*256))/2.0;<br />dtostrf(temp,5,1,buf);<br />LCD_LOCATE(0,0);<br />lcd_puts(buf);<br /><br /><br /><br />send_byte(0x55);<br />for(i=0;i&lt;8;i++){<br />send_byte(rom&#91;2&#93;&#91;i&#93;);<br />}<br /><br />RESET_PULSE();<br /><br />send_byte(0x44);<br />_delay_ms(750);<br />sprawdz=RESET_PULSE();<br />send_byte(0xCC);<br />send_byte(0xBE);<br />temp3=read_byte();<br />temp4=read_byte();<br />sprawdz=RESET_PULSE();<br />temp=(float)(temp3+(temp4*256))/2.0;<br />dtostrf(temp,5,1,buf);<br />LCD_LOCATE(0,1);<br />lcd_puts(buf);<br />}<br />else{<br />LCD_LOCATE(1,0);<br />lcd_puts(&quot;Nie wykryto DSa&quot;);<br />}[/syntax]<br /><br />Oczywiście po powitaniu nic się nie wyświetla. Przed pętlą jest funkcja search_rom();, choć nie mam pewności co do tego, że do tablicy rom[][] zostało cokolwiek zapisane, a nie mam koncepcji jak wyświetlić na ekranie LCD zawartość tej tablicy. Ponadto, co zauważyłem: tablica [0][x] jest zaśmiecona - nie zawiera nic. Dopier [1][x] oraz [2][x] zawierają adresy dsów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1536">Kanc1erz</a> — 24 lip 2013, o 20:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-07-24T19:44:12+01:00</updated>
<published>2013-07-24T19:44:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43223#p43223</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43223#p43223"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43223#p43223"><![CDATA[
Wykorzystanie SEARCH ROM jest wygodniejsze i nie trzeba martwić się po wymianie czujnika o nowy adres. Funkcja wygląda spoko. Wyniki będą w tablicy rom[x][8], gdzie x to liczba czujników jaka będzie dołączona do magistrali. Tablicę tą należy wcześniej utworzyć jako zmienną globalną.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 24 lip 2013, o 19:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wojtek001]]></name></author>
<updated>2013-07-24T19:38:25+01:00</updated>
<published>2013-07-24T19:38:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43221#p43221</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43221#p43221"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43221#p43221"><![CDATA[
<div class="quotetitle">Kanc1erz napisał(a):</div><div class="quotecontent"><br />Najpierw należało by odczytać rom jednego i drugiego czujnika (osobno)<br /></div><br />Ze swojej strony dodam że niekoniecznie osobno, istnieje ciekawy sposób na odczytanie naraz adresów na jednej szynie (nie wiem  czy biblioteka której używasz to przewiduje). Rozumiem że jest to twoim problemem? Mogę opisać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=500">Wojtek001</a> — 24 lip 2013, o 19:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kanc1erz]]></name></author>
<updated>2013-07-24T19:03:25+01:00</updated>
<published>2013-07-24T19:03:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43214#p43214</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43214#p43214"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43214#p43214"><![CDATA[
Czyli trzeba stworzyć tablice[8], i:<br />send_byte(0x33);<br />for(i=0;i&lt;8;i++){<br />tab[i]=read_byte();<br />}<br />?<br /><br />Szukałem w między czasie na guglu dodatkowych informacji, że odczytanie ROMu należy wykonać każdorazowo po uruchomieniu megi - wtedy nie dość, że korzystamy z mniejszej ilości pamięci, to można dowolnie zmieniać DS. Ale jak to zrobić?<br /><br />Okej, znalazłem pewną funkcję, dorzuciłem ją do DS1820.c<br />[syntax=c]void owire_search_rom(void)<br /> {<br /> unsigned char last_zero, a, b, tmp, discrp = 0, last_bit = 0, dscnt = 0;<br /> <br /> do<br /> {<br /> <br /> while(RESET_PULSE());<br /> send_byte(0xf0);<br /> <br /> last_zero = 0;<br /> for(a = 0; a &lt; 64; a++)<br /> {<br /> <br /> b = read();<br /> tmp = read();<br /> <br /> if((b == 0)&amp;&amp;(tmp == 0))<br /> {<br /> if(a == discrp)<br /> b = 1;<br /> else if(a &gt; discrp)<br /> b = 0;<br /> else<br /> b = last_bit;<br /> if(b == 0)<br /> last_zero = a;<br /> }<br /> <br /> send(b);<br /> rom&#91;dscnt&#93;&#91;(a / 8)&#93;|=(b &lt;&lt; (a % 8));<br /> last_bit = b;<br /> }<br /> <br /> dscnt++;<br /> discrp = last_zero;<br /> } while((dscnt &lt; 2)&amp;&amp;(discrp &gt; 0));<br /> <br /> }[/syntax]<br /><br />Która to rzekomo spisuje adresy do tablicy.<br /><br /><span style="color: #FF0000">Kody wklejamy przy pomocy syntax=c - Zielony J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1536">Kanc1erz</a> — 24 lip 2013, o 19:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-07-24T18:52:41+01:00</updated>
<published>2013-07-24T18:52:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43213#p43213</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43213#p43213"/>
<title type="html"><![CDATA[Re: [C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43213#p43213"><![CDATA[
Dobrze kombinujesz (jak jeden układ jest wpięty to odczytanie numeru jest proste), ale pamiętaj, że adres to 8 bajtów. Co do MATCH ROM to po resecie magistrali wysyłasz adres układu i odczytujesz temperaturę jak poprzednio (drugi układ czeka w tym czasie na reset magistrali i milczy). Oczywiście najpierw należy wysłać rozkaz rozpoczęcia konwersji, ale można to zrobić dla wszystkich czujników używając najpierw SKIP ROM.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 24 lip 2013, o 18:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kanc1erz]]></name></author>
<updated>2013-07-24T18:06:24+01:00</updated>
<published>2013-07-24T18:06:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43211#p43211</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43211#p43211"/>
<title type="html"><![CDATA[[C] 2x DS18(b)20+Mega ósemka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3650&amp;p=43211#p43211"><![CDATA[
Witajcie serdecznie.<br />2 tygodnie temu zacząłem bawić się w mikrokontrolery, gdyż mój dalszy rozwój związany z elektroniką jest bez tego niemożliwy.<br />Programuję w C, uczę się z kursów online.<br /><br />Po prostych programach, typu miganie diody LED, obsługa ekranu LCD 16x2, postanowiłem do tego ekranu coś dołożyć, mianowicie termometr, bardzo popularny DS1820. <br />Wszystko śmiga, temperatura wyświetla się poprawnie, ogólnie jestem zadowolony.<br />Jednakże nadszedł czas, by dorzucić do magistrali 1-wire kolejnego DSa, i tu zaczyna się problem. <br />O ile algorytm sobie jakiś wymyśliłem, choć też nie wiem, czy do końca dobry i czy nie przekombinowany, o tyle jego implementacja mnie nieco przerasta.<br /><br />Mianowicie:<br />Najpierw należało by odczytać rom jednego i drugiego czujnika (osobno), podpinając odpowiednio pierwszy i drugi. READ ROM (0x33) i wyświetlić na LCDku, potem wstawić dwie stałe, jedna to pierwszy DS, druga to drugi.<br />Potem podpiąć już do megi oba DSy i MATCH ROM (0x55) najpierw jedną stałą &quot;ROMOWĄ&quot;, odczytać temperaturę, przetworzyć, wyświetlić na LCD, potem drugi raz MATCH ROM (0x55) odczytać temperaturę, przetworzyć i wyświetlić na LCD i koniec pętli.<br /><br />Dobrze myślę?<br /><br />Implementacja byłaby taka:<br />send_byte(0x33);<br />id_pierwszego_dsa=read_byte();<br />Następnie to samo z drugim.<br /><br />I jak potem zaimplementować fragment z MATCH ROMem?<br /><br />Proszę o pomoc.<br />Wsad umieszczam tylko z DSa i maina, bo wyświetlacz jest całkowicie sprawny, działa poprawnie, wyświetla to, co chcę.<br />MAIN: <a href="http://pastebin.com/gkz0kvg0"  class="postlink">http://pastebin.com/gkz0kvg0</a><br />ds1820.c: <a href="http://pastebin.com/vC7etftL"  class="postlink">http://pastebin.com/vC7etftL</a><br />ds1820.h: <a href="http://pastebin.com/LqrSzp4b"  class="postlink">http://pastebin.com/LqrSzp4b</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1536">Kanc1erz</a> — 24 lip 2013, o 18:06</p><hr />
]]></content>
</entry>
</feed>