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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-05-15T11:12:13+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=18400&amp;mode</id>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2017-05-15T11:12:13+01:00</updated>
<published>2017-05-15T11:12:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189268#p189268</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189268#p189268"/>
<title type="html"><![CDATA[Re: DS18B20 i problem powyżej 90 stopni]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189268#p189268"><![CDATA[
<div class="quotetitle">wchpikus napisał(a):</div><div class="quotecontent"><br />Nie sprawdzałem powyżej 90 stopni, ale chyba działało bez problemu<br /></div><br /><br /> <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 15 maja 2017, o 11:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wchpikus]]></name></author>
<updated>2017-05-15T09:28:54+01:00</updated>
<published>2017-05-15T09:28:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189256#p189256</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189256#p189256"/>
<title type="html"><![CDATA[Re: DS18B20 i problem powyżej 90 stopni]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189256#p189256"><![CDATA[
z tego co pamietam obliczenie temperatury u mnie wygladalo tak:<br />[syntax=c]..<br />retd = ( ( *temperature_h &lt;&lt; 8 ) + *temperature_l ) * 0.0625;[/syntax]<br />lub tak, z rozbiciem na jednosci i przecinek:<br />[syntax=c]...<br />        temperature&#91;0&#93;=therm_read_byte();<br />        temperature&#91;1&#93;=therm_read_byte();<br /><br />unsigned short DStemp = (temperature&#91;1&#93; &lt;&lt; 8 ) | temperature&#91;0&#93;;<br />        digit=(DStemp&gt;&gt;4)&amp; 0x7F;<br />        decimal=(((DStemp&amp;0xf) * 625) / 100 );[/syntax]<br /><br />Nie sprawdzałem powyżej 90 stopni, ale chyba działało bez problemu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3859">wchpikus</a> — 15 maja 2017, o 09:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2017-05-15T06:22:36+01:00</updated>
<published>2017-05-15T06:22:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189242#p189242</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189242#p189242"/>
<title type="html"><![CDATA[Re: DS18B20 i problem powyżej 90 stopni]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189242#p189242"><![CDATA[
ja bym zadeklarował T1 i T2 jako int8_t i zobaczył jak to się zachowuje<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 15 maja 2017, o 06:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Grigor]]></name></author>
<updated>2017-05-14T14:17:41+01:00</updated>
<published>2017-05-14T14:17:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189200#p189200</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189200#p189200"/>
<title type="html"><![CDATA[Re: DS18B20 i problem powyżej 90 stopni]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189200#p189200"><![CDATA[
Podstawienie wskaźnika nic nie zmieniło. Terminala brak,  T1 i T2 są typu float, bezpośrednio ich nie wyświetlę. Rzutować na jakiś inny typ pomijając to co po przecinku?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16454">Grigor</a> — 14 maja 2017, o 14:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2017-05-14T11:21:04+01:00</updated>
<published>2017-05-14T11:21:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189189#p189189</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189189#p189189"/>
<title type="html"><![CDATA[Re: DS18B20 i problem powyżej 90 stopni]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189189#p189189"><![CDATA[
Kurczę no niby wszystko ok. <br />Ja bym spróbował zobaczyć zmienne T1 i T2 na LCD lub w terminalu jak to wygląda przed błędem i po. Może będzie jakiś trop<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 14 maja 2017, o 11:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Grigor]]></name></author>
<updated>2017-05-14T09:54:28+01:00</updated>
<published>2017-05-14T09:54:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189178#p189178</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189178#p189178"/>
<title type="html"><![CDATA[Re: DS18B20 i problem powyżej 90 stopni]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189178#p189178"><![CDATA[
[syntax=c]extern char wynik1&#91;15&#93;;//zmienna do wyswietlania przekonwertowanej na ASCII wartosci temperatury<br />extern char wynik2&#91;15&#93;;<br />extern float T1, T2;//zmienne do zapisu odczytanej wartosci temperatury[/syntax]<br /><br />extern, bo zostały zadeklarowane w innym pliku, podpatrując w poradnikach styl Mi(rka)strza zrobiłem sobie plik common, żeby w mainie porządek mieć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16454">Grigor</a> — 14 maja 2017, o 09:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2017-05-13T17:59:35+01:00</updated>
<published>2017-05-13T17:59:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189120#p189120</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189120#p189120"/>
<title type="html"><![CDATA[Re: DS18B20 i problem powyżej 90 stopni]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189120#p189120"><![CDATA[
[syntax=c]dtostrf(T1,6, 2, wynik1);[/syntax]<br />tu bym szukał przyczyny - jako czwarty argument masz podać wskaźnik a nie stałą tak przynajmniej wynika z opisu funkcji<br />natomiast pierwszy argument to &quot;double __val&quot; ale jak masz float to powinno być ok. bo AVR-GCC double i tak zamieni na float<br /><br />poza tym pokaż jak masz zadeklarowane zmienne T1,T2 oraz wynik1,wynik2<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 13 maja 2017, o 17:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Grigor]]></name></author>
<updated>2017-05-13T15:13:52+01:00</updated>
<published>2017-05-13T15:13:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189099#p189099</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189099#p189099"/>
<title type="html"><![CDATA[Re: DS18B20 i problem powyżej 90 stopni]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189099#p189099"><![CDATA[
Kombinowałem już trochę w tym temacie, ale bez skutku  <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=16454">Grigor</a> — 13 maja 2017, o 15:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2017-05-13T14:19:53+01:00</updated>
<published>2017-05-13T14:19:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189093#p189093</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189093#p189093"/>
<title type="html"><![CDATA[Re: DS18B20 i problem powyżej 90 stopni]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189093#p189093"><![CDATA[
Może coś się dzieje z zakresami zmiennych przy konwersji dla potrzeb wyświetlacza<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 13 maja 2017, o 14:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Grigor]]></name></author>
<updated>2017-05-13T14:00:08+01:00</updated>
<published>2017-05-13T14:00:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189090#p189090</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189090#p189090"/>
<title type="html"><![CDATA[DS18B20 i problem powyżej 90 stopni]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18400&amp;p=189090#p189090"><![CDATA[
Witam! <br />Mam pewien problem związany z wyżej wymienionymi czujnikami, a raczej w pewnym zakresie z ich obsługą. 2 czujniki na jednej magistrali, odczytywanie kodów ROM, i odczyt temperatury z maksymalną rozdzielczością, no wszystko gra. Zdziwił mnie jednak fakt, który zauważyłem ostatnio. Po podgrzaniu czujnika do temperatury powyżej 90-95 stopni wyświetlają mi się &quot;kwiatki&quot; w postaci dodatnich i ujemnych liczb z zakresu setek i nawet tysięcy występujących na przemiennie. Oczywiście sprawa cichnie po ostudzeniu czujnika poniżej &quot;temperatury błędu&quot;. Czy mógłby ktoś mnie naprowadzić w którym miejscu popełniam błąd? Pragnę zaznaczy że nie używam bibliotek z książek i odczytane wartości temperatury zapisuję w tym paskudnym <img src="https://forum.atnel.pl/images/smilies/icon_twisted.gif" alt=":twisted:" title="Szalony" /> , zajmującym czas i zasoby procesora formacie float. Robię to ze względu na wymaganą dokładność regulacji temperatury w tworzonym projekcie i łatwość operowania danymi przy wprowadzaniu do regulatora na obecnym poziomie wtajemniczenia <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> . Konwersja w celu wyświetlania opiera się o funkcję dtostrf.<br /><br />1WIRE_DS18B20.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;1WIRE_DS18B20.h&quot;<br /><br /><br /> <br /> unsigned char RESET_1WIRE(void) //reset linii 1wire<br /> {<br />uint8_t DS_odp=1,i;<br />unsigned char stan=0;<br />OUT_1WIRE_L;<br />OUTPUT_1WIRE; //wysłanie stanu niskiego na wyjście<br />_delay_us(480); <br />INPUT_1WIRE;   //oczekiwanie na odpowiedź<br />_delay_us(45);<br /><br />for (i=0 ; i&lt;80 ; i++)<br />{<br />if (!(PIN_1WIRE))<br />stan++;<br />_delay_us(1);<br />}<br /><br />if (stan&gt;1)<br />DS_odp=0;<br /><br />_delay_us(480);<br /><br />return DS_odp;<br /> }<br /> <br /> <br /> // wysłanie pojedyńczego bitu na magistrale 1WIRE<br /> <br /> void _1WIRE_SEND_BIT(char sBit)<br /> {<br />OUTPUT_1WIRE;<br />_delay_us(5);<br />if(sBit==1)<br />INPUT_1WIRE;<br /><br />_delay_us(80);<br />INPUT_1WIRE;<br /> }<br /> <br /> <br /> //funkcja odbierająca bit z magistrali 1WIRE<br /> <br />  unsigned char _1WIRE_READ_BIT(void)<br /> {<br />unsigned char rBit;<br />OUTPUT_1WIRE;<br />_delay_us(2);<br />INPUT_1WIRE;<br />_delay_us(15);<br /><br />if(bit_is_set(PORT_1WIRE, PIN_1WIRE))<br />rBit=1;<br />else<br />rBit=0;<br />return(rBit);<br /> }<br /> <br /> //wysłanie bajtu na magistralę 1WIRE<br /> void _1WIRE_SEND_BYTE(char sByte)<br /> {<br />uint8_t i;<br />unsigned char transmited_Byte;<br />for (i=0; i&lt;8; i++)<br />{<br />transmited_Byte = sByte&gt;&gt;i;<br />transmited_Byte &amp;= 0x01;<br />_1WIRE_SEND_BIT(transmited_Byte);<br />}<br />_delay_us(100);<br /> }<br /> <br /> //odebranie bajtu z magistrali<br /> unsigned char _1WIRE_READ_BYTE(void)<br /> {<br />uint8_t i;<br />unsigned char read_Byte=0;<br /><br />for(i=0; i&lt;8; i++)<br />{<br />if (_1WIRE_READ_BIT())<br />read_Byte |= 0x01 &lt;&lt; i;<br />_delay_us(15);<br />}<br />return read_Byte;<br /> }<br /> <br /> //odczyt kodu rom pojedyńczego czujnika DS18B20<br /> <br /> //unsigned char _DS_READ_ROM(void)<br />unsigned char _DS_READ_ROM(unsigned char ROM&#91;&#93;)<br /> {<br />unsigned char i;<br />//unsigned char ROM_1WIRE&#91;8&#93;;<br />unsigned char DS_RESET;<br />_1WIRE_SEND_BYTE(0x33); <br />for(i=0; i&lt;8; i++) <br />{<br /><br />ROM&#91;i&#93;= _1WIRE_READ_BYTE(); //zapisanie kodu w tablicy<br />_delay_ms(60);<br />}<br /><br />DS_RESET=RESET_1WIRE();  //zwolnienie magistrali<br /><br />return ROM;<br /><br /> }<br /> <br /> //zalacza konwersje temp wszystkich czujnikow<br /> <br /> void _TEMP_CONV(void)<br /> {<br />_1WIRE_SEND_BYTE(0xcc);  //skip ROM (niech wszystkie działają)<br />_1WIRE_SEND_BYTE(0x44);  //konwersja temperatury przez ds<br /> <br /> }<br /> <br /> <br /> //Odbiór wartosci temperatury z czujnika, z pominieciem ROM-CODE<br /> //Konwersja temperatury do wyswietlenia na LCD z HD44780<br /> <br /> <br /> float _TEMP_DS(unsigned char ROM_czujnika&#91;&#93;)<br />{<br />uint8_t i;<br />unsigned char DS_RESET;<br />unsigned char temperatura_L=0, temperatura_H=0;<br />float realna_temperatura=0;<br /><br /><br />DS_RESET=RESET_1WIRE();<br />if (DS_RESET==0)<br />{<br /><br /><br />//ODBIÓR Z UWZGLĘDNIENIEM ROM_CODE<br /><br />DS_RESET= RESET_1WIRE();  // reset magistrali<br />_1WIRE_SEND_BYTE(0x55);  //MATCH ROM - komunikacja z czujnikiem o konkretnym kodzie rom<br />for(i=0; i&lt;8;i++)<br />{<br /><br />_1WIRE_SEND_BYTE(ROM_czujnika&#91;i&#93;);<br /><br />}<br />_1WIRE_SEND_BYTE(0xbe);  //odczyt temperatury (read scratchpad)<br />temperatura_L= _1WIRE_READ_BYTE(); //LSB odczytane<br />temperatura_H= _1WIRE_READ_BYTE(); //MSB odczytane<br />DS_RESET=RESET_1WIRE();  //zwolnienie magistrali<br /><br />realna_temperatura=(float)(temperatura_L+(temperatura_H&lt;&lt;8))/16; <br /><br /><br /><br /><br />}<br /><br />return realna_temperatura;<br />}[/syntax]<br />1WIRE_DS18B20.h<br />[syntax=c]//Definicje zmiennych<br /><br />#define OUT_1WIRE_L PORTB= 0x00   //rejestr LSB z temperaturą <br />#define OUT_1WIRE_H PORTB|=0x01//rejestr MSB z temperaturą <br />#define INPUT_1WIRE DDRB=0x00<br />#define OUTPUT_1WIRE DDRB=0x01<br />#define PORT_1WIRE PINB<br />#define PIN_1WIRE 0<br /><br /><br /> unsigned char RESET_1WIRE(void);<br /> void _1WIRE_SEND_BIT(char sBit);<br /> unsigned char _1WIRE_READ_BIT(void);<br /> void _1WIRE_SEND_BYTE(char sByte);<br /> unsigned char _1WIRE_READ_BYTE(void);<br /> //unsigned char _DS_READ_ROM(void);<br /> unsigned char _DS_READ_ROM(unsigned char ROM&#91;&#93;);<br /> float _TEMP_DS(unsigned char ROM_CODE&#91;&#93;);<br /> void _TEMP_CONV(void);[/syntax]<br /><br />kod w funkcji main odpowiedzialny za konwersję i wyświetlanie <br />[syntax=c]if(0==(tick10ms % 50))<br />LCD_WRITE();<br /><br /><br />if( 0 == (tick10ms % 200)) <br />_TEMP_CONV();  //konwersja temperatury przez DS<br /><br /><br /><br /><br />if( 125== (tick10ms % 200)) <br />{<br /><br />T1=_TEMP_DS(NASTAWY_RAM.czujnik_1);//odbiór wyniku temperatury<br />T2=_TEMP_DS(NASTAWY_RAM.czujnik_2);<br /><br />}<br /><br />dtostrf(T1,6, 2, wynik1);//konwersja temperatury na wyświetlacz<br />text_change_xy(4,0,wynik1);//wstawienie wyniku do bufora ekranu<br /><br />dtostrf(T2,6, 2,wynik2);<br />text_change_xy(4,1,wynik2);<br /><br />}[/syntax]<br /><br />wynik1 i 2 to 11 elementowe tablice typu char, T1 i T2 to zmienne typu float<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16454">Grigor</a> — 13 maja 2017, o 14:00</p><hr />
]]></content>
</entry>
</feed>