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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-01-28T19:24:18+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14266&amp;mode</id>
<entry>
<author><name><![CDATA[piotr8605]]></name></author>
<updated>2016-01-28T19:24:18+01:00</updated>
<published>2016-01-28T19:24:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151986#p151986</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151986#p151986"/>
<title type="html"><![CDATA[Re: 1Wire - brak wyświetlenia temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151986#p151986"><![CDATA[
Zmieniłem wartość rejestru OCR i zmieniłem ustawienia timera na Timer2.<br />Teraz działa prawidłowo.<br /><br />Rozwiązanie mojego problemu znalazłem tutaj:<br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic4466.html" >topic4466.html</a><!-- l --><br /><br />Moje działające ustawienia:<br />[syntax=c]//Ustawienie Timer2<br /><br />        TCCR2 |= (1&lt;&lt;WGM21);            /* tryb CTC */<br />        TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21) ;  /* preskaler = 1024 */<br />        OCR2= 78;                       /* 1024 to preskaler a 100 to częstotliwośc przerwań 100Hz (okres 10ms) */<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 */[/syntax]<br /><br /> [syntax=c]/* ================= 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 />        }[/syntax]<br /><br /><br />Dziękuję wszystkim za pomoc <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=535">piotr8605</a> — 28 sty 2016, o 19:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-01-23T13:03:03+01:00</updated>
<published>2016-01-23T13:03:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151491#p151491</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151491#p151491"/>
<title type="html"><![CDATA[Re: 1Wire - brak wyświetlenia temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151491#p151491"><![CDATA[
<div class="quotetitle">piotr8605 napisał(a):</div><div class="quotecontent"><br />wcześniej był Atmega 88, a teraz jest Atmega 8<br /></div><br />Ja powiem tak - uwierz mi, że to nie tylko twój problem - gdy ja np długo robię jakiś projekt na ATmega32 i nagle przesiadam się na np ATmega328 to mam podobnie, że eeeeh nagle mi coś nie działa - no i zaczyna się główkowanie<br /><br />ale ja ROBIĘ DOKŁADNIE to co opisałem wyżej - czyli zaczynam dzielić problem na mniejsze kawałki i jak już dojdę że jakiś timer mi nie działa a często tak się zdarza to co? ... no to zaczynam próbę wyizolowania problemu - albo komentuję wszystko inne albo wydzielam kod z timerem do osobnego projektu i testuję z jedną diodą LED - nie ma że boli - MUSI ruszyć - i wtedy najczęściej i jak zwykle dochodzę do sedna problemu - bo się okazało np że zapomniałem że np w procki m328 jest inna nazwa rejestru czy bitu albo bit w innym rejestrze - czyli to - czego kompilator nie pokaże .... a człowiek się zagapił<br /><br />więc to nie jest tylko spowodowane przerwą w pracy czy że ktoś jest początkujący<br /><br />nauka programowania to również albo przede wszystkim nauka poszukiwania problemu, testowania kodu i debugowania<br /><br />tylko że wielu osobom wydaje się, że to będzie długo trwało ten podział na mniejsze kawałki, sięganie po tą diodę LED (po ten sposób) ... no i tak walczą i tracą czas - aż później się okazuje że i tak trzeba po to sięgnąć i wtedy EUREKA - błąd znaleziony w trymiga<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 23 sty 2016, o 13:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[piotr8605]]></name></author>
<updated>2016-01-23T12:27:17+01:00</updated>
<published>2016-01-23T12:27:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151486#p151486</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151486#p151486"/>
<title type="html"><![CDATA[Re: 1Wire - brak wyświetlenia temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151486#p151486"><![CDATA[
Panie Mirku,<br />Ja już raz uruchamiałem program z 3 czujnikami temperatury (dodatkowo był wykorzystany przetwornik ADC do pomiaru napięcia), jedyna różnica to teraz inny procesor (wcześniej był Atmega 88, a teraz jest Atmega 8) i brak ADC.<br />Obecnie usunąłem kod programu dotyczący przetwornika ADC, ponieważ teraz potrzebuję tylko pomiar temperatury.<br />Niestety miałem długą przerwę w programowaniu i stąd problemy z timerami i przerwaniami.<br />A Pan wspominał w niejednym poradniku, że datasheet jest bardzo ważny i dlatego dzięki pomocy kolegów z forum chciałem zmienić parametry timera analogicznie na procesor Atmega 8.<br />Dziękuję za poradnik, z pewnością oglądnę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=535">piotr8605</a> — 23 sty 2016, o 12:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-01-23T10:33:47+01:00</updated>
<published>2016-01-23T10:33:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151480#p151480</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151480#p151480"/>
<title type="html"><![CDATA[Re: 1Wire - brak wyświetlenia temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151480#p151480"><![CDATA[
<div class="quotetitle">piotr8605 napisał(a):</div><div class="quotecontent"><br />Jednak wyświetlacz nadal nie pokazuje temperatury.<br /></div><br />Panowie - no panowie .... proszę .... powtarzam, wyjaśniam .... podpowiadam, powtarzam .... a ty wciąż to samo<br /><br />Jeśli mnie wyświetlacz nie pokazywałby temperatury - to bym przede wszystkim NIGDY nie zadał komuś pytania<br /><br />&quot;dlaczego mi wyświetlacz nie pokazuje temperatury?&quot;<br /><br />No panie kochany to tak jakbyś na forum serwisowo motoryzacyjnym zadał pytanie<br /><br />&quot;dlaczego mi samochód nie jedzie ?&quot;<br /><br />No proszę, że spróbuj zwrócić uwagę, że ten wyświetlacz czy samochód to jest już dużo bardziej skomplikowany mechanizm niż np gdyby zadać takie pytania:<br /><br />&quot;dlaczego mi nie świeci dioda LED?&quot;<br /><br />albo<br /><br />&quot;dlaczego mi młotek nie wbija gwoździa?&quot;<br /><br /><br />w przypadku tych ostatnich pytań bez zastanowienia można próbować podpowiedzieć, że np:<br /><br />&quot;dioda ci nie świeci bo podłączyłeś ją odwrotnie&quot;<br />&quot;dioda ci nie świeci bo nie podłączyłeś zasilania&quot;<br />&quot;dioda ci nie świeci bo jest uszkodzona&quot;<br /><br />&quot;młotek ci nie wbija gwoździa bo nie trafiasz&quot;<br />&quot;młotek ci nie wbija gwoździa bo jest z gumy&quot;<br />&quot;młotek ci nie wbija gwoździa bo bo wbijasz go w beton&quot;<br />&quot;młotek ci nie wbija gwoździa bo gwóźdź jest gumowy&quot;<br /><br />żartuję trochę no ale pokazuję pewną rzeczywistość - gdy mówimy o prostym mechanizmie to może być zaledwie kilka niedopatrzeń i kilka podpowiedzi - nie ważne, że oczywistych - każdy kiedyś zaczyna i może na jedną z nich nie zwrócić uwagi.<br /><br />No ale jak odpowiedzieć na pytanie<br /><br />&quot;dlaczego mi samochód nie jedzie?&quot;<br /><br />Pomyślałeś kiedyś o tym .... przecież tu mógłbyś napisać kilka tysięcy odpowiedzi i nadal to nie byłyby wszystkie albo chociażby połowa - bo to może zależeć od setek czynników .... No więc co?<br /><br />Ano trzeba w końcu kiedyś zrozumieć, że aby uzyskać najszybciej i najlepszą nie tylko odpowiedź ale i konkretną pomoc na swoje pytanie - to trzeba wziąć się w garść i:<br /><br />1. Poświęcić trochę swojego czasu na zbadanie wszystkimi środkami i wiedzą jaka ci jest dostępna aby zejść o kilka pięter niżej jeśli chodzi o problem - rozpoznać tyle ile możesz, zrobić własne testy chociażby mega podstawowe np:<br /><br />- zbadać czy masz paliwo w baku<br />- zbadać czy ktoś ci w nocy kół nie odkręcił <br />- zbadać czy akumulator w ogóle działa a przez to rozrusznik<br />- sprawdzić czy daje się przełożyć bieg w skrzyni biegów<br /><br />2. Bodajże najważniejsze - szanując i swój czas ale i czas tych którym zadajesz pytanie - poświęcić trochę czasu na dobre opisanie problemu i tego co zrobiłeś aby zbadać obecny stan rzeczy i być może zadać dużo bardziej precyzyjne pytanie nawet jeśli będzie trzeba napisać o wiele więcej zdań, czyli zadać pytanie np tak:<br /><br />&quot;dlaczego mi samochód nie jedzie, pomimo, że: mam paliwo, rozrusznik ruszył i słychać że silnik pracuje, wciskam sprzęgło i ustawiam pierwszy bieg, dodaję lekko gazu a samochód nie rusza do przodu. Nie znam się na autach ale czy może być tak - że np uszkodzona jest skrzynia biegów albo sprzęgło albo jeszcze coś innego o czym już nie mam pojęcia ?&quot;<br /><br /><br />ROZUMIESZ .... więc teraz odnośnie twojego pytania i problemu - przede WSZYSTKIM obejrzyj sobie ten poradnik:<br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2014/04/puapki-programowe-debuger-na-jednej.html" >http://mirekk36.blogspot.com/2014/04/pu ... ednej.html</a><!-- m --><br /><br />i za pomocą jednej diody LED cuda zdziałasz i sam sobie być może nawet pomożesz ale .... !!!<br /><br />ale przede wszystkim panie kochany - no bez przesady no wykonaj tych kilka czynności samemu aby sprawdzić podstawy - bo wydaje się, że uruchamiasz tak &quot;na szybko&quot; jakiś większy projekt ale bez poczytania i co gorsze zrozumienia jak działają jego poszczególne składniki  .....<br /><br />więc żeby ktokolwiek mógł ci pomóc rozwiązać problem to pokaż że sam potrafisz najpierw sprawdzić czy masz paliwo w baku<br /><br />w tym celu załóż oddzielny projekt - w Eclipse to 1 sekunda .... i postaraj się odpalić przerwanie timera! Jak wiesz trzeba ustawić jego konfigurację pracy, włączyć przerwanie .... no ale jak sprawdzić czy ono działa<br /><br />i tu wracamy do jednej cudownej diody LED jako debugera - co za problem podłączyć sobie ją do jakiegoś pinu żeby migała w przerwaniu - oczywiście ustawić je tak aby częstotliwość była na tyle niska abyśmy widzieli okiem to miganie<br /><br />a nie tak jak ty - że piszesz:<br /><br />- zezwolenie na przerwanie mam ustawione zgodnie z notą<br />- ustawiłem tryb CTC zgodnie z notą<br /><br />i tu ręce opadają bo dalej zadajesz znowu pytanie<br /><br />&quot;dlaczego samochód mi nie jedzie?&quot; czyli &quot;dlaczego mi wyświetlacz nie pokazuje temperatury?&quot;<br /><br />Rozumiesz ? nie piszę tego - żeby się z ciebie śmiać, żebym był zdenerwowany - aż tyle się rozpisałem - żeby pokazać ci DROGĘ - jaką należy iść w rozwiązywaniu problemów .... Jak to zastosujesz to sam zobaczysz że ci się to spodoba - bo sam rozwiążesz kupę z nich we własnym zakresie. I będzie dużo większa radocha ...<br /><br />Jak widzisz aby wyświetlał wyświetlacz temperaturę to tak jak w tym samochodzie musisz sprawdzić nie tylko czy masz paliwo w baku ale jeszcze kupę innych rzeczy - a masz taką możliwość we własnym zakresie i pokazałem jak (przypominam obejrzyj ten poradnik do którego link podałem)<br /><br />a na końcu - zapewniam cię - albo sam rozwiążesz problem albo zadasz już całkiem inne i konkretne pytanie<br /><br />wbrew pozorom uczenie się zadawania pytań to też niezmiernie ważna rzecz - i jak widać też w tym staram się pomagać<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 23 sty 2016, o 10:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[piotr8605]]></name></author>
<updated>2016-01-23T08:56:30+01:00</updated>
<published>2016-01-23T08:56:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151473#p151473</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151473#p151473"/>
<title type="html"><![CDATA[Re: 1Wire - brak wyświetlenia temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151473#p151473"><![CDATA[
Ustawiłem tryb CTC w liczniku Timer1:<br />[syntax=c]TCCR1B |= (1&lt;&lt;WGM12); /* tryb CTC */[/syntax]<br />zgodnie ze str. 135 w datasheet:<br /><a href="https://obrazkiforum.atnel.pl/535/1af3278546849fe12544cd0709902e9d.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/535/1af3278546849fe12544cd0709902e9d.jpg" alt="Obrazek" /></a><br /><br />Zezwolenie na przerwanie CompareMatch też jest ustawione:<br />[syntax=c]TIMSK |=(1&lt;&lt;OCIE1A);                     /* zezwolenie na przerwanie CompareMatch */[/syntax]<br />zgodnie ze str. 145 w datasheet:<br /><a href="https://obrazkiforum.atnel.pl/535/967e9282fb49b8f9d60c9fde40223eea.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/535/967e9282fb49b8f9d60c9fde40223eea.jpg" alt="Obrazek" /></a><br /><br />Jednak wyświetlacz nadal nie pokazuje temperatury.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=535">piotr8605</a> — 23 sty 2016, o 08:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-01-23T00:52:29+01:00</updated>
<published>2016-01-23T00:52:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151464#p151464</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151464#p151464"/>
<title type="html"><![CDATA[Re: 1Wire - brak wyświetlenia temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151464#p151464"><![CDATA[
<div class="quotetitle">michalf napisał(a):</div><div class="quotecontent"><br />Zamiast pisać cały kod i próbować go rozkminiać, podziel go sobie na części. Zrób sobie osobny projekt, gdzie spokojnie, od podstaw ogarniesz sobie liczniki. Dopiero wtedy, małymi krokami, rozbudowuj je o kolejne części projektu. W moim wypadku to zawsze działa.<br /></div><br />Bardzo słusznie kolega prawi <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> — 23 sty 2016, o 00:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michalf]]></name></author>
<updated>2016-01-23T00:01:56+01:00</updated>
<published>2016-01-23T00:01:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151462#p151462</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151462#p151462"/>
<title type="html"><![CDATA[Re: 1Wire - brak wyświetlenia temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151462#p151462"><![CDATA[
'TCCR1A |= (1&lt;&lt;WGM12); /* tryb CTC */'<br /><br />Pierwsza linijka kodu i już błąd - czytaj opis dokładnie, nie na pałę. Rozwiązanie akurat tego problemu masz na stronie 135. <br /><br />Poza tym mam pewną radę jako od osoby, która od tygodnia uczy się avrów z internetu i książki Mirka. Zamiast pisać cały kod i próbować go rozkminiać, podziel go sobie na części. Zrób sobie osobny projekt, gdzie spokojnie, od podstaw ogarniesz sobie liczniki. Dopiero wtedy, małymi krokami, rozbudowuj je o kolejne części projektu. W moim wypadku to zawsze działa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12706">michalf</a> — 23 sty 2016, o 00:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[piotr8605]]></name></author>
<updated>2016-01-22T22:54:33+01:00</updated>
<published>2016-01-22T22:54:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151461#p151461</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151461#p151461"/>
<title type="html"><![CDATA[Re: 1Wire - brak wyświetlenia temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151461#p151461"><![CDATA[
Zmieniłem ustawienia TIMER1 zgodnie z datasheet na:<br />[syntax=c]TCCR1A |= (1&lt;&lt;WGM12); /* tryb CTC */<br />TCCR1B |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10);  /* preskaler = 1024 */<br /><br />OCR1A = 108; //1024 to preskaler a 100 to częstotliwośc przerwań 100Hz (okres 10ms)                                                  /* dodatkowy podział przez 108 (rej. przepełnienia) */<br />TIMSK |=(1&lt;&lt;OCIE1A);                     /* zezwolenie na przerwanie CompareMatch */[/syntax]<br /><br />[syntax=c]/* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br />        /* pełni funkcję timera programowego wyznaczającego podstawę czasu = 1s */<br />       ISR(TIMER1_COMPA_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 />        }[/syntax]<br />Jednak nadal brak wyświetlonej temperatury..<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=535">piotr8605</a> — 22 sty 2016, o 22:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[piotr8605]]></name></author>
<updated>2016-01-22T17:24:50+01:00</updated>
<published>2016-01-22T17:24:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151430#p151430</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151430#p151430"/>
<title type="html"><![CDATA[Re: 1Wire - brak wyświetlenia temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151430#p151430"><![CDATA[
Próbuję ustawić Timer1, jednak dalej robię coś niezgodnie z datasheetem Atmegi 8...<br />Chcę ustawić tryb licznika:<br /><a href="https://obrazkiforum.atnel.pl/535/77789ae57b21186fb88603aeea729053.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/535/77789ae57b21186fb88603aeea729053.jpg" alt="Obrazek" /></a><br /><br />Kod programu wygląda następująco:<br />[syntax=c]/*<br />         * main.c<br />         *<br />         *  Created on: 2010-09-13<br />         *       Autor: Mirosław Kardaś<br />         */<br />        #include &lt;avr/io.h&gt;<br />        #include &lt;avr/interrupt.h&gt;<br />        #include &lt;avr/pgmspace.h&gt;<br />        #include &lt;util/delay.h&gt;<br />        #include &quot;LCD/lcd44780.h&quot;<br />        #include &quot;1Wire/ds18x20.h&quot;<br />        #include &lt;stdlib.h&gt;<br /><br /><br />        void display_temp1(uint8_t x);<br />        void display_temp2(uint8_t x);<br />        void display_temp3(uint8_t x);<br /><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 /><br /><br /><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);    // załączamy podświetlenie LCD - stan wysoki<br /><br />                // ustawienie TIMER0 dla F_CPU=11,0592MHz<br />                TCCR1A |= (1&lt;&lt;WGM12);<br />              //  TCCR1A |= (1&lt;&lt;WGM13);  /* tryb CTC */<br />            //    TCCR1A |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);          /* preskaler = 1024 */<br />              OCR1A = 108; //1024 to preskaler a 100 to częstotliwośc przerwań 100Hz (okres 10ms)                                                  /* dodatkowy podział przez 108 (rej. przepełnienia) */<br />               TCCR1A |= (1&lt;&lt;COM1A0);                          /* zezwolenie na przerwanie CompareMatch */<br />               TCCR1A |= (1&lt;&lt;COM1B0);<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 />                lcd_init();     /* inicjalizacja LCD */<br /><br />                /* sprawdzamy ile czujników DS18xxx widocznych jest na magistrali */<br />                czujniki_cnt = search_sensors();<br /><br /><br />                /* wysyłamy rozkaz wykonania pomiaru temperatury<br />                 * do wszystkich czujników na magistrali 1Wire<br />                 * zakładając, że zasilane są w trybie NORMAL,<br />                 * gdyby był to tryb Parasite, należałoby użyć<br />                 * jako pierwszego prarametru DS18X20_POWER_PARASITE */<br />                DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />                /* czekamy 750ms na dokonanie konwersji przez podłączone czujniki */<br />                _delay_ms(750);<br /><br /><br /><br />                         /* dokonujemy odczytu temperatury z pierwszego czujnika o ile został wykryty */<br />                /* wyświetlamy temperaturę gdy czujnik wykryty */<br />                if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp1(9);<br />                else {<br />                        lcd_locate(0,9);<br />                        lcd_str(&quot; error7 &quot;);     /* wyświetlamy informację o błędzie jeśli np brak czujnika lub błąd odczytu */<br />                }<br /><br />                /* dokonujemy odczytu temperatury z drugiego czujnika o ile został wykryty */<br />                if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp2(0);<br />                else {<br />                        lcd_locate(1,0);<br />                        lcd_str(&quot; error1 &quot;);<br />                }<br /><br />                /* dokonujemy odczytu temperatury z trzeciego czujnika o ile został wykryty */<br />                       if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;2&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp3(9);<br />                       else {<br />                               lcd_locate(1,9);<br />                               lcd_str(&quot; error2 &quot;);<br />                       }<br /><br /><br /><br /><br />                sei();  /* włączamy globalne przerwania */<br /><br />              //  lcd_locate(0,0);<br />              //  lcd_str_P(PSTR(&quot;  T1       T2&quot;)); /* wyświetl napisy w zerowej linii LCD */<br /><br />             /* pętla nieskończona */<br /><br /><br />                while(1) {<br /><br />                          if(s1_flag)<br /><br /><br /><br />                        {<br /><br /><br />                                /* sprawdzanie flagi tyknięć timera programowego co 1 sekundę */<br /><br />                                /* co trzy sekundy gdy reszta z dzielenia modulo 3 == 0 sprawdzaj ilość dostępnych czujników */<br />                                if( 0 == (sekundy%3) ) {<br /><br />                                        uint8_t *cl=(uint8_t*)gSensorIDs;       // pobieramy wskaźnik do tablicy adresów czujników<br />                                        for( uint8_t i=0; i&lt;MAXSENSORS*OW_ROMCODE_SIZE; i++) *cl++ = 0; // kasujemy całą tablicę<br />                                        czujniki_cnt = search_sensors();        // ponownie wykrywamy ile jest czujników i zapełniamy tablicę<br />                                     //   lcd_locate(0,8);<br />                                     //   lcd_int( czujniki_cnt );        // wyświetlamy ilość czujników na magistrali<br />                                }<br /><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 3 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&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp1(9);<br />                                        else {<br />                                                lcd_locate(0,9);<br />                                                lcd_str(&quot; error &quot;);<br />                                        }<br /><br />                                        if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp2(0);<br />                                        else {<br />                                                lcd_locate(1,0);<br />                                                lcd_str(&quot; error &quot;);<br />                                        }<br /><br />                                        if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;2&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp3(9);<br />                                        else {<br />                                                lcd_locate(1,9);<br />                                                lcd_str(&quot; error &quot;);<br />                                        }<br /><br />                                }<br /><br />                                /* zerujemy flagę aby tylko jeden raz w ciągu sekundy wykonać operacje */<br />                                s1_flag=0;<br /><br />                        } /* koniec sprawdzania flagi */<br /><br />                } /* koniec pętli nieskończonej */<br /><br />        }<br /><br />        /* wyświetlanie temperatury na pozycji X w pierwszej linii LCD - prawa strona */<br />        void display_temp1(uint8_t x) {<br />                lcd_locate(0,x);<br />                if(subzero) lcd_str(&quot;-&quot;);       /* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />                else lcd_str(&quot; &quot;);      /* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />                lcd_int(cel);   /* wyświetl dziesiętne części temperatury  */<br />                lcd_str(&quot;.&quot;);   /* wyświetl kropkę */<br />                lcd_int(cel_fract_bits); /* wyświetl dziesiętne części stopnia */<br />                lcd_str(&quot; C &quot;); /* wyświetl znak jednostek (C - stopnie Celsiusza) */<br />        }<br /><br />        /* wyświetlanie temperatury na pozycji X w drugiej linii LCD - lewa strona */<br />        void display_temp2(uint8_t x) {<br />            lcd_locate(1,x);<br />                if(subzero) lcd_str(&quot;-&quot;);       /* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />                else lcd_str(&quot; &quot;);      /* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />                lcd_int(cel);   /* wyświetl dziesiętne części temperatury  */<br />                lcd_str(&quot;.&quot;);   /* wyświetl kropkę */<br />                lcd_int(cel_fract_bits); /* wyświetl dziesiętne części stopnia */<br />                lcd_str(&quot; C &quot;); /* wyświetl znak jednostek (C - stopnie Celsiusza) */<br />        }<br /><br />        /* wyświetlanie temperatury na pozycji X w drugiej linii LCD - prawa strona */<br />        void display_temp3(uint8_t x) {<br />                lcd_locate(1,x);<br />                if(subzero) lcd_str(&quot;-&quot;);       /* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />                else lcd_str(&quot; &quot;);      /* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />                lcd_int(cel);   /* wyświetl dziesiętne części temperatury  */<br />                lcd_str(&quot;.&quot;);   /* wyświetl kropkę */<br />                lcd_int(cel_fract_bits); /* wyświetl dziesiętne części stopnia */<br />                lcd_str(&quot; C &quot;); /* wyświetl znak jednostek (C - stopnie Celsiusza) */<br />        }<br /><br /><br />        /* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br />        /* pełni funkcję timera programowego wyznaczającego podstawę czasu = 1s */<br />       ISR(TIMER1_COMPB_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 />        }[/syntax]<br /><br /><br />W tych linijkach popełniam jakiś błąd:<br />[syntax=c]//DDRA |= (1&lt;&lt;PA7);     // ustawiamy kierunek linii podświetlenia LCD jako WYJŚCIE<br />                //PORTA |= (1&lt;&lt;PA7);    // załączamy podświetlenie LCD - stan wysoki<br /><br />                // ustawienie TIMER0 dla F_CPU=11,0592MHz<br />                TCCR1A |= (1&lt;&lt;WGM12);<br />              //  TCCR1A |= (1&lt;&lt;WGM13);  /* tryb CTC */<br />            //    TCCR1A |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);          /* preskaler = 1024 */<br />              OCR1A = 108; //1024 to preskaler a 100 to częstotliwośc przerwań 100Hz (okres 10ms)                                                  /* dodatkowy podział przez 108 (rej. przepełnienia) */<br />               TCCR1A |= (1&lt;&lt;COM1A0);                          /* zezwolenie na przerwanie CompareMatch */<br />               TCCR1A |= (1&lt;&lt;COM1B0);<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 />                lcd_init();     /* inicjalizacja LCD */[/syntax]<br /><br /><br />i tutaj też mam jakiś błąd:<br />[syntax=c]/* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br />        /* pełni funkcję timera programowego wyznaczającego podstawę czasu = 1s */<br />       ISR(TIMER1_COMPB_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 />        }[/syntax]<br /><br />Procek to Atmega 8A-PU.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=535">piotr8605</a> — 22 sty 2016, o 17:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[piotr8605]]></name></author>
<updated>2016-01-22T09:55:41+01:00</updated>
<published>2016-01-22T09:55:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151404#p151404</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151404#p151404"/>
<title type="html"><![CDATA[Re: 1Wire - brak wyświetlenia temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151404#p151404"><![CDATA[
Zapis OCR1A = 108 jako preskaler.<br />Wcześniej używałem procesora Atmega 88P dla 3 czujników.<br /><br />Sprawdzę konfigurację Timera1 i wyślę poprawiony kod.<br />Dziękuję za pomoc <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=535">piotr8605</a> — 22 sty 2016, o 09:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michalf]]></name></author>
<updated>2016-01-22T08:18:00+01:00</updated>
<published>2016-01-22T08:18:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151394#p151394</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151394#p151394"/>
<title type="html"><![CDATA[Re: 1Wire - brak wyświetlenia temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151394#p151394"><![CDATA[
Jak kolega wyżej napisał TIMER0 nie ma CTC.<br />Polecam poczytać 'Table 21-5 Waveform Generation Mode Bit Description' bo nie widze u CIebie wyboru trybu pracy licznika.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12706">michalf</a> — 22 sty 2016, o 08:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[piotr8605]]></name></author>
<updated>2016-01-22T01:25:10+01:00</updated>
<published>2016-01-22T01:25:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151381#p151381</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151381#p151381"/>
<title type="html"><![CDATA[1Wire - brak wyświetlenia temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14266&amp;p=151381#p151381"><![CDATA[
Witam,<br />chcę zrobić pomiar temperatury na 3 czujnikach DS18B20.<br />Wykorzystuję procesor Atmega 8A.<br /><br />Po skompilowaniu i wgraniu programu nie wiem, gdzie popełniam błąd, ponieważ mam podłączony jeden czujnik w trybie NORMAL i wyświetlają się błędy:<br />           error7 <br />error1   error2<br /><br />A jeden czujnik powinien pokazywać temperaturę, a na dwóch pozostałych powinien być błąd (ponieważ brak pozostałych 2 czujników).<br />Czujnik mam podpięty do portu PD0 (nóżka 2).<br /><br />Poniżej przedstawiam kod programu:<br />[syntax=c]/*<br />         * main.c<br />         *<br />         *  Created on: 2010-09-13<br />         *       Autor: Mirosław Kardaś<br />         */<br />        #include &lt;avr/io.h&gt;<br />        #include &lt;avr/interrupt.h&gt;<br />        #include &lt;avr/pgmspace.h&gt;<br />        #include &lt;util/delay.h&gt;<br />        #include &quot;LCD/lcd44780.h&quot;<br />        #include &quot;1Wire/ds18x20.h&quot;<br />        #include &lt;stdlib.h&gt;<br /><br /><br />        void display_temp1(uint8_t x);<br />        void display_temp2(uint8_t x);<br />        void display_temp3(uint8_t x);<br /><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 /><br /><br /><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);    // załączamy podświetlenie LCD - stan wysoki<br /><br />                // ustawienie TIMER0 dla F_CPU=11,0592MHz<br />                TCCR0 |= (1&lt;&lt;CS01);                           /* tryb CTC */<br />                TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);          /* preskaler = 1024 */<br />              OCR1A = 108; //1024 to preskaler a 100 to częstotliwośc przerwań 100Hz (okres 10ms)                                                  /* dodatkowy podział przez 108 (rej. przepełnienia) */<br />               TCCR1A |= (1&lt;&lt;COM1A0);                          /* zezwolenie na przerwanie CompareMatch */<br />               TCCR1A |= (1&lt;&lt;COM1B0);<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 />                lcd_init();     /* inicjalizacja LCD */<br /><br />                /* sprawdzamy ile czujników DS18xxx widocznych jest na magistrali */<br />                czujniki_cnt = search_sensors();<br /><br /><br />                /* wysyłamy rozkaz wykonania pomiaru temperatury<br />                 * do wszystkich czujników na magistrali 1Wire<br />                 * zakładając, że zasilane są w trybie NORMAL,<br />                 * gdyby był to tryb Parasite, należałoby użyć<br />                 * jako pierwszego prarametru DS18X20_POWER_PARASITE */<br />                DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />                /* czekamy 750ms na dokonanie konwersji przez podłączone czujniki */<br />                _delay_ms(750);<br /><br /><br /><br />                         /* dokonujemy odczytu temperatury z pierwszego czujnika o ile został wykryty */<br />                /* wyświetlamy temperaturę gdy czujnik wykryty */<br />                if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp1(9);<br />                else {<br />                        lcd_locate(0,9);<br />                        lcd_str(&quot; error7 &quot;);     /* wyświetlamy informację o błędzie jeśli np brak czujnika lub błąd odczytu */<br />                }<br /><br />                /* dokonujemy odczytu temperatury z drugiego czujnika o ile został wykryty */<br />                if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp2(0);<br />                else {<br />                        lcd_locate(1,0);<br />                        lcd_str(&quot; error1 &quot;);<br />                }<br /><br />                /* dokonujemy odczytu temperatury z trzeciego czujnika o ile został wykryty */<br />                       if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;2&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp3(9);<br />                       else {<br />                               lcd_locate(1,9);<br />                               lcd_str(&quot; error2 &quot;);<br />                       }<br /><br /><br />                       /* WYŁĄCZAMY POMIAR NAPIĘCIA<br />                       pomiar_napiecia();<br />*/<br />                sei();  /* włączamy globalne przerwania */<br /><br />              //  lcd_locate(0,0);<br />              //  lcd_str_P(PSTR(&quot;  T1       T2&quot;)); /* wyświetl napisy w zerowej linii LCD */<br /><br />             /* pętla nieskończona */<br /><br /><br />                while(1) {<br /><br />                          if(s1_flag)<br /><br /><br /><br />                        {<br /><br />                        //  pomiar_napiecia();<br />                                /* sprawdzanie flagi tyknięć timera programowego co 1 sekundę */<br /><br />                                /* co trzy sekundy gdy reszta z dzielenia modulo 3 == 0 sprawdzaj ilość dostępnych czujników */<br />                                if( 0 == (sekundy%3) ) {<br /><br />                                        uint8_t *cl=(uint8_t*)gSensorIDs;       // pobieramy wskaźnik do tablicy adresów czujników<br />                                        for( uint8_t i=0; i&lt;MAXSENSORS*OW_ROMCODE_SIZE; i++) *cl++ = 0; // kasujemy całą tablicę<br />                                        czujniki_cnt = search_sensors();        // ponownie wykrywamy ile jest czujników i zapełniamy tablicę<br />                                     //   lcd_locate(0,8);<br />                                     //   lcd_int( czujniki_cnt );        // wyświetlamy ilość czujników na magistrali<br />                                }<br /><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 3 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&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp1(9);<br />                                        else {<br />                                                lcd_locate(0,9);<br />                                                lcd_str(&quot; error &quot;);<br />                                        }<br /><br />                                        if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp2(0);<br />                                        else {<br />                                                lcd_locate(1,0);<br />                                                lcd_str(&quot; error &quot;);<br />                                        }<br /><br />                                        if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;2&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp3(9);<br />                                        else {<br />                                                lcd_locate(1,9);<br />                                                lcd_str(&quot; error &quot;);<br />                                        }<br /><br />                                }<br /><br />                                /* zerujemy flagę aby tylko jeden raz w ciągu sekundy wykonać operacje */<br />                                s1_flag=0;<br /><br />                        } /* koniec sprawdzania flagi */<br /><br />                } /* koniec pętli nieskończonej */<br /><br />        }<br /><br />        /* wyświetlanie temperatury na pozycji X w pierwszej linii LCD - prawa strona */<br />        void display_temp1(uint8_t x) {<br />                lcd_locate(0,x);<br />                if(subzero) lcd_str(&quot;-&quot;);       /* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />                else lcd_str(&quot; &quot;);      /* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />                lcd_int(cel);   /* wyświetl dziesiętne części temperatury  */<br />                lcd_str(&quot;.&quot;);   /* wyświetl kropkę */<br />                lcd_int(cel_fract_bits); /* wyświetl dziesiętne części stopnia */<br />                lcd_str(&quot; C &quot;); /* wyświetl znak jednostek (C - stopnie Celsiusza) */<br />        }<br /><br />        /* wyświetlanie temperatury na pozycji X w drugiej linii LCD - lewa strona */<br />        void display_temp2(uint8_t x) {<br />            lcd_locate(1,x);<br />                if(subzero) lcd_str(&quot;-&quot;);       /* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />                else lcd_str(&quot; &quot;);      /* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />                lcd_int(cel);   /* wyświetl dziesiętne części temperatury  */<br />                lcd_str(&quot;.&quot;);   /* wyświetl kropkę */<br />                lcd_int(cel_fract_bits); /* wyświetl dziesiętne części stopnia */<br />                lcd_str(&quot; C &quot;); /* wyświetl znak jednostek (C - stopnie Celsiusza) */<br />        }<br /><br />        /* wyświetlanie temperatury na pozycji X w drugiej linii LCD - prawa strona */<br />        void display_temp3(uint8_t x) {<br />                lcd_locate(1,x);<br />                if(subzero) lcd_str(&quot;-&quot;);       /* jeśli subzero==1 wyświetla znak minus (temp. ujemna) */<br />                else lcd_str(&quot; &quot;);      /* jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia) */<br />                lcd_int(cel);   /* wyświetl dziesiętne części temperatury  */<br />                lcd_str(&quot;.&quot;);   /* wyświetl kropkę */<br />                lcd_int(cel_fract_bits); /* wyświetl dziesiętne części stopnia */<br />                lcd_str(&quot; C &quot;); /* wyświetl znak jednostek (C - stopnie Celsiusza) */<br />        }<br /><br /><br />        /* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br />        /* pełni funkcję timera programowego wyznaczającego podstawę czasu = 1s */<br />       ISR(TIMER1_COMPB_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 />        }[/syntax]<br /><br />Nie jestem pewien ustawienia timerów...<br /><br />Dziękuję za pomoc<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=535">piotr8605</a> — 22 sty 2016, o 01:25</p><hr />
]]></content>
</entry>
</feed>