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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=18519&amp;mode</id>
<entry>
<author><name><![CDATA[rademenes21]]></name></author>
<updated>2017-07-17T09:57:55+01:00</updated>
<published>2017-07-17T09:57:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18519&amp;p=192221#p192221</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18519&amp;p=192221#p192221"/>
<title type="html"><![CDATA[Re: DS18B20 czytanie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18519&amp;p=192221#p192221"><![CDATA[
Witam ponownie.<br /><br />Uporałem się z odczytem kodów DS18B20.<br />Zamieszczam kod w C który działa dla n liczby czujników.<br /><br />Pewnie można to zapisać w prostszy sposób ale cieszy mnie fakt iż sam to napisałem i działa.<br /><br /><br />[syntax=c]unsigned char bit_praw=0;//bit prawdziwy czujników ds (jeżeli choć 1 z nich ma 0 to będzie 0)<br />unsigned char bit_neg=0;//bit negacji czujników ds<br />unsigned char sprz&#91;64&#93;;<br />unsigned char liczbit=0;<br /><br />unsigned char n=3;                  //liczba urzadzen<br />unsigned char tabkod&#91;n&#93;&#91;64&#93;;//tablica kodow urządzeń<br />unsigned char jest_sprz=0;   //czy w naspepnych bitach byla sprzecznosc<br />unsigned char zmiana_bitu=0;//czy juz byla zmiana bitu z 0 na 1<br /><br /><br />for (unsigned char a=0;a&lt;n;a++)<br />{<br /><br />    One_wire_reset();                                  //reset oraz presence czujników<br />    wire_write_bajt(0xf0);<br />liczbit=0;<br />zmiana_bitu=0;<br /><br />for (unsigned char c=0;c&lt;64;c++)<br />{<br /><br />_delay_us(2);<br />        SET_DS1; // ?<br />        SET_OUT_DS1;<br />        CLR_DS1;<br />        _delay_us(5);  <br />        CLR_OUT_DS1;<br />        SET_DS1;<br />        _delay_us(5);<br />        if(SPR_PIN_DS1)<br />bit_praw=1;<br />        else<br />bit_praw=0;<br />_delay_us(55);<br />          <br />_delay_us(2);<br />        SET_DS1; // ?<br />        SET_OUT_DS1;<br />        CLR_DS1;<br />        _delay_us(5);  <br />        CLR_OUT_DS1;<br />        SET_DS1;<br />        _delay_us(5);<br />        if(SPR_PIN_DS1)<br />bit_neg=1;<br />        else<br />bit_neg=0;<br />        _delay_us(55);<br /><br /><br />if(bit_praw==1 &amp;&amp; bit_neg==0)<br />{<br />tabkod&#91;a&#93;&#91;c&#93;=1;<br />wire_write_bit(bit_praw);<br />}<br /><br />if(bit_praw==0 &amp;&amp; bit_neg==1)<br />{<br />tabkod&#91;a&#93;&#91;c&#93;=0;<br />wire_write_bit(bit_praw);<br />}<br /><br /><br /><br /><br />if(bit_praw==0 &amp;&amp; bit_neg==0)<br />{<br />if(a==0)<br />{<br />sprz&#91;liczbit&#93;=1;<br />wire_write_bit(bit_praw);<br />tabkod&#91;a&#93;&#91;c&#93;=0;<br />}<br />else<br />{<br />jest_sprz=0;<br />for(unsigned char d=liczbit+1;d&lt;64;d++)<br />{<br />if(sprz&#91;d&#93;==1)<br />jest_sprz=1;<br />}<br /><br />if(jest_sprz==0)<br />{<br />if(zmiana_bitu==0)<br />{<br /><br />sprz&#91;liczbit&#93;=2;<br />zmiana_bitu=1;<br />}<br />else<br />{<br />sprz&#91;liczbit&#93;=1;<br />}<br />}<br /><br /><br />if ((jest_sprz==1)&amp;&amp;(sprz&#91;liczbit&#93;==2))<br />{<br />wire_write_bit(!bit_praw);<br />tabkod&#91;a&#93;&#91;c&#93;=1;<br />}<br /><br />if ((jest_sprz==1)&amp;&amp;(sprz&#91;liczbit&#93;==1))<br />{<br />wire_write_bit(bit_praw);<br />tabkod&#91;a&#93;&#91;c&#93;=0;<br />}<br /><br />if ((jest_sprz==0)&amp;&amp;(sprz&#91;liczbit&#93;==2))<br />{<br />wire_write_bit(!bit_praw);<br />tabkod&#91;a&#93;&#91;c&#93;=1;<br />}<br /><br />if ((jest_sprz==0)&amp;&amp;(sprz&#91;liczbit&#93;==1))<br />{<br />wire_write_bit(bit_praw);<br />tabkod&#91;a&#93;&#91;c&#93;=0;<br />}<br /><br /><br />}<br /><br /><br />}<br /><br />liczbit++;<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11805">rademenes21</a> — 17 lip 2017, o 09:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[janusz17]]></name></author>
<updated>2017-05-31T16:59:55+01:00</updated>
<published>2017-05-31T16:59:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18519&amp;p=190077#p190077</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18519&amp;p=190077#p190077"/>
<title type="html"><![CDATA[Re: DS18B20 czytanie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18519&amp;p=190077#p190077"><![CDATA[
Trudno z tego Twojego kodu coś wywnioskować, bo nie napisałeś żadnych komentarzy co jest co. Ale na stronie producenta układów DS18B20 zamieszczono przykłady jak odczytywać numery seryjne urządzeń podłączonych do magistrali 1-wire.<br />[syntax=c]//------------------------------------------------------------------------<br />// Find the 'first' devices on the 1-Wire bus<br />// Return TRUE : device found, ROM number in ROM_NO buffer<br />// FALSE : no device present<br />//<br />unsigned char OWFirst(void)<br />{<br />// reset the search state<br />LastDiscrepancy = 0;<br />LastDeviceFlag = FALSE;<br />LastFamilyDiscrepancy = 0;<br />return OWSearch();<br />}<br /><br /><br /><br />//------------------------------------------------------------------------<br />// Find the 'next' devices on the 1-Wire bus<br />// Return TRUE : device found, ROM number in ROM_NO buffer<br />// FALSE : device not found, end of search<br />//<br />unsigned char OWNext(void)<br />{<br />// leave the search state alone<br />return OWSearch();<br />}<br /><br /><br />//------------------------------------------------------------------------<br />// Perform the 1-Wire Search Algorithm on the 1-Wire bus using the existing<br />// search state.<br />// Return TRUE : device found, ROM number in ROM_NO buffer<br />// FALSE : device not found, end of search<br />//<br />unsigned char OWSearch(void)<br />{<br />unsigned char id_bit_number;<br />unsigned char last_zero, rom_byte_number, search_result;<br />unsigned char id_bit, cmp_id_bit;<br />unsigned char rom_byte_mask, search_direction;<br />// initialize for search<br />id_bit_number = 1;<br />last_zero = 0;<br />rom_byte_number = 0;<br />rom_byte_mask = 1;<br />search_result = 0;<br />crc8 = 0;<br />// if the last call was not the last one<br />if (!LastDeviceFlag)<br />{<br />// 1-Wire reset<br />if (OWReset())<br />{<br />// reset the search<br />LastDiscrepancy = 0;<br />LastDeviceFlag = FALSE;<br />LastFamilyDiscrepancy = 0;<br />return FALSE;<br />}<br />// issue the search command<br />OWSendByte(Search_ROM);<br />// loop to do the search<br />do<br />{<br />// read a bit and its complement<br />id_bit = OWReadBit();<br />cmp_id_bit = OWReadBit();<br />// check for no devices on 1-wire<br />if ((id_bit == 1) &amp;&amp; (cmp_id_bit == 1))<br />break;<br />else<br />{<br />// all devices coupled have 0 or 1<br />if (id_bit != cmp_id_bit)<br />search_direction = id_bit; // bit write value for search<br />else<br />{<br />// if this discrepancy if before the Last Discrepancy<br />// on a previous next then pick the same as last time<br />if (id_bit_number &lt; LastDiscrepancy)<br />search_direction = ((ROM_NO&#91;rom_byte_number&#93; &amp; rom_byte_mask) &gt; 0);<br />else<br />// if equal to last pick 1, if not then pick 0<br />search_direction = (id_bit_number == LastDiscrepancy);<br />// if 0 was picked then record its position in LastZero<br />if (search_direction == 0)<br />{<br />last_zero = id_bit_number;<br />// check for Last discrepancy in family<br />if (last_zero &lt; 9)<br />LastFamilyDiscrepancy = last_zero;<br />}<br />}<br />// set or clear the bit in the ROM byte rom_byte_number<br />// with mask rom_byte_mask<br />if (search_direction == 1)<br />ROM_NO&#91;rom_byte_number&#93; |= rom_byte_mask;<br />else<br />ROM_NO&#91;rom_byte_number&#93; &amp;= ~rom_byte_mask;<br />// serial number search direction write bit<br />OWSendBit(search_direction);<br />// increment the byte counter id_bit_number<br />// and shift the mask rom_byte_mask<br />id_bit_number++;<br />rom_byte_mask &lt;&lt;= 1;<br />// if the mask is 0 then go to new SerialNum byte rom_byte_number and reset mask<br />if (rom_byte_mask == 0)<br />{<br />OWCalcCRC(ROM_NO&#91;rom_byte_number&#93;); // accumulate the CRC<br />//OWcrc8(ROM_NO&#91;rom_byte_number&#93;); //druga metoda poszukiwania crc<br />rom_byte_number++;<br />rom_byte_mask = 1;<br />}<br />}<br />}<br />while(rom_byte_number &lt; 8); // loop until through all ROM bytes 0-7<br />// if the search was successful then<br />if (!((id_bit_number &lt; 65) || (crc8 != 0)))<br />{<br />// search successful so set LastDiscrepancy,LastDeviceFlag,search_result<br />LastDiscrepancy = last_zero;<br />// check for last device<br />if (LastDiscrepancy == 0)<br />LastDeviceFlag = TRUE;<br />search_result = TRUE;<br />}<br />}<br />// if no device found then reset counters so next 'search' will be like a first<br />if (!search_result || !ROM_NO&#91;0&#93;)<br />{<br />LastDiscrepancy = 0;<br />LastDeviceFlag = FALSE;<br />LastFamilyDiscrepancy = 0;<br />search_result = FALSE;<br />}<br />return search_result;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1226">janusz17</a> — 31 maja 2017, o 16:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HomoChemicus]]></name></author>
<updated>2017-05-30T18:28:44+01:00</updated>
<published>2017-05-30T18:28:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18519&amp;p=190010#p190010</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18519&amp;p=190010#p190010"/>
<title type="html"><![CDATA[Re: DS18B20 czytanie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18519&amp;p=190010#p190010"><![CDATA[
Coś chyba nie wyszło. Wstaw kod w syntax c!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10470">HomoChemicus</a> — 30 maja 2017, o 18:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rademenes21]]></name></author>
<updated>2017-05-30T18:33:37+01:00</updated>
<published>2017-05-30T18:08:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18519&amp;p=190008#p190008</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18519&amp;p=190008#p190008"/>
<title type="html"><![CDATA[DS18B20 czytanie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18519&amp;p=190008#p190008"><![CDATA[
Witam.<br /><br />Jestem początkującym w programowaniu.<br />Próbuję sczytać kody DS-ów.<br /><br />Proszę podpowiedzcie co w kodzie jest nie tak?<br /><br /><br /><br />[syntax=c]unsigned char xxx=0;<br />unsigned char yyy=0;<br />unsigned char sprz&#91;64&#93;;<br />unsigned char liczbit=0;<br /><br />unsigned char n=2;                  //liczba urzadzen<br />unsigned char tabkod&#91;n&#93;&#91;8&#93;;<br /><br /><br /><br />for (unsigned char a=0;a&lt;n;a++)<br />{<br /><br />    One_wire_reset();<br />    wire_write_bajt(0xf0);<br />liczbit=0;<br /><br /><br />for (unsigned char b=0;b&lt;8;b++)<br />{<br />for(unsigned char c=0;c&lt;8;c++)<br />{<br />            _delay_us(2);<br />            SET_DS1; // ?<br />            SET_OUT_DS1;<br />            CLR_DS1;<br />            _delay_us(5);  <br />            CLR_OUT_DS1;<br />            SET_DS1;<br />            _delay_us(5);<br />            if(SPR_PIN_DS1)<br />xxx=1;<br />            else<br />xxx=0;<br />_delay_us(55);<br />          <br />_delay_us(2);<br />            SET_DS1; // ?<br />            SET_OUT_DS1;<br />            CLR_DS1;<br />            _delay_us(5);  <br />            CLR_OUT_DS1;<br />            SET_DS1;<br />            _delay_us(5);<br />            if(SPR_PIN_DS1)<br />yyy=1;<br />            else<br />yyy=0;<br />            _delay_us(55);<br /><br /><br /><br />if(xxx==1 &amp;&amp; yyy==0)<br />{<br />tabkod&#91;a&#93;&#91;b&#93;|=0x01&lt;&lt;c;<br />wire_write_bit(xxx);<br />}<br /><br /><br /><br /><br />if(xxx==0 &amp;&amp; yyy==0)<br />{<br />if(a==0)<br />{<br />sprz&#91;liczbit&#93;=1;<br />wire_write_bit(xxx);<br />}<br />else<br />{<br />for(unsigned char d=liczbit+1;d&lt;64;d++)<br />{<br />if(sprz&#91;d&#93;==1)<br />{<br />sprz&#91;liczbit&#93;=1;<br />tabkod&#91;a&#93;&#91;b&#93;|=0x00&lt;&lt;c;<br />}<br />if(sprz&#91;d&#93;==0 &amp;&amp; sprz&#91;liczbit&#93;==0)<br />{<br />tabkod&#91;a&#93;&#91;b&#93;|=0x01&lt;&lt;c;<br />sprz&#91;liczbit&#93;=0;<br /><br />}<br />}<br />if(sprz&#91;liczbit&#93;==1)<br />wire_write_bit(xxx);<br />else<br />wire_write_bit(!xxx);<br />}<br />}<br /><br />liczbit++;<br />}<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11805">rademenes21</a> — 30 maja 2017, o 18:08</p><hr />
]]></content>
</entry>
</feed>