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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-10-13T20:54:32+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13198&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-10-13T20:54:32+01:00</updated>
<published>2015-10-13T20:54:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142340#p142340</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142340#p142340"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142340#p142340"><![CDATA[
<div class="quotetitle">krzysssztof napisał(a):</div><div class="quotecontent"><br />TIFR |= (1 &lt;&lt; TOV0); - w momencie, gdy już doliczy (i powinno się pojawić przerwanie) czyści flagę przepełnienia timera<br /></div><br />Wyjątek od reguły występuje dla zerowania fag przerwań. Powyższy przykład jest błędny już tłumaczę dlaczego. Flagi przerwań zerowane są przez wpisanie tam 1 i na przykład mamy rejestr TIFR z flagami przerwań o zawartości 0b00000101. Jak chcemy wyzerować bit 0 to należy użyć  instrukcji:<br />[syntax=c]TIFR = (1 &lt;&lt; 0);[/syntax]<br />co odpowiada:<br />[syntax=c]TIFR = (1 &lt;&lt; TOV0);[/syntax]<br />i jest to to samo co:<br />[syntax=c]TIFR = 0b00000001;[/syntax]<br />Działa to tak, że do rejestru zostanie wpisana liczba 0b00000001 i ta jedynka wyzeruje bit 0, a zera nic nie zmienią. Użycie<br />[syntax=c]TIFR |= (1 &lt;&lt; TOV0);[/syntax]<br />lub:<br />[syntax=c]TIFR |= (1 &lt;&lt; 0);[/syntax]<br />Wywoła następujące działania:<br />Odczytanie TIFR w którym np. jest  0b00000101, wykonanie sumy bitowej 0b00000101 | 0b00000001 = 0b00000101 i zapisanie tego do rejestru TIFR czyli:<br />[syntax=c]TIFR = 0b00000101;[/syntax]<br />Spowoduje to wyzerowanie zarówno flagi TOV0 jak i TOV1, a tego akurat nie chcemy.<br /><div class="quotetitle">dawid75_75 napisał(a):</div><div class="quotecontent"><br />Czy fakt, że mam podłączony LCD może mieć coś na rzeczy?<br /></div><br />Jego funkcje mogą przekonfigurować inne piny na tym samym porcie, ale nie muszą. Najlepiej LCD trzymaj na oddzielnym porcie, ale to wszystko zależy jak to zostało zaimplementowane.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 13 paź 2015, o 20:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2015-10-13T19:56:48+01:00</updated>
<published>2015-10-13T19:56:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142333#p142333</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142333#p142333"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142333#p142333"><![CDATA[
Więc tak: procesor to Atmega8 i JTAG nie posiada.<br />Przerzuciłem całość na port B i też nic się nie dzieje.<br />Sprawdziłem, czy z procesorem wszystko w porządku i skompilowałem malutki programik do migania jedną diodą. Działa na porcie B i C na tym samym pinie co próbuję uruchomić ten przeklęty termometr. Funkcje delay działają. Źródło taktowania zmieniłem z wewnętrznego oscylatora na zewnętrzny kwarc 8MHz i kondensatory 22pF.<br />Przyczyna leży gdzieś indziej, proszę o dalsze wskazówki <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Edit - - - <br />Czy fakt, że mam podłączony LCD może mieć coś na rzeczy?<br /><br />Edit 2 - - -<br />skopiowałem kod odpowiedzialny za miganie diodą na pinie PB0 z programu, który działał na tych samych ustawieniach procesora do pętli głównej tego nieszczęsnego programu i co dziwne - nic, w ogóle nie zostało to wykonane. O co tu może chodzić?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 13 paź 2015, o 19:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Miccrel]]></name></author>
<updated>2015-10-13T17:40:19+01:00</updated>
<published>2015-10-13T17:40:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142315#p142315</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142315#p142315"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142315#p142315"><![CDATA[
Witam, przymierzam się do napisania projektu potrzebnego na zajęcia z programowania. Natrafiłem na problem, posiłkowałem się poradnikiem z linku u góry. Sprawdziłem _delay odmierza dobry czas na migającej diodzie, lecz na wyświetlaczu pojawiają się zera, obojętnie z której metody bym nie skorzystał. Napis 'cisza' także się nie wyświetla. <br /> [syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />#define OUT_1wire_LOW PORTB &amp;= ~(1&lt;&lt;PB2)<br />#define OUT_1wire_HIGH  PORTB |= (1&lt;&lt;PB2)<br />#define DIR_1wire_IN      DDRB &amp;= ~(1&lt;&lt;PB2)<br />#define DIR_1wire_OUT DDRB |= (1&lt;&lt;PB2)<br /><br /><br />char cStringBuffer&#91;8&#93;;<br /><br />unsigned char uc1wire_ResetPulse(void)<br />{<br />unsigned char ucPresenceImpulse;<br />OUT_1wire_LOW;<br />DIR_1wire_OUT;<br />_delay_us(500);<br />DIR_1wire_IN;<br />_delay_us(45);<br /><br />if (bit_is_clear(PORT_1wire, PIN_1wire))<br />ucPresenceImpulse=1;<br />else<br />ucPresenceImpulse=0;<br />_delay_us(470);<br />return ucPresenceImpulse;<br />}<br />void v_SendBit (char cBit)<br />{<br />DIR_1wire_OUT;<br />_delay_us(5);<br />if (cBit==1)<br />DIR_1wire_IN;<br />_delay_us (80);<br />DIR_1wire_IN;<br />}<br />unsigned char v_ReadBit (void)<br />{<br />unsigned char ucBit;<br />DIR_1wire_OUT;<br />_delay_us(2);<br />DIR_1wire_IN;<br />_delay_us(15);<br /><br />if (bit_is_set(PORT_1wire, PIN_1wire))<br />ucBit = 1;<br />else<br />ucBit = 0;<br />return(ucBit);<br />}<br /><br />void v_SendByte(char ucByte)<br />{<br />unsigned char ucCounter;<br />unsigned char ucValueToSend;<br /><br />for (ucCounter=0; ucCounter&lt;8; ucCounter++)<br />{<br />ucValueToSend = ucByte&gt;&gt;ucCounter;<br />ucValueToSend &amp;= 0x01;<br />v_SendBit(ucValueToSend);<br />}<br />_delay_us(100);<br />}<br /><br />unsigned char v_ReadByte (void)<br />{<br />unsigned char ucCounter;<br />unsigned char ucReadByte = 0;<br /><br />for (ucCounter=0; ucCounter&lt;8; ucCounter++)<br />{<br />if (v_ReadBit())<br />ucReadByte |= 0x01&lt;&lt;ucCounter;<br />_delay_us(15);<br />}<br />return (ucReadByte);<br />}<br />int main(void)<br />{<br />DDRA |= (1&lt;&lt;PA7);// ustawiamy kierunek linii podświetlenia LCD jako WYJŚCIE<br />PORTA |= (1&lt;&lt;PA7);<br />lcd_init();<br /><br />unsigned char ucReset;<br />char cTemperatureH=0, cTemperatureL=0;<br />float fTemperature=0;<br />DDRB |= (1&lt;&lt;PB3);<br />PORTB &amp;= ~(1&lt;&lt;PB3);<br /><br />while(1){<br /><br /><br />    ucReset=uc1wire_ResetPulse();<br />if(ucReset==1)<br />{<br />v_SendByte(0xCC);<br />v_SendByte (0x44);<br />_delay_ms(750);<br />ucReset=uc1wire_ResetPulse();<br />v_SendByte(0xCC);<br />v_SendByte(0xBE);<br />cTemperatureL=v_ReadByte();<br />cTemperatureH=v_ReadByte();<br />ucReset=uc1wire_ResetPulse();<br /><br />fTemperature=(float)(cTemperatureL+(cTemperatureH&lt;&lt;8))/16;<br />dtostrf(fTemperature, 1, 1, cStringBuffer);<br />lcd_locate(0,0);<br />lcd_str(cStringBuffer);<br /><br /><br />int retd1, retd2;<br />int temp;<br />temp = ( cTemperatureH &lt;&lt; 8 ) + cTemperatureL;<br />retd1 = temp * 625L /10000; //część całkowita np. -162 * 625 / 10 000 = -10 (dzielenie całkowite)<br />//retd2 = (temp * 625L /100 ) % 100; //cześć ułamkowa z precyzją 2 znaków np. (-162 * 625 / 100) % 100 = -1012 % 100 = -12<br />//if(retd2 &lt; 0) { retd2 = -retd2; } //usunięcie &quot;-&quot; z części ułamkowej<br />lcd_locate(1, 5);<br />lcd_int(retd1);<br /><br />}<br />else<br />{<br />lcd_locate(1,0);<br />lcd_str(&quot;cisza&quot;);<br /><br />}<br /><br /><br />_delay_ms(200);<br /><br /><br />}<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3557">Miccrel</a> — 13 paź 2015, o 17:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysssztof]]></name></author>
<updated>2015-10-13T15:00:39+01:00</updated>
<published>2015-10-13T15:00:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142295#p142295</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142295#p142295"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142295#p142295"><![CDATA[
PC4 powiadasz ? <br />A co to za procesor, JTAG wyłączyłeś?  <br />Spróbuj podłączyć tą diodę pod inny port niż PORT C.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4274">krzysssztof</a> — 13 paź 2015, o 15:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2015-10-13T14:17:17+01:00</updated>
<published>2015-10-13T14:17:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142293#p142293</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142293#p142293"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142293#p142293"><![CDATA[
No nie wiem co się dzieje, ale w ogóle nie chce to działać. Ustawiłem wewnętrzny oscylator na 8MHz, preskaler na 8, co mi da zliczanie impulsów z prędkością 1MHz. To znaczy, że 16bitowy licznik liczy od 0 do 65535 z krokiem 1us między impulsami. Zwykłe delay też nie chce działać, nawet jeśli chodzi o milisekundy. Sprawdzałem na diodzie ustawiając port C jako wyjście i dając stan wysoki na pin PC4. O co tu może chodzić?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 13 paź 2015, o 14:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysssztof]]></name></author>
<updated>2015-10-13T13:34:10+01:00</updated>
<published>2015-10-13T13:34:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142285#p142285</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142285#p142285"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142285#p142285"><![CDATA[
Faktycznie, napisałem odwrotnie do rzeczywistości. Dzięki<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4274">krzysssztof</a> — 13 paź 2015, o 13:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysssztof]]></name></author>
<updated>2015-10-13T13:14:29+01:00</updated>
<published>2015-10-13T13:14:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142281#p142281</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142281#p142281"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142281#p142281"><![CDATA[
Wygląda w porządku, niezbyt mam teraz czas otwierać notę katalogową i dokładnie sprawdzać.<br />Zamiast<br />[syntax=c]while(!TIFR&amp;TOV1);[/syntax]<br />powinno być<br />[syntax=c]while(!TIFR&amp;&amp;TOV1);[/syntax] - czyli trzeba użyć &amp;&amp;, żeby wykonać maskowanie bitowe, żeby sprawdzić tylko bit TOV1.<br /><br />Napisz jakiś prosty program do migania diodą, użyj tej funkcji i wtedy przekonasz się, czy jest prawidłowo <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Miej też na uwadze, że szybkość zliczania timera zależy od częstotliwości taktowania procesora.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4274">krzysssztof</a> — 13 paź 2015, o 13:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2015-10-13T08:31:00+01:00</updated>
<published>2015-10-13T08:31:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142263#p142263</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142263#p142263"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142263#p142263"><![CDATA[
Zgodnie z Twoimi wskazówkami <strong>krzysssztof</strong> wypociłem takie coś:<br />[syntax=c]void czekaj(uint16_t czas)<br />{<br />TCCR1B |= (1&lt;&lt;CS11);<br />TCNT1 = 65535-czas;<br />while(!TIFR&amp;TOV1);<br />TIFR |= (1&lt;&lt;TOV1);<br />TCCR1B &amp;= ~(1&lt;&lt;CS11);<br />}[/syntax]<br /><br />Nada się?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 13 paź 2015, o 08:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysssztof]]></name></author>
<updated>2015-10-13T07:49:55+01:00</updated>
<published>2015-10-13T07:49:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142262#p142262</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142262#p142262"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142262#p142262"><![CDATA[
[syntax=c]void delay_1sec()<br />{<br />TCNT1=15625;<br />do<br />{<br />TCNT1=(TCNT1-1);<br />}while(TCNT1&gt;0);<br />}[/syntax]<br /><br />Taka jest idea, jednak tutaj jest to źle zrealizowane - zauważ, że programista sam odejmuje wartości w liczniku (TCNT1=(TCNT1-1);) - więc po co do tego używać licznika? Taką operację można zrobić na jakiejkolwiek zmiennej. Dodatkowo najpierw ustala preskaler na 64, a następnie zmienia wartość tego countera/timera z maksymalną prędkością, w każdym obiegu pętli - gdzie tu sens, gdzie logika?<br />Chodzi o to, żeby licznik sam sobie liczył, a Ty w odpowiednim momencie tylko go zerujesz.<br /><br />Jak dla mnie wyglądałoby to w ten sposób (pseudo-kod, pokazujący ideę):<br /><br />void czekaj(void) - oczywiście tutaj można uzmiennić, żeby dało się zmieniać wartość wykonywanego opóźnienia<br />{<br /> TCCR0 |= ... ;                 - tutaj ustawić sobie preskaler aby timer odliczał z odpowiednią prędkością<br /> TCNT = ... ;                    - tutaj ustawić wartość początkową (aby miał do zliczenia odpowiednią ilość impulsów)<br /> while (!(TIFR &amp;&amp; TOV0));   - tutaj oczekuje, aż timer odliczy sobie czas<br /> TIFR |= (1 &lt;&lt; TOV0);       - w momencie, gdy już doliczy (i powinno się pojawić przerwanie) czyści flagę przepełnienia timera<br /> TCCR0 |= ... ;                 - tutaj wyzerować preskaler, aby timer przestał odliczać (w kolejnym wywolaniu funkcji znów go uruchomisz)<br /><br />}<br /><br />Powyższy przykład pisany na przykładzie TIMER'a 0 w atmega 8. Musisz go dostosować do swojej sytuacji - ustawić odpowiednie rejestry, preskalery itd.<br /><br />Mam nadzieję, że nie napisałem steku bzdur z powodu wczesnej godziny <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />Krzysiek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4274">krzysssztof</a> — 13 paź 2015, o 07:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2015-10-12T23:21:40+01:00</updated>
<published>2015-10-12T23:21:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142256#p142256</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142256#p142256"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142256#p142256"><![CDATA[
Czy to jest to samo co to (?): <br /><!-- m --><a class="postlink" href="http://www.electroons.com/electroons/timer_delay.html" >http://www.electroons.com/electroons/timer_delay.html</a><!-- m --><br />Tutaj też wykorzystuję timer i nie zgłaszam przerwania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 12 paź 2015, o 23:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzysssztof]]></name></author>
<updated>2015-10-12T23:16:16+01:00</updated>
<published>2015-10-12T23:16:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142255#p142255</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142255#p142255"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142255#p142255"><![CDATA[
Według mnie chodzi o to:<br /><br />Ustawiasz licznik, żeby liczył zadany przez Ciebie czas - to już sam napisałeś, że pojmujesz.   <br />W momencie, gdy licznik się przepełni, czyli &quot;przeskakuje&quot; z max na 0 (ewentualnie realizuje funkcję liczenia do odpowiedniej wartości) w odpowiedzim rejestrze ustawiana jest flaga (czyli taki znacznik), że licznik doliczył do oczekiwanej wartości i powinno zostać zrealizowane przerwanie z tym związane. Jednak nie musisz pisać procedury wykonania tego przerwania - wystarczy wtedy wyczyścić flagę timera.<br /><br />W skrócie:  wystawienie flagi przez timer oznacza, że przerwanie powinno się w tym momencie wykonać. Jednak można pominąć wykonanie przerwania i ręcznie skasować tą flagę (domyślnie kasuje się ona samoczynnie przy wykonywaniu przerwania). Zwróć uwagę, że w dalszym ciągu wiesz, ile czasu minęło - bo timer liczy prawidłowo.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4274">krzysssztof</a> — 12 paź 2015, o 23:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2015-10-12T22:09:45+01:00</updated>
<published>2015-10-12T22:09:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142254#p142254</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142254#p142254"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142254#p142254"><![CDATA[
Średniki usunąłem i sprawdziłem delay... nie działa w ogóle, za szybko przeskakuje dalej, w ogóle nie widzę, żeby zapaliło diodę. A dioda sprawna, bo jak podłączyłem bezpośrednio pod 5V to się ładnie świeci.<br /><br />Co ciekawe, w innym programie, gdzie miałem tylko mruganie na zmianę LEDami to opóźnienie delay(1000)ms działało prawidłowo... Jednak wtedy miałem ustawiony wewnętrzny oscylator na 1MHz. Tutaj mam kwarc ma 16MHz, ale w opcjach projektu zdefiniowałem F_CPU.<br />Co może być powodem, przez który delay nie działa?<br /><br />Edit-----<br />Napisałeś tak: <div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Opóźnienie na timerze typu delay możesz zrealizować bez użycia przerwań. Wpisujesz do licznika timera odpowiednią wartość. Konfigurujesz timer w odpowiedni tryb i ustawiasz preskaler (co włącza zliczanie). Sprawdzasz w pętli while flagę przerwania (co wstrzymuje program). Wyłączasz timer. Dla innego opóźnienia ustawiasz inaczej.<br /></div><br />Pierwsze 3 zdania rozumiem - np. ustawiam sobie timer 16bitowy i korzystam z rejestru TCNT1 do ustawiania licznika z odpowiednią wartością. Mogę ustawić atmegę na 8MHz i preskaler na 8 co da mi zliczanie impulsów co 1us.<br />Ale już w 4. zdaniu piszesz, że sprawdzam flagę przerwania, a w pierwszym zdaniu, że przerwań nie używamy i to sprawia, że całości pojąć nie mogę <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Proszę uprzejmie o bliższe wskazówki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 12 paź 2015, o 22:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-10-12T21:39:14+01:00</updated>
<published>2015-10-12T21:39:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142250#p142250</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142250#p142250"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142250#p142250"><![CDATA[
Na początek sprawdź czy rzeczywiście delay działa jak należy. Zamiast termometru podłącz LED przez rezystor 1k i użyj takiego kodu:<br />[syntax=c]DIR_1WIRE_OUT;<br />while(1)<br />{<br />   OUT_1WIRE_HIGH;<br />   _delay_ms(500);<br />   OUT_1WIRE_LOW;<br />   _delay_ms(500);<br />}[/syntax]<br /><br />W define nie dawaj średników, bo masz teraz jakby zdublowane. Tak wystarczy<br />[syntax=c]#define OUT_1WIRE_LOW   PORT_1WIRE &amp;= ~(1&lt;&lt;PIN_1WIRE)  //bez ;[/syntax]<br /><br />Jeśli chodzi załączanie plików c to nie powinieneś tego robić. Plik ma być w drzewku projektu i zostanie skompilowany, a załącza się tylko plik *.h<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 10 pikosekundach ]</span></strong><br /><br />Opóźnienie na timerze typu delay możesz zrealizować bez użycia przerwań. Wpisujesz do licznika timera odpowiednią wartość. Konfigurujesz timer w odpowiedni tryb i ustawiasz preskaler (co włącza zliczanie). Sprawdzasz w pętli while flagę przerwania (co wstrzymuje program). Wyłączasz timer. Dla innego opóźnienia ustawiasz inaczej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 12 paź 2015, o 21:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2015-10-12T20:09:13+01:00</updated>
<published>2015-10-12T20:09:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142234#p142234</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142234#p142234"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142234#p142234"><![CDATA[
W opcjach projektu mam dodaną bibliotekę: &quot;libprintf_flt.a&quot; i ta konwersja mi działa, bo sprawdzałem to przy programie mierzącym temperaturę za pomocą termometru MCP9700.<br />A kiedy nie zainkluduję pliku .c do wyświetlacza to kompilator wyrzuca takie błędy:<br /><em>undefined reference to `LCD_Initalize'</em> i tak to każdej funkcji dotyczącej wyświetlacza.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 12 paź 2015, o 20:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafał555]]></name></author>
<updated>2015-10-12T20:03:10+01:00</updated>
<published>2015-10-12T20:03:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142233#p142233</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142233#p142233"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142233#p142233"><![CDATA[
Wrzuciłem twój kod do eclipsa.<br />Nie masz zainkludowanej biblioteki do tej funkcji:<br /><br />[syntax=c]sprintf(wynik_dallas,&quot;T= %1.3f &#91;C&#93;&#91;d&#93;&quot;,fTemperature);   // konwersja na łańcuch znakowy[/syntax]<br /><br />Niepotrzebnie też inkludujesz plik .c od wyświetlacza.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2697">Rafał555</a> — 12 paź 2015, o 20:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2015-10-12T19:14:49+01:00</updated>
<published>2015-10-12T19:14:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142225#p142225</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142225#p142225"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142225#p142225"><![CDATA[
<div class="quotetitle">Krauser napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">dawid75_75 napisał(a):</div><div class="quotecontent">[syntax=c]#define DIR_1WIRE_OUT   DDRC != (1&lt;&lt;PIN_1WIRE);                 // ustawia pin PC4 jako wyjście[/syntax]<br /></div><br />Masz wykrzyknik ! zamiast pionowej kreski |</div><br /><br />Rzeczywiście, nie zauważyłem. Nie wiem jakim cudem tam to wpisałem.<br /><br />[syntax=c]return(ucReadByte);[/syntax] - odnośnie funkcji uv1Wire_ReadByte();<br /><br />Poprawiłem, ale dalej &quot;cisza&quot;, czyli nawet reset nie działa. Problem w interwałach czasowych i potrzebny timer/counter do precyzyjnego odmierzania czasu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 12 paź 2015, o 19:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2015-10-12T15:56:26+01:00</updated>
<published>2015-10-12T15:56:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142208#p142208</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142208#p142208"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142208#p142208"><![CDATA[
Jeżeli funkcja cos zraca.<br /><br />Namazane ze smarta.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 12 paź 2015, o 15:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafał555]]></name></author>
<updated>2015-10-12T15:47:49+01:00</updated>
<published>2015-10-12T15:47:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142205#p142205</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142205#p142205"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142205#p142205"><![CDATA[
[syntax=c]cTemperatureL = uv1Wire_ReadByte();             // odczytanie LSB<br />               cTemperatureH = uv1Wire_ReadByte();             // odczytanie MSB[/syntax]<br /><br /> A to jest dobrze ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2697">Rafał555</a> — 12 paź 2015, o 15:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-10-12T15:05:04+01:00</updated>
<published>2015-10-12T15:05:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142202#p142202</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142202#p142202"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142202#p142202"><![CDATA[
<div class="quotetitle">dawid75_75 napisał(a):</div><div class="quotecontent"><br />[syntax=c]#define DIR_1WIRE_OUT   DDRC != (1&lt;&lt;PIN_1WIRE);                 // ustawia pin PC4 jako wyjście[/syntax]<br /></div><br />Masz wykrzyknik ! zamiast pionowej kreski |<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 12 paź 2015, o 15:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2015-10-12T10:24:30+01:00</updated>
<published>2015-10-12T10:24:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142185#p142185</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142185#p142185"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142185#p142185"><![CDATA[
Poprawione - wstawiłem w tym znaczniku, ale 'c' napisałem wielką literą i już nie odczytało poprawnie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 12 paź 2015, o 10:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nefarious19]]></name></author>
<updated>2015-10-12T10:15:11+01:00</updated>
<published>2015-10-12T10:15:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142184#p142184</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142184#p142184"/>
<title type="html"><![CDATA[Re: Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142184#p142184"><![CDATA[
Wstaw kod w znaczniki syntax=C bo  w tej chwili jest mega nieczytelny<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2500">Nefarious19</a> — 12 paź 2015, o 10:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[dawid75_75]]></name></author>
<updated>2015-10-12T10:23:15+01:00</updated>
<published>2015-10-12T09:19:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142180#p142180</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142180#p142180"/>
<title type="html"><![CDATA[Obsługa termometru DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13198&amp;p=142180#p142180"><![CDATA[
Szanowni Forumowicze!<br />Jako, że jestem tu nowy, na początku chciałbym wszystkich serdecznie przywitać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />A teraz do rzeczy <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> - od kilku dni próbuję obsłużyć termometr firmy Dallas model DS18B20. O ile na Arduino nie ma z tym problemu z racji gotowych bibliotek, o tyle na atmedze8 sprawia mi to kłopot. Nie chcę korzystać z gotowych bibliotek do obsługi tego termometru (przynajmniej nie na tym etapie nauki) bo zależy mi na zrozumieniu i nauczeniu standardu 1-wire. Poza tym, jak zrozumiem jeden przykład to i dalej będzie łatwiej. Poniżej wstawiam kod, prawie identyczny z artykułu, który jest w załączniku:<br />[syntax=c]//Pomiar temperatury za pomocą DS18b20 i prezentacja wyniku na LCD 2x16 HD44780<br /><br />//F_CPU 16000000ULkod dla zewnętrznego kwarcu<br />// biblioteki<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;HD44780.h&quot;<br />#include &quot;HD44780.c&quot;<br /><br />// definicje<br /><br />#define PIN_1WIRE4// definicja pinu magistrali 1-wire<br />#define PORT_1WIREPINC// definicja portu na który jest skierowana magistrala 1-wire<br /><br />#define OUT_1WIRE_LOWPORT_1WIRE &amp;= ~(1&lt;&lt;PIN_1WIRE);// ustawia na pinie PC4 portu C stan niski<br />#define OUT_1WIRE_HIGHPORT_1WIRE |= (1&lt;&lt;PIN_1WIRE);// ustawia na pinie PC4 portu C stan wysoki<br />#define DIR_1WIRE_INDDRC &amp;= ~(1&lt;&lt;PIN_1WIRE);// ustawia pin PC4 jako wejście<br />#define DIR_1WIRE_OUTDDRC != (1&lt;&lt;PIN_1WIRE);// ustawia pin PC4 jako wyjście<br /><br /><br />// funkcje do obsługi magistrali 1-wire<br />// ------------------------------------<br /><br />// funkcja resetuje magistralę i oczekuje na impuls Presence<br />unsigned char uc1Wire_ResetPulse(void);<br /><br />// funkcja wysyła na magistralę pojedynczy bit<br />void v1Wire_SendBit(char cBit);<br /><br />// funkcja odbiera pojedynczy bit z magistrali<br />unsigned char uc1Wire_ReadBit(void);<br /><br />// funkcja wysyła jeden bajt na magistralę<br />void v1Wire_SendByte(char ucByteValue);<br /><br />// funkcja odbiera bajt z magistrali<br />unsigned char uv1Wire_ReadByte(void);<br /><br />int main(void)<br />{<br />char wynik_dallas&#91;&#93;=&quot;          &quot;;// bufor tekstowy, wyczyszczenie bufora<br /><br />unsigned char ucReset;<br />char cTemperatureH = 0, cTemperatureL = 0;<br />float fTemperature = 0;<br /><br />LCD_Initalize();// inicjalizacja LCD<br />LCD_Clear();// czyści wyświetlacz<br />LCD_GoTo(0,0);// ustawienie kursora w pozycji (0,0)<br />LCD_WriteText(&quot;DS test: 1-wire&quot;);<br />_delay_ms(200);<br />LCD_Clear();<br /><br />while(1)<br />{<br />ucReset = uc1Wire_ResetPulse();// impuls resetu<br /><br />if (ucReset == 1)<br />{<br />v1Wire_SendByte(0xCC);// skip rom<br />v1Wire_SendByte(0x44);// convert t<br />_delay_ms(750);// odczekaj 750ms - czas konwersji<br />ucReset=uc1Wire_ResetPulse();// wysłanie impulsu resetu<br />v1Wire_SendByte(0xCC);// skip rom<br />v1Wire_SendByte(0xBE);// read scratchpad<br />cTemperatureL = uv1Wire_ReadByte();// odczytanie LSB<br />cTemperatureH = uv1Wire_ReadByte();// odczytanie MSB<br />ucReset = uc1Wire_ResetPulse();// zwolnienie magistrali<br /><br />fTemperature = (float)(cTemperatureL + (cTemperatureH&lt;&lt;8))/16;<br /><br />sprintf(wynik_dallas,&quot;T= %1.3f &#91;C&#93;&#91;d&#93;&quot;,fTemperature);// konwersja na łańcuch znakowy<br />LCD_GoTo(0,1);// ustawienie kursora w pozycji (3,0)<br />LCD_WriteText(wynik_dallas);// wyświetlenie wyniku z mcp9700<br />_delay_ms(200);// następny pomiar za 200ms<br />}<br />else<br />{<br />LCD_GoTo(0,1);// ustawienie kursora w pozycji (3,0)<br />LCD_WriteText(&quot;cisza&quot;);// wyświetlenie wyniku z mcp9700<br />}<br />}<br />}<br /><br />// funkcja resetuje magistralę i oczekuje na impuls Presence<br />unsigned char uc1Wire_ResetPulse(void)<br />{<br />unsigned char ucPresenceImpulse;<br /><br />OUT_1WIRE_LOW;// ustaw port w stan niski<br />DIR_1WIRE_OUT;// kierunek portu na wyjście<br />_delay_us(500);// odczekanie 500us<br />DIR_1WIRE_IN;// kierunek kierunku pinu na wejście<br />_delay_us(45);// oczekiwanie 45us<br /><br />if(bit_is_clear(PORT_1WIRE, PIN_1WIRE))// sprawdzamy stan linii<br />{<br />ucPresenceImpulse = 1;// 1 - odebrano stan wysoki<br />}<br />else ucPresenceImpulse = 0;// 0 - odebrano stan niski<br />_delay_us(470);<br /><br />return ucPresenceImpulse;// zwracamy wartość do funkcji<br />}<br /><br />// funkcja wysyła na magistralę pojedynczy bit<br />void v1Wire_SendBit(char cBit)<br />{<br />DIR_1WIRE_OUT;// ustawienie kierunku pinu na wyjście<br />_delay_us(5);<br /><br />if(cBit) DIR_1WIRE_IN;// zwolnienie magistrali, pin na wejście<br /><br />_delay_us(80);<br />DIR_1WIRE_IN;// przetrzymanie - wysłanie zera<br />}<br /><br />// funkcja odbiera pojedynczy bit z magistrali<br />unsigned char uc1Wire_ReadBit(void)<br />{<br />unsigned char ucBit;<br /><br />DIR_1WIRE_OUT;// kierunek pinu na wyjście<br />_delay_us(2);// odczekanie 2us<br />DIR_1WIRE_IN;// zwolnienie magistrali<br />_delay_us(15);// odczekanie 15us<br /><br />if(bit_is_set(PORT_1WIRE, PIN_1WIRE)) ucBit = 1;// odbiór wartości '1'<br />else ucBit = 0;// odbiór wartości '0'<br /><br />return(ucBit);<br />}<br /><br />// funkcja wysyła jeden bajt na magistralę<br />void v1Wire_SendByte(char ucByteValue)<br />{<br />unsigned char ucCounter;// zmienna licznikowa<br />unsigned char ucValueToSend;// wartość do wysłania<br /><br />for(ucCounter = 0; ucCounter &lt; 8; ucCounter++)// wysyłanie bitów pojedynczo<br />{<br />ucValueToSend = ucByteValue &gt;&gt; ucCounter;// przesunięie bitowe w prawo;<br />ucValueToSend &amp;= 0x01;// skopiowanie bitu<br />v1Wire_SendBit(ucValueToSend);// wysłanie bitu na magistralę<br />}<br />_delay_us(100);// odczekanie 100us<br />}<br /><br />// funkcja odbiera bajt z magistrali<br />unsigned char uv1Wire_ReadByte(void)<br />{<br />unsigned char ucCounter;// zmienna licznikowa<br />unsigned char ucReadByte = 0;// odczytana wartość<br /><br />for(ucCounter = 0; ucCounter &lt; 8; ucCounter++)// pętla wykonywana 8 razy<br />{// odczyt po jednym bicie<br />if(uc1Wire_ReadBit())<br />{<br />ucReadByte |= 0x01 &lt;&lt; ucCounter;<br />}<br />_delay_us(15);<br />}<br />return(ucReadByte);// zwrot wartości<br />}[/syntax]<br /><br />Mój problem polega na tym, że po skompilowaniu i wgraniu, na LCD wyświetla się ciągle &quot;cisza&quot;, czyli nawet impuls resetu nie został wysłany. Prawdopodobnie problem tkwi w opóźnieniach zrobionych przy pomocy funkcji 'delay' i byłoby lepiej do odmierzenia tak małych przedziałów czasowych jak mikrosekudny wykorzystać timer i przerwania. Do tej pory wykorzystywałem przerwania globalnie, tzn. uruchamiałem je przed pętlą główną i zgłaszałem przerwanie przy przepełnieniu licznika. Ale takie rozwiązanie &quot;liczy&quot; impulsy cały czas, a ja potrzebuję odmierzać czas w konkretnych miejscach w programie. W takim razie moje pytanie: czy prawidłowym jest uruchamianie przerwań lokalnie w miejscach, gdzie potrzebne jest mi odliczanie czasu? Np w funkcji uc1Wire_ReadBit() w miejscu, gdzie obecnie mam 'delay' ustawiam początkową wartość rejestru TCNT0 tak, aby zliczanie impulsów trwało tyle, ile potrzebuję (od rozpoczęcia do przerwania), zgłaszam przerwanie przy przepełnieniu, wykonuję obsługę przerwania (polegającą na odczekaniu wymaganego czasu), a potem wyłączam przerwania i przechodzę do dalszej części programu? Czy może problem tkwi gdzie indziej?<br />Dodam, że termometr jest sprawny (sprawdzałem za pomocą Arduino i działa), procesor to atmega8, taktowanie ustawione na zewnętrzny kwarc 16MHz. Żeby uzyskać zliczanie impulsów co 1us mógłbym np. zmienić kwarc na 8MHz i ustawić preskaler na 8. Bluebooka mam, ale odpowiedzi na moje pytanie nie znalazłem <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />Proszę uprzejmie o wskazówki.<br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11277">dawid75_75</a> — 12 paź 2015, o 09:19</p><hr />
]]></content>
</entry>
</feed>