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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-12-24T19:07:17+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=13967&amp;mode</id>
<entry>
<author><name><![CDATA[matti0010]]></name></author>
<updated>2015-12-24T19:07:17+01:00</updated>
<published>2015-12-24T19:07:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148834#p148834</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148834#p148834"/>
<title type="html"><![CDATA[Re: DS18B20 - błąd przy odczycie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148834#p148834"><![CDATA[
faktycznie <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /> tam ma być PORTB &amp;=~(1&lt;&lt;PB0); <br /><br />najlepsze że po zmianie nadal działa, przed zmianą również działało  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> ATmega jest mądrzejsza niż ja  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> <br /><br />zawsze z DS18B20 miałem problem, DHT11 od ręki zrobiłem a z tym DS... pisząc to mogłem namieszać bo szukałem rozwiązań w wielu różnych miejscach i sprawdzałem co w miarę mi spasuje a potem pisałem po swojemu. Muszę przy okazji to pozmieniać na makra by mieć łatwą o modyfikacji bibliotekę.<br /><br />Ważne że już śmiga  <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=5344">matti0010</a> — 24 gru 2015, o 19:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2015-12-24T18:56:20+01:00</updated>
<published>2015-12-24T18:56:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148833#p148833</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148833#p148833"/>
<title type="html"><![CDATA[Re: DS18B20 - błąd przy odczycie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148833#p148833"><![CDATA[
A co robisz w instrukcji?<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />[syntax=c]PINB &amp;=~(1&lt;&lt;PB0);[/syntax]<br /></div><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Szukając błędów w kierunkach pinów itd. znalazłem błędy w czasach. Porównywałem to z programem który działał i dostosowywałem do swojego &quot;rozwiązania&quot;. Kierunki portów miałem raczej dobre, tak samo ustawienia, przynajmniej nie kojarzę bym to jakoś mocno zmieniał.<br /></div><br />Wcześniej moja sugestia z wklejonym kodem była związana z tym, że także funkcje zapisu i odczytu robisz trochę nietypowo. Ale zajrzałem do Mirkowych bibliotek i on także tak robi <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />Chodzi o to, że sterowanie czy masz wystawić stan wysoki czy niski robisz poprzez sterowanie kierunkiem. Działa to dzięki temu, że w PORT masz wpisane 0. Więc jak dajesz wyjście, to wystawiasz tak stan niski na pinie. Jak dajesz jako wejście, to masz high impedance, ale na szynie jest rezystor i on podciąga i daje stan wysoki. Więc wszystko działa.<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> — 24 gru 2015, o 18:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matti0010]]></name></author>
<updated>2015-12-24T01:22:16+01:00</updated>
<published>2015-12-24T01:22:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148799#p148799</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148799#p148799"/>
<title type="html"><![CDATA[Re: DS18B20 - błąd przy odczycie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148799#p148799"><![CDATA[
Szukając błędów w kierunkach pinów itd. znalazłem błędy w czasach. Porównywałem to z programem który działał i dostosowywałem do swojego &quot;rozwiązania&quot;. Kierunki portów miałem raczej dobre, tak samo ustawienia, przynajmniej nie kojarzę bym to jakoś mocno zmieniał. <br />Poniżej wklejam gotowy i działający kod dla potomnych, dane wyświetlam sobie po RS232 lecz tego tutaj nie dodałem bo to jest częścią mojej większej biblioteczki do jednego projekciku. Dziękuję wszystkim którzy rzucili choć okiem na problem z chęcią pomocy. Dziękuję też za nakierowanie  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />KOD:<br />[syntax=c]#include&lt;avr/io.h&gt;<br />#include&lt;stdio.h&gt;<br />#include&lt;util/delay.h&gt;<br />#include&lt;avr/interrupt.h&gt;<br />#include&quot;biblioteka.h&quot;<br /><br />unsigned char reset_presence_1wire(void)//resetuje magistralę 1-wire i czeka na impuls presence<br />{<br />PORTB  &amp;= ~(1&lt;&lt;PB0);<br />if (!(PINB&amp;(1&lt;&lt;PB0))) return 0;<br /><br />DDRB |=(1&lt;&lt;PB0);<br />PINB &amp;=~(1&lt;&lt;PB0);<br />_delay_us(500);<br />DDRB &amp;=~(1&lt;&lt;PB0);<br />_delay_us(70);<br />if(!(PINB&amp;(1&lt;&lt;PB0)))<br />{<br />_delay_us(500);<br />return 1;<br />}<br />_delay_us(500);<br />return 0;<br />}<br /><br />void send_bit_1wire(char bit)//wysyła na magistralę pojedynczy bit<br />{<br />DDRB |=(1&lt;&lt;PB0);<br /><br />if(bit==1)<br />{<br />_delay_us(7);<br />DDRB &amp;=~(1&lt;&lt;PB0);<br />_delay_us(70);<br />}<br />else<br />{<br />_delay_us(70);<br />DDRB &amp;=~(1&lt;&lt;PB0);<br />_delay_us(7);<br />}<br />}<br /><br />void send_bajt_1wire(char bajt)//wysyła na magistralę jeden bajt<br />{<br />unsigned char licznik;<br />unsigned char wyslanie;<br />PORTB &amp;=~(1&lt;&lt;PB0);<br /><br />for(licznik=0; licznik&lt;8; licznik++)//tutaj trochę robie po swojemu, szukaj tu błędu<br />{<br />wyslanie = bajt&gt;&gt;licznik;<br />wyslanie &amp;= 0x01;<br />send_bit_1wire(wyslanie);<br />}<br />_delay_us(100);<br />}<br /><br />unsigned char read_bit_1wire(void)//odbiera bit z magistrali<br />{<br />unsigned char bit;<br />DDRB |=(1&lt;&lt;PB0);<br />_delay_us(7);<br />DDRB &amp;=~(1&lt;&lt;PB0);<br />_delay_us(7);<br />if(PINB&amp;(1&lt;&lt;PB0))<br />{<br />bit=1;<br />}<br />else<br />{<br />bit=0;<br />}<br />return bit;<br />}<br /><br />unsigned char read_bajt_1wire(void)//odbiera bajt z magistrali<br />{<br />unsigned char licznik;<br />unsigned char wartosc=0;<br /><br />DDRB &amp;=~(1&lt;&lt;PB0);<br /><br />for(licznik=0; licznik&lt;8; licznik++)<br />{<br />if (read_bit_1wire())<br />{<br />wartosc |=(0x01&lt;&lt;licznik);<br />}<br />_delay_us(70);<br />}<br />return(wartosc);<br />}<br /><br />int main(void)<br />{<br />unsigned char reset;<br /><br />char tempH=0;<br />char tempL=0;<br />float temp=0;<br /><br />rs_init();<br />adc_init();<br />/*int jasnosc=0;<br />uint8_t kwiatek&#91;3&#93;={0,0,0};<br />uint8_t dht11&#91;6&#93;={0,0,0,0,0,1};//dht11&#91;0&#93; i dht11&#91;1&#93; to wilgotnosc, dht11&#91;2&#93; i dht11&#91;3&#93; to temperatura w C, dht11&#91;4&#93; to Check-Sum, dht11&#91;5&#93; to sprawdzenie poprawności transmisji<br />*/while(1)<br />{<br />/*adc5_read();<br />jasnosc=jasnosc_skalowanie(ADC);<br />nadaj_liczbe_rs(jasnosc);<br />ile_kwiatkow(kwiatek);<br />DHT11(dht11);<br />nadaj_liczbe_rs(dht11&#91;0&#93;+dht11&#91;1&#93;);<br />nadaj_liczbe_rs(dht11&#91;2&#93;+dht11&#91;3&#93;);<br />nadaj_liczbe_rs(dht11&#91;4&#93;);<br /> */<br />reset=reset_presence_1wire();<br />if(reset==1)<br />{<br />send_bajt_1wire(0xCC);<br />send_bajt_1wire(0x44);<br />_delay_ms(750);<br />reset=reset_presence_1wire();<br />send_bajt_1wire(0xCC);<br />send_bajt_1wire(0xBE);<br />tempL=read_bajt_1wire();<br />tempH=read_bajt_1wire();<br />reset=reset_presence_1wire();<br />temp=(float)(tempL+(tempH&lt;&lt;8))/16;<br />nadaj_liczbe_rs(temp);<br /><br />}<br />_delay_ms(1000);<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5344">matti0010</a> — 24 gru 2015, o 01:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2015-12-24T00:49:33+01:00</updated>
<published>2015-12-24T00:49:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148796#p148796</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148796#p148796"/>
<title type="html"><![CDATA[Re: DS18B20 - błąd przy odczycie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148796#p148796"><![CDATA[
Masz pomieszane używanie rejestrów PINB, PORTB, DDRB - na przykład dlaczego przy wysyłaniu zmieniasz rejestr DDRB a nie PORTB?<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />[syntax=c]void send_bit_1wire(char bit)//wysyła na magistralę pojedynczy bit<br />{<br />        DDRB |=(1&lt;&lt;PB0);<br />        _delay_us(5);<br />        if(bit==1)<br />        {<br />                DDRB &amp;=~(1&lt;&lt;PB0);<br />        }<br />        _delay_us(80);<br />        DDRB &amp;=~(1&lt;&lt;PB0);<br />}[/syntax]<br /></div><br /><br />Przeczytaj <a href="http://mirekk36.blogspot.com/2012/01/avr-porty-wewy-dir-podstawy.html"  class="postlink">http://mirekk36.blogspot.com/2012/01/avr-porty-wewy-dir-podstawy.html</a>.<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> — 24 gru 2015, o 00:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matti0010]]></name></author>
<updated>2015-12-22T19:13:08+01:00</updated>
<published>2015-12-22T19:13:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148719#p148719</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148719#p148719"/>
<title type="html"><![CDATA[DS18B20 - błąd przy odczycie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13967&amp;p=148719#p148719"><![CDATA[
Witam,<br /><br />mam pewien problem a mianowicie, błędnie odczytuje mi temperaturę z DS18B20. Ciągle mam 0 (jak sprawdzam LSB i MSB to mam 255 w każdym). Morduję się z tym już 2 dzień... Szukałem pomysłów lecz...<br /><br />[syntax=c]#include&lt;avr/io.h&gt;<br />#include&lt;stdio.h&gt;<br />#include&lt;util/delay.h&gt;<br />#include&lt;avr/interrupt.h&gt;<br />#include&quot;biblioteka.h&quot;<br /><br />unsigned char reset_presence_1wire(void)//resetuje magistralę 1-wire i czeka na impuls presence<br />{<br />unsigned char presence;<br />PINB &amp;=~(1&lt;&lt;PB0);<br />DDRB |=(1&lt;&lt;PB0);<br />_delay_us(500);<br />DDRB &amp;=~(1&lt;&lt;PB0);<br />_delay_us(45);<br />if(!(PINB&amp;(1&lt;&lt;PB0)))<br />{<br />presence=1;<br />}<br />else<br />{<br />presence=0;<br />}<br />return presence;<br />}<br /><br />void send_bit_1wire(char bit)//wysyła na magistralę pojedynczy bit<br />{<br />DDRB |=(1&lt;&lt;PB0);<br />_delay_us(5);<br />if(bit==1)<br />{<br />DDRB &amp;=~(1&lt;&lt;PB0);<br />}<br />_delay_us(80);<br />DDRB &amp;=~(1&lt;&lt;PB0);<br />}<br /><br />void send_bajt_1wire(char bajt)//wysyła na magistralę jeden bajt<br />{<br />unsigned char licznik;<br />unsigned char wyslanie;<br /><br />for(licznik=0; licznik&lt;8; licznik++)<br />{<br />wyslanie = bajt&gt;&gt;licznik;<br />wyslanie &amp;= 0x01;<br />send_bit_1wire(wyslanie);<br />}<br />_delay_us(100);<br />}<br /><br />unsigned char read_bit_1wire(void)//odbiera bit z magistrali<br />{<br />unsigned char bit;<br />DDRB |=(1&lt;&lt;PB0);<br />_delay_us(2);<br />DDRB &amp;=~(1&lt;&lt;PB0);<br />_delay_us(15);<br />if(PINB&amp;(1&lt;&lt;PB0))<br />{<br />bit=1;<br />}<br />else<br />{<br />bit=0;<br />}<br />return bit;<br />}<br /><br />unsigned char read_bajt_1wire(void)//odbiera bajt z magistrali<br />{<br />unsigned char licznik;<br />unsigned char wartosc=0;<br /><br />for(licznik=0; licznik&lt;8; licznik++)<br />{<br />if (read_bit_1wire())<br />{<br />wartosc |=(0x01&lt;&lt;licznik);<br />}<br />_delay_us(15);<br />}<br />return(wartosc);<br />}<br /><br />int main(void)<br />{<br />rs_init();<br />unsigned char reset;<br /><br />char tempH=0;<br />char tempL=0;<br />float temp=0;<br />while(1)<br />{<br />nadaj_liczbe_rs(1992);//bym odróżnił pomiar od nastepnego<br />_delay_ms(1000);<br />reset=reset_presence_1wire();<br />if(reset==1)<br />{<br />send_bajt_1wire(0xCC);<br />send_bajt_1wire(0x44);<br />_delay_ms(750);<br />reset=reset_presence_1wire();<br />send_bajt_1wire(0xCC);<br />send_bajt_1wire(0xBE);<br />tempL=read_bajt_1wire();<br />tempH=read_bajt_1wire();<br />reset=reset_presence_1wire();<br />temp=(float)(tempL+(tempH&lt;&lt;8))/16;<br />nadaj_liczbe_rs(temp);<br /><br />}<br />else<br />{<br />nadaj_liczbe_rs(2222);<br />}<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5344">matti0010</a> — 22 gru 2015, o 19:13</p><hr />
]]></content>
</entry>
</feed>