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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-01-30T13:38:24+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=47&amp;t=14323&amp;mode</id>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-01-30T13:38:24+01:00</updated>
<published>2016-01-30T13:38:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=152120#p152120</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=152120#p152120"/>
<title type="html"><![CDATA[Re: Ds18b20 indexowanie po EEprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=152120#p152120"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />1. onewire.search(). wyszukuję czujnik, rozumiem, że są one indexowane losowo od 0 do nie wiekszej niż ilosc -1<br />( czujniki nie są podpięte w 1 lini tylko w siatce - w moim przykładzie)<br /></div>Co oznacza w siatkce? Czujniki masz podpięte do jednego pinu?<br />Wyszukiwanie czujników polega na odczytywaniu ich ID specjalna procedurą i przy normalnych procedurach masz je w kolejności rosnących lub malejących ROM CODE. Nie ma znaczenie który jest czytnik pierwszy a który ostatni na linii.<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />2. Rom code - czyli teraz odnaszac sie gdziekolwiek w przykladzie do jego Nazwy (nazwa1 = Rom code1 itd)<br />dostaje odpowiedz z odpowiedniego rom cod<br /></div>Komendy do DS mogą być wysyłane albo do wszystkich (używanie komendy SKIP ROM) albo do jednego konkretnego (komenda MATCH ROM). Gdy masz tylko jeden czujnik, to nie ma potrzeby adresowania go po ROM CODE, ale przy większej ilości już musisz - choć przy zlecaniu pomiaru często wydaje się komendę do wszystkich na raz a dopiero odczyt robi się indywidualnie.<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />3. odczyt temp w ten sam sposob <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> nazwa = rom , wpisujac nazwe po rom odczyt temp.<br /></div>Jak odczytujesz temperaturę i masz więcej niż jeden czytnik, to musisz podać który chcesz odczytać. Używasz do tego ROM CODE uzyskany z funkcji search().<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Jak pisałem moze w przypadku 2 czujnikow nie bedzie problemu bo ardu indexuje czyba po czasie odpowiedzi z czujnika (opornosci) ale jesli stworze siatke i dodam jeszcze termometr w kuchni i pokojach zacznie mi to mieszac.<br /></div>Nie wiem jak robi to Twoja biblioteka w arduino ale przy komunikacji po 1-wire nie da się ustalić położenia czujnika. Dlatego albo search() zwraca losowa kolejność (mało prawdopodobne) albo masz posortowane po ROM CODE (rosnąco lub malejąco). <br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Pewnie sie zastanawiasz dlaczego nie odczytam ich addresow i nie przypisze ich na stale <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Bylo by pięknie jak bym nie musial co chwile sprawdzać nowego kabla <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />jednego z ilosci nieogranicznej.<br /></div><br />Nie wiem o co chodzi z tym sprawdzaniem nowego kabla. Ale sposób na wykorzystanie zapisywanej samodzielnie wartości identyfikacyjnej w EEPROM w miejscu progów temperaturowych dla alarmów jest ciekawa i jak nie potrzebujesz korzystać z alarmów jest OK.<br />[syntax=cpp]DeviceAddress insideThermometer, outsideThermometer; - w taki sposób określam sobie nazwy czujników.<br />Nie podaje adresów, bo niemożliwa będzie ich wymiana.<br /><br />Następnie muszę przypisać nazwę do odpowiedniego Indexu.<br />sensors.getAddress(insideThermometer, 0)<br />sensors.getAddress(outsideThermometer, 1)[/syntax]<br />Zrób tak. Deklarujesz tymczasową zmienną:[syntax=cpp]DeviceAddress tempThermometer;[/syntax]<br />i do niej odczytujesz pierwszy address (ROM CODE) poprzez [syntax=cpp]sensors.getAddress(tempThermometer, 0);[/syntax]Następnie wywołujesz funkcję do sprawdzenia (odczyt wartości) czy jest to czytnik z wartością w EEPROM 0x11 czy 0x22. Jak jest to 0x11, to przypisujesz ten adres do pierwszej zmiennej (insideThermometer) a jak 0x22 to do drugiej (ousideThermometer). Jak masz inne wartości niż 0x11 i 0x22, to robisz interakcję z użytkownikiem by przypisał ten czytnik do odpowiedniego miejsca (po wybraniu miejsca robisz zapis do EEPROMu odpowiedniej wartości).<br />Z drugim czytnikiem robisz to samo, znowu odczytujesz kolejny adres (ROM CODE) do tempThermometer, sprawdzasz wartość w EEPROM i przypisujesz do właściwej zmiennej.<br />Jak masz wiele czujników to robisz to dla każdego to samo. Najlepiej zrobić pętlę przelatującą po każdym znalezionym czujniku.<br /><br />W dalszym kodzie komunikacji już korzystasz ze swoich zmiennych insideThermometer i outsideThermometer, bo masz już tam poprawne adresy (ROM CODE).<br /><br />Co do funkcji odczytu wartości z EEPROM, o której wcześniej wspominałem, to musisz odczytać minimum 3 bajty (bo Th jest trzecim z kolei).<br />Możesz też jak piszesz odczytać wszystkie 9:<br />[syntax=cpp]for ( i = 0; i &lt; 9; i++) { // we need 9 bytes<br />data&#91;i&#93; = ds.read();<br /><br />ale tutaj jest odczyt 9 bajtow :([/syntax]<br />po odczytaniu tych 9 bajtów sprawdzasz czy data[2] ma odpowiednią wartość.<br />Jak zrobisz to jako dodatkową funkcję, to możesz zwracać z niej tylko wartość przypisaną w rejestrze Th. <br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 30 sty 2016, o 13:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jaglarz]]></name></author>
<updated>2016-01-30T11:49:31+01:00</updated>
<published>2016-01-30T11:49:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=152117#p152117</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=152117#p152117"/>
<title type="html"><![CDATA[Re: Ds18b20 indexowanie po EEprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=152117#p152117"><![CDATA[
<!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7402.html" >topic7402.html</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=471">Jaglarz</a> — 30 sty 2016, o 11:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mori]]></name></author>
<updated>2016-01-29T20:21:20+01:00</updated>
<published>2016-01-29T20:21:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=152073#p152073</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=152073#p152073"/>
<title type="html"><![CDATA[Re: Ds18b20 indexowanie po EEprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=152073#p152073"><![CDATA[
Hej<br /><br />Pozwól, że napiszę moj tok rozumowania :<br />1. onewire.search(). wyszukuję czujnik, rozumiem, że są one indexowane losowo od 0 do nie wiekszej niż ilosc -1<br />( czujniki nie są podpięte w 1 lini tylko w siatce - w moim przykładzie)<br /><br />2. Rom code - czyli teraz odnaszac sie gdziekolwiek w przykladzie do jego Nazwy (nazwa1 = Rom code1 itd)<br />dostaje odpowiedz z odpowiedniego rom code<br /><br />3. odczyt temp w ten sam sposob <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> nazwa = rom , wpisujac nazwe po rom odczyt temp.<br /><br />Mam wszystko zrobione tak jak napisałeś ale tu właśnie pojawia sie moj problem.<br /><br />Przykład. 1<br />mam 10 czujników<br />Jesli zamienię 5 z nich nie bede wstanie okreslic ich fizycznego polozenia.<br /><br />przykład. 2<br />montuje czujnik na kablu jeden w odleglosci 1 metra drugi 50 metrow<br />tworze x takich kabli<br /><br />Chce aby czyjnik w odleglosci 1 metra zawsze byl to temp wewnatrz a<br />w odlegloscie 50 na zewnatrz, nie wazne ktory kabel podłacze.<br /><br />Jak pisałem moze w przypadku 2 czujnikow nie bedzie problemu bo ardu indexuje czyba po czasie odpowiedzi z czujnika (opornosci) ale jesli stworze siatke i dodam jeszcze termometr w kuchni i pokojach zacznie mi to mieszac.<br /><br /><br />Jedyny pomysl jaki mam to nazwanie ich w eepromie<br />Spowoduje to ze eeprom 11 bedzie zawsze czujnikiem na 1 metrze, a<br />eeprom 50 zawsze na 50 metrach. itd.<br /><br />Pewnie sie zastanawiasz dlaczego nie odczytam ich addresow i nie przypisze ich na stale <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Bylo by pięknie jak bym nie musial co chwile sprawdzać nowego kabla <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />jednego z ilosci nieogranicznej.<br /><br />Wiem ze to troche dziwne ale nie potrafie tego lepiej opisac.<br /><br />A teraz do konkretów<br /><br />DeviceAddress insideThermometer, outsideThermometer; - w taki sposób określam sobie nazwy czujników.<br />Nie podaje adresów, bo niemożliwa będzie ich wymiana.<br /><br />Następnie muszę przypisać nazwę do odpowiedniego Indexu.<br />sensors.getAddress(insideThermometer, 0)<br />sensors.getAddress(outsideThermometer, 1)<br /><br />Problem w tym że index przydzielany jest dość losowo. Jeśli czujniki chcę podłączyć w siatce nie widzę innego sposobu niż ich nazwanie w eepromie.<br /><br />Czy dało by sie sprawdzic czy w eeprom indexu 0 jest wartosc 0x11 to nazwij index 0 jako nazwa1<br />jesli jest wartosc 0x22 nazwij jako nazwa 22 itd ( mowie o bajcie 2 lub 3)<br /><br /><br />Próbowałem sprawdzić p0jedyńczy BAJT tak jak to jest w tym przykładzie:<br />switch (addr[0]) {<br />case 0x10:<br />Serial.println(&quot; Chip = DS18S20&quot;); // or old DS1820<br />type_s = 1;<br />break;<br />case 0x28:<br />Serial.println(&quot; Chip = DS18B20&quot;);<br />type_s = 0;<br />break;<br />case 0x22:<br />Serial.println(&quot; Chip = DS1822&quot;);<br />type_s = 0;<br />break;<br />default:<br />Serial.println(&quot;Device is not a DS18x20 family device.&quot;);<br />return;<br />Oczywście przykład tyczy się addresu nie eepromu.<br />Jednak nie udało mi sie odnieść do odpowiedniego Bajtu - z tego co napisales jesli dobrze rozumialem nie bedzie to mozliwe<br /><br />Znalazłem też coś takiego:<br />ds.select(addr);<br />ds.write(0xBE); // Read Scratchpad<br /><br />Serial.print(&quot; Data = &quot;);<br />Serial.print(present, HEX);<br />Serial.print(&quot; &quot;);<br />for ( i = 0; i &lt; 9; i++) { // we need 9 bytes<br />data[i] = ds.read();<br />Serial.print(data[i], HEX);<br /><br /><br />ale tutaj jest odczyt 9 bajtow <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />Jak by mi się udało porównać to co jest w 2 bajcie i stworzyc takie takie warunki jak powyzej (case 0x11 itd)<br />J<br />Zablokowałem się strasznie już chyba od miesiąca szukam info na ten temat ........<img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br /><br />Znalazłem jeszcze takie cos:<br />isConnected(uint8_t* deviceAddress, uint8_t* scratchPad)<br /><br />Jestem w trakcie ustalania jak działa ta funkcja<br /><br />Pozdrawiam i proszę o kolejne rady <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />Seba<br /><br />ps.sorki za błedy<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12581">Mori</a> — 29 sty 2016, o 20:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-01-27T22:16:12+01:00</updated>
<published>2016-01-27T22:16:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=151927#p151927</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=151927#p151927"/>
<title type="html"><![CDATA[Re: Ds18b20 indexowanie po EEprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=151927#p151927"><![CDATA[
DS18B20 nie ma możliwości czytania tylko jednego wybranego bajtu. Więc jest to emulowane poprzez bibliotekę, tak że odczytuje Scratchpad od pierwszego bajtu do wybranego i zwraca tylko wartość ostatniego odczytanego.<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Używasz może Mirkowych z BB?<br /></div><br />Nie zauważyłem, że to <em>Arduino C++</em>  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> <br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 27 sty 2016, o 22:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-01-27T20:57:39+01:00</updated>
<published>2016-01-27T20:57:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=151905#p151905</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=151905#p151905"/>
<title type="html"><![CDATA[Re: Ds18b20 indexowanie po EEprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=151905#p151905"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />W rejestrze TL i TH czyli 2 i 3 bit eepromu mam wgrane:<br /><br />czujnik 1 - eeprom bit 2 wartosc 11<br />czyjnik 2 - eeprom bit 2 wartosc 22<br /></div><br />Bit to najmniejsza jednostka danych, przymująca wartość 0 lub 1. Chyba chodzi ci o bajt?<br /><br />Mając w tymczasowej tablicy wykryte czujniki robisz dla każdego odczyt z nich bajtu z twoim ID i umieszczasz w swojej programowej tablicy na odpowiedniej pozycji jego serial (możesz też trzymać w seriale dwóch zmiennych jak bardzo nie chcesz tablicy). A w programie masz na stałe przypisana pozycję tablicy (zmienną) np. 0 do czujnika wewnątrz a 1 do czujnika na zewnątrz. Dzięki temu w dalszej części programu nie musisz martwić o poprawne przypisanie czujników.<br /><br />-- <br />Pozdrawiam,<br />Robert<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Mam problem z odczytaniem pojedynczego bitu eepromu i stworzeniem odpowiedniej funckcji<br /></div><br />Aby odczytać dane z czujnika, to czytasz przecież kilka razy bajt po bajcie. Więc musisz tylko obejrzeć swoje biblioteki.<br />Używasz może Mirkowych z BB?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 27 sty 2016, o 20:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mori]]></name></author>
<updated>2016-01-27T20:00:36+01:00</updated>
<published>2016-01-27T20:00:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=151900#p151900</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=151900#p151900"/>
<title type="html"><![CDATA[Ds18b20 indexowanie po EEprom]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14323&amp;p=151900#p151900"><![CDATA[
Witam,<br /><br />Na wstępie chcę zaznaczyć, że programowaniem zajmuje się od 3 miesięcy. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Mam wgrane w DS ach-do eepromu wartosci.<br />W rejestrze TL i TH czyli 2 i 3 bit eepromu mam wgrane:<br /><br />czujnik 1 - eeprom bit 2 wartosc 11<br />czyjnik 2 - eeprom bit 2 wartosc 22<br />(sprawdzam to używajac biblioteki oneWire i przykładu DS18x20)<br /><br />A teram co bym chciał osiągnąc <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />ZA kazdym razem jak zmienie czyjnik na inny np:<br />Czujnik 3 - eeprom bit 2 wartosc 11<br />Czyli jak zamienie czujnik 1 na czujnik 3 to chcialbym aby program przypisywal do niego ta sama nazwe np:<br />Temp. zewnetrzna ( cokolwiek )<br />Czyli czujnik majacy wartors eepromu 11 to temperatura zewnetrzna.<br />(nie ma potrzeblemu z podlaczeniem 2 czujnikow z eeprom b2 11 bo do takiej sytulacji nie dojdzie w moim przypadku)<br /><br />Moje pomysły na rozwiaznie tego to:<br />po 1.<br />Sprawdzenie pojedynczego bitu 2 eepromu i jesli ma on wartosc 11 przypisanie mu znawy.<br />Mam problem z odczytaniem pojedynczego bitu eepromu i stworzeniem odpowiedniej funckcji<br /><br />po 2.<br />Przypisanie na poczatku nazwy czujnikowi o wlasciwej zawartosci eepromu.<br />Nie jestem pewniem czy istnieje gotowa komenda ktora na sie to odrazu przypisac.<br /><br /><br />dzięki i czekam na jakies info <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=12581">Mori</a> — 27 sty 2016, o 20:00</p><hr />
]]></content>
</entry>
</feed>