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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-04-10T06:09:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=18093&amp;mode</id>
<entry>
<author><name><![CDATA[michaeleagle]]></name></author>
<updated>2017-04-10T06:09:59+01:00</updated>
<published>2017-04-10T06:09:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18093&amp;p=186784#p186784</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18093&amp;p=186784#p186784"/>
<title type="html"><![CDATA[Re: DS18B20-0 na MSB]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18093&amp;p=186784#p186784"><![CDATA[
Ten fragment napisałem stricte w oparciu o poniższe photo z noty katalogowej:<br /><br /><a href="https://obrazkiforum.atnel.pl/16396/cf17755713d9690a28fb8a36f6c2eed2.PNG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/16396/cf17755713d9690a28fb8a36f6c2eed2.PNG" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16396">michaeleagle</a> — 10 kwi 2017, o 06:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michaeleagle]]></name></author>
<updated>2017-04-09T10:46:38+01:00</updated>
<published>2017-04-09T10:46:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18093&amp;p=186702#p186702</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18093&amp;p=186702#p186702"/>
<title type="html"><![CDATA[Re: DS18B20-0 na MSB]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18093&amp;p=186702#p186702"><![CDATA[
Specjalnie dla Ciebie cały plik źródłowy do obsługi DS18B20 w trybie normal power.<br />Funkcja główna to read_temp, do której przekazujesz adresy zmiennych do przechowywania temp, części dziesiętnej i znaku.<br />W funkcji main wysyłam te wartości poprzez UART do PC.<br /><br />[syntax=c]/*<br /> * sensor.c<br /> *<br /> *  Created on: 06.04.2017<br /> *      Author: Eagle<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &quot;sensor.h&quot;<br />#include &lt;util/delay.h&gt;<br /><br />uint8_t ds_init(void)//sekwencja inicjalizacji transferu<br />{<br />uint8_t presence;<br /><br />//RESET PULSE<br />TLOW();<br />TOUT();<br />_delay_us(480);<br />//WAIT<br />TIN();<br />_delay_us(60);<br />//PRESENCE PULSE<br />presence=(TPIN &amp; (1&lt;&lt;TIO));<br />_delay_us(420);<br /><br />//jeśli jest jakiś układ na magistrali to presence=0<br />return presence;<br />}<br /><br />void ds_writebit(uint8_t bit)//zapis bitu<br />{<br />TLOW();<br />TOUT();<br />_delay_us(1);<br />//zapis jedynki<br />if(bit)<br />TIN();<br />//zapis zera<br />_delay_us(60);<br />TIN();<br />}<br /><br />uint8_t ds_readbit(void)//odczyt bitu<br />{<br />uint8_t bit=0;<br /><br />TLOW();<br />TOUT();<br />_delay_us(1);<br /><br />TIN();<br />_delay_us(14);<br /><br />//jeżeli bit=1<br />if(TPIN &amp; (1&lt;&lt;TIO))<br />bit=1;<br />_delay_us(45);<br /><br />//odstęp pomiędzy kolejnymi bitami musi trwac 60us<br />return bit;<br />}<br /><br />void ds_writebyte(uint8_t byte)//zapis bajtu<br />{<br />for(uint8_t i=0;i&lt;8;i++)<br />{<br />ds_writebit(byte &amp; 1);<br />byte&gt;&gt;=1;<br />}<br />}<br /><br />uint8_t ds_readbyte(void)//odczyt bajtu<br />{<br />uint8_t byte=0;<br />for(uint8_t i=0;i&lt;8;i++)<br />{<br />byte |= (ds_readbit()&lt;&lt;i);<br />_delay_us(15);<br />}<br /><br />return byte;<br />}<br /><br />void ds_read_temp(uint8_t *cal,uint8_t *dec,uint8_t *sign)<br />{<br />uint8_t lsb=0,msb=0;<br />//pomiar temperatury<br />ds_init();<br />ds_writebyte(SKIPROM);<br />ds_writebyte(CONVERTT);<br />_delay_ms(750);<br />//odczyt temperatury<br />ds_init();<br />ds_writebyte(SKIPROM);<br />ds_writebyte(READSCRATCH);<br />//przypisanie<br />lsb=ds_readbyte();<br />msb=ds_readbyte();<br />ds_init();<br /><br />*cal=lsb&gt;&gt;4;<br />*cal |= ((msb&amp;0x7)&lt;&lt;4);<br />*dec=lsb &amp; 0xf;<br />*sign=(msb &amp; (1&lt;&lt;3));<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16396">michaeleagle</a> — 9 kwi 2017, o 10:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michaeleagle]]></name></author>
<updated>2017-04-09T08:45:13+01:00</updated>
<published>2017-04-09T08:45:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18093&amp;p=186696#p186696</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18093&amp;p=186696#p186696"/>
<title type="html"><![CDATA[Re: DS18B20-0 na MSB]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18093&amp;p=186696#p186696"><![CDATA[
Dzięki kolego!<br />Zmodyfikowałem funkcję do odczytu i wszystko działa jak należy.<br />Ale czemu moja wersja nie działała.<br />W każdej iteracji odczytany bit przesuwałem na początek bajtu odebranych(czyli na pozycję msb) a następnie cały bajt przesuwałem w lewo o 1.<br />Wobec czego pierwszy odebrany bit po całej pętli powinien być prawidłowo na pozycji lsb.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16396">michaeleagle</a> — 9 kwi 2017, o 08:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michaeleagle]]></name></author>
<updated>2017-04-07T17:08:47+01:00</updated>
<published>2017-04-07T17:08:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18093&amp;p=186554#p186554</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18093&amp;p=186554#p186554"/>
<title type="html"><![CDATA[DS18B20-0 na MSB]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18093&amp;p=186554#p186554"><![CDATA[
Cześć<br /><br />Napisałem program z użyciem bluebook-a na obsługę DS18B20 i wszystko działa.<br />Postanowiłem sam napisać prostą bibliotekę do obsługi tego czujnika z pomocą noty i innego pdf-a z internetu.<br />Układ poprawnie jest odczytywany, odczytuje mi LSB(1 bajt wysyłany przez czujnik po komendzie READSCRATCHPAD), natomiast <br />na MSB(2 bajt) pokazuje mi 0. Zorietnowałem się, że pokazuje mi tylko 2 część liczby(temp. to 25C, a wyświetlało 5C), dlatego też wyświetliłem sobie wartości bajtów LSB i MSB i stąd dowiedziałem się, że MSB=0. Na pewno jest gdzieś problem ale w sumie nie wiem gdzie. <br /><br />Czujnik zasilany normalnie, dołączony do PC4-&gt;ATmega328P<br /><br />BTW. W późniejszej wersji mam zamiar usunąć _delay na rzecz timerów<br /><br />Pomożecie? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />sensor.c<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &quot;sensor.h&quot;<br />#include &lt;util/delay.h&gt;<br /><br />uint8_t ds_init(void)//sekwencja inicjalizacji transferu<br />{<br />uint8_t presence;<br /><br />//RESET PULSE<br />TOUT();<br />TLOW();<br />_delay_us(480);<br />//WAIT<br />TIN();<br />_delay_us(60);<br />//PRESENCE PULSE<br />presence=(TPIN &amp; (1&lt;&lt;TIO));<br />_delay_us(420);<br /><br />//jeśli jest jakiś układ na magistrali to presence=0<br />return presence;<br />}<br /><br />void ds_writebit(uint8_t bit)//zapis bitu<br />{<br />TOUT();<br />TLOW();<br />_delay_us(1);<br />//zapis jedynki<br />if(bit)<br />TIN();<br />//zapis zera<br />_delay_us(60);<br />TIN();<br />}<br /><br />uint8_t ds_readbit(void)//odczyt bitu<br />{<br />uint8_t bit=0;<br /><br />TOUT();<br />TLOW();<br />_delay_us(1);<br /><br />TIN();<br />_delay_us(14);<br /><br />//jeżeli bit=1<br />if(TPIN &amp; (1&lt;&lt;TIO))<br />bit=1;<br />_delay_us(45);<br /><br />//odstęp pomiędzy kolejnymi bitami musi trwac 60us<br />return bit;<br />}<br /><br />void ds_writebyte(uint8_t byte)//zapis bajtu<br />{<br />for(uint8_t i=0;i&lt;8;i++)<br />{<br />ds_writebit(byte &amp; 1);<br />byte&gt;&gt;=1;<br />}<br />}<br /><br />uint8_t ds_readbyte(void)//odczyt bajtu<br />{<br />uint8_t byte=0;<br />for(uint8_t i=0;i&lt;8;i++)<br />{<br />byte |= (ds_readbit()&lt;&lt;7);<br />byte&gt;&gt;=1;<br />}<br /><br />return byte;<br />}<br /><br />void ds_read_temp(uint8_t *buffer,uint8_t *cal,uint8_t *dec,uint8_t *sign)<br />{<br />uint8_t lsb,msb;<br />//pomiar temperatury<br />ds_init();<br />ds_writebyte(SKIPROM);<br />ds_writebyte(CONVERTT);<br />_delay_ms(750);<br />//odczyt temperatury<br />ds_init();<br />ds_writebyte(SKIPROM);<br />ds_writebyte(READSCRATCH);<br />//przypisanie<br />lsb=ds_readbyte();<br />msb=ds_readbyte();<br />ds_init();<br /><br />*cal=lsb;<br />*dec=msb;<br />//*cal=lsb&gt;&gt;4;<br />//*cal |= ((msb&amp;0x7)&lt;&lt;4);<br />//*dec=lsb &amp; 0xf;<br /><br />//*sign=(msb &amp; (1&lt;&lt;3));<br />}[/syntax]<br /><br />sensor.h<br /><br />[syntax=c]#ifndef SENSOR_SENSOR_H_<br />#define SENSOR_SENSOR_H_<br /><br />//definicja lini danych<br />#define TPORT PORTC//port<br />#define TPIN PINC//rejestr wejściowy<br />#define TDDR DDRC//rejestr kierunku<br />#define TIO PC4//pin<br /><br />//sterowanie pinem<br />#define TIN()TDDR &amp;=~ (1&lt;&lt;TIO)<br />#define TOUT()TDDR |= (1&lt;&lt;TIO)<br />#define THIGH()TPORT |= (1&lt;&lt;TIO)<br />#define TLOW()TPORT &amp;=~ (1&lt;&lt;TIO)<br /><br />//komendy funkcyjne<br />#define CONVERTT 0x44<br />#define WRITESCRATCH 0x4E<br />#define READSCRATCH 0xBE<br />#define COPYSCRATCH 0x48<br />#define READSUPPLY 0xB4<br />#define SEARCHROM 0xF0<br />#define READROM 0x33<br />#define MATCHROM 0x55<br />#define SKIPROM 0xCC<br /><br />//prototypy funkcji<br />uint8_t ds_init(void);//sekwencja inicjalizacji transferu<br />void ds_writebit(uint8_t bit);//zapis bitu<br />uint8_t ds_readbit(void);//odczyt bitu<br />void ds_writebyte(uint8_t byte);//zapis bajtu<br />uint8_t ds_readbyte(void);//odczyt bajtu<br />void ds_read_temp(uint8_t *buffer,uint8_t *cal,uint8_t *dec,uint8_t *sign);<br /><br /><br /><br /><br />#endif /* SENSOR_SENSOR_H_ */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16396">michaeleagle</a> — 7 kwi 2017, o 17:08</p><hr />
]]></content>
</entry>
</feed>