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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-09-14T10:24:55+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1520&amp;mode</id>
<entry>
<author><name><![CDATA[paladyn]]></name></author>
<updated>2012-09-14T10:24:55+01:00</updated>
<published>2012-09-14T10:24:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15093#p15093</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15093#p15093"/>
<title type="html"><![CDATA[Re: Atmega8 + DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15093#p15093"><![CDATA[
<a href="http://odsiebie.pl/z9qkmxyvr79l/Sterownik_CWU.rar.html"  class="postlink">http://odsiebie.pl/z9qkmxyvr79l/Sterownik_CWU.rar.html</a> <strong>- Zdjecia</strong><br /><br />Testy przeszły prawie pozytywnie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Wczoraj kasowała mi się zawartość zmiennej w EEPROM odpowiadającą za przechowywanie temperatury załączenia pompy.  Poczytałem coś i znalazłem info nt uszkodzonej pierwszej komórki pamięci w EEPROM czy dokładnie tam gdzie znajdowała się moja zmienna. Dziś zmodyfikowałem lekko kod i póki co działa prawidłowo. <br /><br />Wcześniej zmienna kasowała mi się po około 20min. Przed chwilą sprawdzałem czekając 1,5 godziny i jest OK.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=468">paladyn</a> — 14 wrz 2012, o 10:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2012-09-13T20:13:35+01:00</updated>
<published>2012-09-13T20:13:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15078#p15078</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15078#p15078"/>
<title type="html"><![CDATA[Re: Atmega8 + DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15078#p15078"><![CDATA[
Można dać jeszcze zewnętrznego eproma, albo jak jest tam zegarek to wykorzystać jego pamięć...<br />Z tym czy braknie to się okaże. Może być tak, że częściej będziesz zapisywał niż Ci się na początku wydawało <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Jak poszły testy <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /> I pokaż jak wygląda zmontowana całość<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 13 wrz 2012, o 20:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[paladyn]]></name></author>
<updated>2012-09-13T12:59:35+01:00</updated>
<published>2012-09-13T12:59:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15029#p15029</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15029#p15029"/>
<title type="html"><![CDATA[Re: Atmega8 + DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15029#p15029"><![CDATA[
Ok już sobie poradziłem z problemem. Sterownik skończony i przeszedł pomyślnie testy na stole. Teraz czas na test przy piecu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Późnym wieczorem zdam relacje jak wyszedł test. oraz wrzucę kilka zdjęć jeśli będą chętni <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />EDIT:<br /><br />Wracając do żywotności EEPROMu to przeczytałem w dokumentacji, że wynosi 100 000 zapisów, natomiast u mnie będzie około 100 zapisów w ciągu roku. Chyba jak napiszę, że życia mi braknie na zatyranie tego EEPROMu to się nie obrazicie ? <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=468">paladyn</a> — 13 wrz 2012, o 12:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2012-09-13T10:05:56+01:00</updated>
<published>2012-09-13T10:05:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15015#p15015</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15015#p15015"/>
<title type="html"><![CDATA[Re: Atmega8 + DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15015#p15015"><![CDATA[
Pozostaje ci użycie pamięci eeprom + przestudiowanie tego <a href="http://forum.atnel.pl/topic1480.html#p13956"  class="postlink">wątku</a>.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br />Musisz pamiętać o tym że pamięć eeprom ma ograniczoną ilośc zapsów, więc rozsądnie byłoby wykryć zanik zasilania i zapis do eeprom lub zapisywanie zmiennej po jej ustawieniu. Na pewno nie wchodzi w rachubę inkrementacja lub dekrementacja zmiennej zdefinowanej w eeprom<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 13 wrz 2012, o 10:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[paladyn]]></name></author>
<updated>2012-09-13T09:35:07+01:00</updated>
<published>2012-09-13T09:35:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15014#p15014</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15014#p15014"/>
<title type="html"><![CDATA[Re: Atmega8 + DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=15014#p15014"><![CDATA[
Mam jeszcze jeden problem... Potrzebuje przyciskami zmieniać wartość zmiennych MIN_T oraz MAX_T czyli zmienne muszą posiadać jakąś wartość, i muszą być zapisane w pamięci uC tak, żeby wyłączenie sterownika nie skutkowało skasowaniem poprzednio ustawionych wartości.  W jaki sposób można to zrobić? <br /><br />Z tego co wiem jeśli ustawie w programie ich wartość początkową na 0 to po ponownych uruchomieniu sterownika wartości ustawione przeze mnie zostaną zastąpione 0, jeśli nie ustawie wartości początkowej to nie będę mógł zwiększać jak i zmniejszać wartości tych zmiennych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=468">paladyn</a> — 13 wrz 2012, o 09:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[paladyn]]></name></author>
<updated>2012-09-12T19:32:04+01:00</updated>
<published>2012-09-12T19:32:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14974#p14974</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14974#p14974"/>
<title type="html"><![CDATA[Re: Atmega8 + DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14974#p14974"><![CDATA[
Już chyba wiem o co Ci chodzi z tym licznikiem. Za pierwszym razem Timer zaczyna liczyć od 216 do 255, ale po przepełnieniu zaczyna od 0 zamiast 216. Stąd w przerwaniu ustawia się ponowie licznik na żądaną wartość.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=468">paladyn</a> — 12 wrz 2012, o 19:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[paladyn]]></name></author>
<updated>2012-09-12T09:18:01+01:00</updated>
<published>2012-09-12T09:18:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14916#p14916</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14916#p14916"/>
<title type="html"><![CDATA[Re: Atmega8 + DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14916#p14916"><![CDATA[
<strong>Antystatyczny</strong> Bardzo dziękuje za słowa otuchy. Wczoraj bardzo długo zeszło mi na uczelni i brakło już czasu na pracę przy sterowniku, ale egzamin zaliczony <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Także awansowałem na kolejny rok studiów <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Przed chwilą przylutowałem poprawnie nowy czujnik i bardzo ładnie pokazuje temperaturę. Teraz zabieram się za przerobienie biblioteki do wyświetlacza segmentowego. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br />Edit:<br /><br />Panowie rzućcie okiem na moje wypociny? Wygląda to trochę lepiej? Dodam, że nic nie mruga i pracuje bardzo dobrze.<br /><br />Oto kod:<br /><br />[syntax=c]/*<br /> * 7Led.c<br /> *<br /> *  Created on: 2012-08-31<br /> *      Author: Tomek<br /> */<br /><br /><br /><br />#include &lt;avr/io.h&gt;// dołączenie głównego systemowego  pliku nagłówkowego<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;led7.h&quot;<br /><br /><br />volatile uint8_t led7Num;<br /><br /><br />void led7_init(){<br />//  Ustawienia DDR<br />DDRB |=SEG_A;<br />DDRD |=SEG_B |SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H;<br /><br />//Konfiguracja Timera dla 100Hz<br /><br />TCCR0 |= (1&lt;&lt;CS01); /* preskaler 256 */<br />TCNT0 = 216;<br />TIMSK |= (1&lt;&lt;TOIE0);            /* zezwolenie na przerwanie */<br /><br />}<br /><br /><br />uint8_t led7_setDigit(uint8_t segNum, uint8_t digit){<br />SEG_DIG_CLEAR;<br />switch(segNum){<br />case 0:<br />SEG_1_OFF;<br />SEG_0_ON;<br />break;<br />case 1:<br />SEG_0_OFF;<br />SEG_1_ON;<br />break;<br />default:<br />return 1;<br />}<br /><br />switch(digit){<br /><br /><br /><br />case 0:<br />SEG_DIG_0;<br />break;<br />case 1:<br />SEG_DIG_1;<br />break;<br />case 2:<br />SEG_DIG_2;<br />break;<br />case 3:<br />SEG_DIG_3;<br />break;<br />case 4:<br />SEG_DIG_4;<br />break;<br />case 5:<br />SEG_DIG_5;<br />break;<br />case 6:<br />SEG_DIG_6;<br />break;<br />case 7:<br />SEG_DIG_7;<br />break;<br />case 8:<br />SEG_DIG_8;<br />break;<br />case 9:<br />SEG_DIG_9;<br />break;<br />default:<br />return 1;<br /><br />}<br /><br />return 0;<br />}<br />uint8_t led7_setNumber(uint8_t num){<br />if(num &gt; -1 &amp;&amp; num &lt;100){<br />led7Num=num;<br />}<br />}<br /><br />ISR (TIMER0_OVF_vect)  // timer0 overflow interrupt<br />{<br />static uint8_t licznik=1;<br />if(licznik==1){<br />if(led7Num/10!=0)led7_setDigit(0,led7Num/10);<br />}<br />if(licznik==2){<br />led7_setDigit(1,led7Num%10);<br />}<br />licznik &lt;&lt;= 1;<br />if(licznik&gt;2) licznik = 1;<br />}<br /><br /><br /><br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=468">paladyn</a> — 12 wrz 2012, o 09:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-10T21:40:18+01:00</updated>
<published>2012-09-10T21:40:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14834#p14834</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14834#p14834"/>
<title type="html"><![CDATA[Re: Atmega8 + DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14834#p14834"><![CDATA[
<div class="quotetitle">paladyn napisał(a):</div><div class="quotecontent"><br />Co do przerwań to masz racje. Lepiej zrobić multipleksowanie niż zaśmiecać sobie kod i przeciążać procesor. Już z obsługą tego termometru raz na kilka sekund wyświetlacz lekko przygasa, więc coś na rzeczy musi być.<br /></div><br /><br />Ale masz przecież w książce i na DVD przykład z multipleksowaniem w przerwaniu, więc dlaczego od tego nie zaczniesz tylko tworzysz takiego potworka bez przerwania a potem się dziwisz, ze coś nie działa ? Tzn nawet doceniałbym bardziej gdybyś robił to w 100% inną metodą niż w książce (ale na przerwaniu jakimś oczywiście) bo widać byłoby że starasz się sam rozwiązać takie problemy. Tymczasem trzymając się tego pseudomultipleksowania w pętli głównej sam sobie totalnie komplikujesz sprawę - dlatego czekam aż sam dojdziesz że jednak przerwanie - wtedy łatwiej będzie ci pomóc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 10 wrz 2012, o 21:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[paladyn]]></name></author>
<updated>2012-09-10T21:33:53+01:00</updated>
<published>2012-09-10T21:28:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14829#p14829</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14829#p14829"/>
<title type="html"><![CDATA[Re: Atmega8 + DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14829#p14829"><![CDATA[
Chyba odesłałem swojego ds18b20 w zaświaty. Zasugerowałem się widokiem <strong>button</strong> co skutkowało zamianą nóżek GND z VCC. <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" />  Jak to mawiają, nauka kosztuje... Jutro przelutuje termometr, i jak wszystko pójdzie dobrze coś podreperuje tą bibliotekę do wyświetlacza segmentowego. <br /><br />Panowie a co do kodu z pierwszego postu jest OK? Przerabiałem go według swojej wiedzy i być może gdzieś zrobiłem błąd.  <br /><br />Dziś już muszę iść spać, bo jutro czeka mnie Kampania Wrześniowa z Matematyki <img src="https://forum.atnel.pl/images/smilies/icon_neutral.gif" alt=":|" title="Średnio zadowolony" /> Trzymajcie kciuki <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" /><br /><br />Edit:<br /><strong>Antystatyczny</strong> Każda wypowiedz coś wnosi do rozmowy i pomaga także dziękuje, że moje wątki nie lądują w koszu jak to bywa często na elektrodzie. Dodam jeszcze, że teorii programowania trochę się nasłuchałem. Najpierw 3 lata technikum potem rok na studiach. Coś napisać potrafię, ale czasami brakuje mi pomysłów jak rozwiązać większy problem. <br />Co do przerwań to masz racje. Lepiej zrobić multipleksowanie niż zaśmiecać sobie kod i przeciążać procesor. Już z obsługą tego termometru raz na kilka sekund wyświetlacz lekko przygasa, więc coś na rzeczy musi być.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=468">paladyn</a> — 10 wrz 2012, o 21:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-10T21:09:46+01:00</updated>
<published>2012-09-10T21:09:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14825#p14825</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14825#p14825"/>
<title type="html"><![CDATA[Re: Atmega8 + DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14825#p14825"><![CDATA[
Odwrotne podłączenie DS18B20 pozwoli odejść mu do krainy wiecznych łowów, i wcale nie będzie mu wtedy zimno, wręcz odwrotnie - dostanie sporej gorączki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Mam tu na myśli 3-przewodowe połączenia. A wiem co mówię bo kiedyś jednego odesłałem do Winetou <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=54">mirekk36</a> — 10 wrz 2012, o 21:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[paladyn]]></name></author>
<updated>2012-09-10T20:44:09+01:00</updated>
<published>2012-09-10T20:44:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14820#p14820</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14820#p14820"/>
<title type="html"><![CDATA[Re: Atmega8 + DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14820#p14820"><![CDATA[
Podam Ci cały plik led7.c<br />[syntax=c]/*<br /> * 7Led.c<br /> *<br /> *  Created on: 2012-08-31<br /> *      Author: Tomek<br /> */<br /><br /><br /><br />#include &lt;avr/io.h&gt;// dołączenie głównego systemowego  pliku nagłówkowego<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;led7.h&quot;<br /><br /><br />volatile uint8_t led7Num;<br />volatile uint8_t digits[2] = {0,0};<br />volatile uint8_t digitsDot[2] = {0,0};<br /><br />void led7_init(){<br />//  Ustawienia DDR<br />DDRB |=SEG_A;<br />DDRD |=SEG_B |SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H;<br /><br />}<br /><br />uint8_t led7_setDigit(uint8_t segNum, uint8_t digit){<br />SEG_DIG_CLEAR;<br />switch(segNum){<br />case 0:<br />SEG_1_OFF;<br />SEG_0_ON;<br />break;<br />case 1:<br />SEG_0_OFF;<br />SEG_1_ON;<br />break;<br />default:<br />return 1;<br />}<br /><br />switch(digit){<br /><br /><br /><br />case 0:<br />SEG_DIG_0;<br />digits[segNum] = digit;<br />break;<br />case 1:<br />SEG_DIG_1;<br />digits[segNum] = digit;<br />break;<br />case 2:<br />SEG_DIG_2;<br />digits[segNum] = digit;<br />break;<br />case 3:<br />SEG_DIG_3;<br />digits[segNum] = digit;<br />break;<br />case 4:<br />SEG_DIG_4;<br />digits[segNum] = digit;<br />break;<br />case 5:<br />SEG_DIG_5;<br />digits[segNum] = digit;<br />break;<br />case 6:<br />SEG_DIG_6;<br />digits[segNum] = digit;<br />break;<br />case 7:<br />SEG_DIG_7;<br />digits[segNum] = digit;<br />break;<br />case 8:<br />SEG_DIG_8;<br />digits[segNum] = digit;<br />break;<br />case 9:<br />SEG_DIG_9;<br />digits[segNum] = digit;<br />break;<br />default:<br />return 1;<br /><br />}<br />if(digitsDot[segNum])<br />SEG_DIG_DOT;<br />return 0;<br />}<br />uint8_t led7_setNumber(uint8_t num){<br />if(num &gt; -1 &amp;&amp; num &lt;100){<br />digits[0] = num/10;<br />digits[1] = num%10;<br />led7_refresh();<br />}<br /><br /><br />}<br />void led7_setDot(uint8_t segNum, uint8_t on_off){<br />digitsDot[segNum]=on_off;<br />}<br /><br />void led7_refresh(){<br />led7_setDigit(0, digits[0]);<br />led7_setDigit(1, digits[1]);<br />led7Num = 0;<br /><br /><br />}<br /><br /><br />[/syntax]<br /><br />Co prawda jest to jeszcze trochę prowizorka, bo np brak przerwań, ale działa.<br /><br />Edit:<br /><br />Funkcja sama w sobie działa prawidłowo, czy dasz 30 czy 58 to wyświetla prawidłowo. Natomiast próba wyświetlenia ilości znalezionych czujników kończy się pokazaniem 0. Także nie wiem czy mam problem z obsługą przerwań jak i samego timera czy to może coś ze sprzętem.<br /><br />Edit:2<br /><br />Odwrotne podłączenie czujnika skutkuje jego uszkodzeniem?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=468">paladyn</a> — 10 wrz 2012, o 20:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[paladyn]]></name></author>
<updated>2012-09-10T18:19:16+01:00</updated>
<published>2012-09-10T18:19:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14793#p14793</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14793#p14793"/>
<title type="html"><![CDATA[Atmega8 + DS18B20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1520&amp;p=14793#p14793"><![CDATA[
Żeby nie wałkować wszystkich problemów w jednym wątku założyłem drugi. <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> Postanowiłem, że powalczę z uruchomieniem w/w termometru jednak bez skutku. Używam zmodyfikowanego kodu z książki  <strong>Mikrokontrolery AVR Język C Podstawy programowania </strong> a oto on:<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2012-08-30<br /> *      Author: Tomek<br /> */<br /><br /><br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/io.h&gt;// dołączenie głównego systemowego  pliku nagłówkowego<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;led7.h&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br /><br />volatile uint8_t temp;<br />uint8_t czujniki_cnt;/* ilość czujników na magistrali */<br />volatile uint8_t s1_flag;/* flaga tyknięcia timera co 1 sekundę */<br />volatile uint8_t sekundy;/* licznik sekund 0-59 */<br /><br />uint8_t subzero, cel, cel_fract_bits;<br /><br />int main(void)<br />{<br /><br /><br />/* ustawienie TIMER2 dla F_CPU=1,000000 MHz */<br />   TCCR2 |= (1&lt;&lt;WGM21);            /* tryb CTC */<br />   TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21);      /* preskaler = 256 */<br />   OCR2 = 39;                     /* dodatkowy podział przez 39 (rej. przepełnienia) */<br />   TIMSK |= (1&lt;&lt;OCIE2);            /* zezwolenie na przerwanie CompareMatch */<br />   /* przerwanie wykonywane z częstotliwością ok 10ms (100 razy na sekundę) */<br />   /* do naszych celów nie musi być to bardzo dokładne 10ms */<br />/*<br />//*************************************************<br />//*Ustawienia timera 16 bitowego<br />TCCR1A |= (1&lt;&lt;WGM12); // tryb CTC<br />TCCR1A |= (1&lt;&lt;CS11); //preskaler 8<br />OCR1A = 1250;<br />TIMSK |= (1&lt;&lt;OCIE1A);<br />//*************************************************<br />*/<br />czujniki_cnt = search_sensors();<br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br />_delay_ms(750);<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &amp;subzero, &amp;cel, &amp;cel_fract_bits) );<br /><br /><br /><br /><br />led7_init();<br />sei();<br />while(1){<br /><br />if(s1_flag) {<br />/* sprawdzanie flagi tyknięć timera programowego co 1 sekundę */<br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 0 sprawdzaj ilość dostępnych czujników */<br />if( 0 == (sekundy%3) ) czujniki_cnt = search_sensors();<br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 1 wysyłaj rozkaz pomiaru do czujników */<br />if( 1 == (sekundy%3) ) DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />/* co trzy sekundy gdy reszta z dzielenia modulo 3 == 2 czyli jedną sekundę po rozkazie konwersji<br /> *  dokonuj odczytu i wyświetlania temperatur z 2 czujników jeśli są podłączone, jeśli nie<br /> *  to pokaż komunikat o błędzie<br /> */<br />if( 2 == (sekundy%3) ) {<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &amp;subzero, &amp;cel, &amp;cel_fract_bits) );<br /><br /><br />}<br /><br />/* zerujemy flagę aby tylko jeden raz w ciągu sekundy wykonać operacje */<br />s1_flag=0;<br />} /* koniec sprawdzania flagi */<br /><br /><br />led7_setNumber(cel);<br />} /* koniec pętli nieskończonej */<br /><br /><br /><br /><br />}<br /><br />/* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br />/* pełni funkcję timera programowego wyznaczającego podstawę czasu = 1s */<br />ISR(TIMER2_COMP_vect)<br />{<br />static uint8_t cnt=0;/* statyczna zmienna cnt do odliczania setnych ms */<br /><br />if(++cnt&gt;99) {/* gdy licznik ms &gt; 99 (minęła 1 sekunda) */<br />s1_flag=1;/* ustaw flagę tyknięcia sekundy */<br />sekundy++;/* zwiększ licznik sekund */<br />if(sekundy&gt;59) sekundy=0; /* jeśli ilość sekund &gt; 59 - wyzeruj */<br />cnt=0;/* wyzeru licznik setnych ms */<br />}<br />}<br />[/syntax]<br /><br />Mimo wszystko temperaturę jaką otrzymuje to 0 *C.  Nie mam pojęcia czy to problem sprzętowy czy coś w kodzie dlatego prosił bym o pomoc mądrzejszych.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  <br /><br />W pliku <strong>ds18x28.h</strong> mam ustawione <strong>MAXSENSORS 4</strong>, natomiast w <strong>onewire.h</strong> mam tak:<br /><br /><strong><div class="codetitle"><b>Code:</b></div><div class="codecontent"> /* Wybór PINu oraz PORTu na magistralę 1Wire */<br />#define OW_PIN  PC0<br />#define OW_IN   PINC<br />#define OW_OUT  PORTC<br />#define OW_DDR  DDRC</div></strong><br /><br />Czujnik znajduje się na pinie PC0. Procesor taktowany 1 MHz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=468">paladyn</a> — 10 wrz 2012, o 18:19</p><hr />
]]></content>
</entry>
</feed>