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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-12-18T23:54:03+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=5206&amp;mode</id>
<entry>
<author><name><![CDATA[KoWaL]]></name></author>
<updated>2013-12-18T23:54:03+01:00</updated>
<published>2013-12-18T23:54:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61741#p61741</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61741#p61741"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61741#p61741"><![CDATA[
<div class="quotetitle">jark napisał(a):</div><div class="quotecontent"><br />A co tak z ciekawości zapytam zmieniłeś konkretne że działa?<br />Pozdrawiam<br />Jarek<br /></div><br /><br />[syntax=c]if(++cnt&gt;99){<br />                s1_flag=1;<br />                sekundy++;<br />                if(sekundy&gt;59) sekundy=0;<br />                cnt=0;  /* wyzeru licznik setnych ms */<br />        }[/syntax]<br /><br /><br />dodałem zerowanie licznika setnych ms<br /><br />i przepisałem prawie wszystko od nowa(może coś mi umknęło (ale żeby 3 razy to samo???))<br /><br />A tak szczerze to za bardzo nawet nie wiem <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=2114">KoWaL</a> — 18 gru 2013, o 23:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jark]]></name></author>
<updated>2013-12-18T23:45:00+01:00</updated>
<published>2013-12-18T23:45:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61740#p61740</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61740#p61740"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61740#p61740"><![CDATA[
<div class="quotetitle">jark napisał(a):</div><div class="quotecontent"><br />Tym Timerem to co chcesz osiągnąć? Wydaje mi się że s1_flag nigdy nie będzie 1 bo zawsze po wejściu w obsługę przerwania zerujesz cnt - static uint8_t cnt=0; więc warunek if(++cnt&gt;99) nigdy nie będzie spełniony.<br /></div><br /> <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" />  Tak to jest jak sie 10 rzeczy na raz robi <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Umknął mi specyfikator static  <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /> <br />Oczywiście będzie zwiększała się wartość cnt - mój błąd.<br />Co do wywołania funkcji pomiarowej powinieneś jednak użyć odpowiedniej dla zastosowanego podłączenia.<br />A co tak z ciekawości zapytam zmieniłeś konkretne że działa?<br />Pozdrawiam<br />Jarek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=582">jark</a> — 18 gru 2013, o 23:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[KoWaL]]></name></author>
<updated>2013-12-18T23:16:11+01:00</updated>
<published>2013-12-18T23:16:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61736#p61736</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61736#p61736"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61736#p61736"><![CDATA[
<div class="quotetitle">jark napisał(a):</div><div class="quotecontent"><br />A konkretnie w której lekcji z której książki?<br /></div><br /><br /><br />bluebook  o transmisji 1wire.<br /><br /><br />może dziwne ale zrobiłem tak i wszystko działa:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;string.h&gt;<br />//#include &lt;inttypes.h&gt;<br />//#include &lt;stdint.h&gt;<br /><br />#include &quot;Definicje/leds&quot;<br />#include &quot;Definicje/keys&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br /><br />//---------------------------------<br /><br /><br />#define REF_256 (1&lt;&lt;REFS1)|(1&lt;&lt;REFS0)<br />#define REF_VCC (1&lt;&lt;REFS1)<br /><br /><br /><br />uint16_t pomiar (uint8_t kanal);<br />uint8_t keys&#91;6&#93;;<br /><br />const uint16_t adckx&#91;6&#93; PROGMEM = {1020, 768, 585, 460, 384, 327};<br />volatile uint16_t Timer1, Timer2, Timer3;<br /><br />void display_temp(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 />//wgranie do pamięci znaków----------------------------<br /><br />void ldc_cls (void){}<br /><br />char napis1&#91;&#93; = &quot;ATNEL FOR FUN&quot;;<br />char napis2&#91;&#93; = &quot;www.forum.atnel.pl&quot;;<br /><br />int main(void)<br />{<br />ISR(ADC_vect);<br />//def portow -----------------------------<br /><br /><br />DDRD |= LED1|LED2|LED3;<br />DDRC |= LED0;<br /><br />LED0_OFF;<br />LED1_OFF; LED2_OFF; LED3_OFF;<br /><br /><br />// timer0 - Config<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00); //prescaler = 1024<br />TIMSK |= (1&lt;&lt;TOIE0); // zezwolenie na przerwanie OVF<br /><br />//timer1 - Config<br />TCCR2 |= (1&lt;&lt;WGM21);<br />TCCR2 |= (1&lt;&lt;CS21)|(1&lt;&lt;CS20)|(1&lt;&lt;CS22);<br />OCR2 = 77;//77<br />TIMSK |= (1&lt;&lt;OCIE2);<br /><br /><br /><br /><br /><br />//ADC-----------------------------------------<br />ADMUX |= (1&lt;&lt;REFS0);<br />ADCSR |= (1&lt;&lt;ADEN) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS0);<br /><br /><br />int wzr;<br /><br /><br />sei(); //globalne wlaczenie przerwan<br /><br />lcd_init();<br />// inicjalizacja LCD ----------------------------<br /><br />int8_t i, j;<br />i = 0-strlen (napis2);<br />j = 8;<br /><br /><br />//---------TEMP-----------------<br />//DS18X20_POWER_PARASITE;<br /><br />czujniki_cnt = search_sensors();<br /><br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />_delay_ms(750);<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else {<br />lcd_locate(1,0);<br />lcd_str(&quot; error &quot;);/* wyświetlamy informację o błędzie jeśli np brak czujnika lub błąd odczytu */<br />}<br /><br />//---------TEMP------------------<br /><br /><br />int kv=0;<br /><br />int menu = 0;<br />_delay_ms(1000);<br />lcd_cls();<br />lcd_locate(0,0);<br />lcd_str(&quot;*     MENU     *&quot;);   //wyswietlenie głownego okna MENU<br /><br />while(1)<br />{<br /><br />//sygnalizacja LED'em pracy procka<br />//if( !Timer2 ) {       //&amp;&amp; sw_on<br />//LED0_TOG;<br />//Timer2=200;<br />//}<br /><br />//------------------TEMP--------------------------------------<br />if(s1_flag) {/* 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) ) czujniki_cnt = search_sensors();<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 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&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else {<br />lcd_locate(1,0);<br />lcd_str(&quot; error &quot;);<br />}<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 />uint8_t k;<br />for(k=0; k&lt;6; k++)<br />{<br />wzr = pgm_read_word( &amp;adckx&#91;k&#93; );<br />if( kv &gt; wzr-adcr &amp;&amp; kv &lt; wzr+adcr  )<br />{<br />if( keys&#91;k&#93;&lt;10 ) keys&#91;k&#93;++;<br />} else keys&#91;k&#93;=0;<br />}<br /><br /><br /><br />if (keys&#91;5&#93;==7)<br />{<br />menu--;<br />lcd_cls();<br />}<br /><br /><br />if (keys&#91;4&#93;==7)<br />{<br />menu++;<br />lcd_cls();<br />}<br /><br />//----------------klawisze---------------------------------<br /><br /><br /><br />lcd_locate(1,8);          //wyswietla aktualna pozycje menu<br />lcd_str(&quot;M.pos.&quot;);<br />lcd_int(menu);<br /><br />kv = pomiar(5);<br /><br /> if (menu&gt;3) menu=0;<br />       if (menu&lt;0) menu=0;<br /><br /><br /><br /><br />switch (menu)<br />{<br /><br /><br />case 3:<br /><br />if( !Timer3 ) {<br /><br />lcd_locate(0,0);<br />lcd_str(&quot;................&quot;);<br />lcd_locate(0,i++);<br />lcd_str(napis2);<br /><br />lcd_locate(1,0);<br />lcd_str(&quot;.................&quot;);<br />lcd_locate(1,j--);<br />lcd_str(napis1);<br /><br /><br />if(i&gt;19) i = 0-strlen (napis1);<br />if(j&lt;-14) j = LCD_COLS;<br /><br />Timer3=50;}<br /><br /><br /><br />//_delay_ms(300);<br /><br />             lcd_locate(1,8);<br />             lcd_str(&quot;M.pos.&quot;);<br />             lcd_int(menu);<br />             lcd_locate(1,15);<br />             lcd_str(&quot; &quot;);<br /><br />       break;<br /><br />case 2:<br />//lcd_cls();<br />lcd_locate(0,0);<br />lcd_str(&quot;Ster. ledami 1-3&quot;);<br /><br /><br /><br />if (keys&#91;0&#93;==5) LED1_TOG;<br />if (keys&#91;1&#93;==5) LED2_TOG;<br />if (keys&#91;2&#93;==5) LED3_TOG;<br /><br />//----------DEBUGOWANIE KLAWISZY----------------------<br />//lcd_locate(1,0);<br />//lcd_int(kv);<br />//lcd_locate(1,1);<br />//_delay_ms(100);<br />//lcd_str(&quot;   &quot;);<br />//----------DEBUGOWANIE KLAWISZY----------------------<br /><br />if( !Timer1 ) {<br />       Timer1=10;<br /><br />       if( keys&#91;0&#93;&lt;15) keys&#91;0&#93;++;<br />       if( keys&#91;0&#93;==15 ) { LED1_TOG; Timer1 = 5; }<br />       }<br /><br /><br />                lcd_locate(1,8);<br />             lcd_str(&quot;M.pos.&quot;);<br />             lcd_int(menu);<br />             lcd_locate(1,15);<br />             lcd_str(&quot; &quot;);<br /><br /><br /><br />break;<br /><br /><br />case 1:<br /><br />lcd_locate(1,0);<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 />lcd_locate(1,8);<br />lcd_str(&quot;M.pos.&quot;);<br />lcd_int(menu);<br />lcd_locate(1,15);<br />lcd_str(&quot; &quot;);<br /><br /><br />break;<br /><br />default:                        //domylna funkcja MENU<br /><br />lcd_locate(0,0);<br />lcd_str(&quot;*     MENU     *&quot;);<br />lcd_locate(1,8);<br />lcd_str(&quot;M.pos.&quot;);<br />lcd_int(menu);<br />lcd_locate(1,15);<br />lcd_str(&quot; &quot;);<br /><br />break;<br /><br /><br />}<br /><br /><br /><br /><br /><br /><br />}<br /><br />}<br /><br />uint16_t pomiar (uint8_t kanal){<br />ADMUX |= (ADMUX &amp; 0xF8) | kanal;<br />ADCSR |= (1&lt;&lt;ADSC);<br />while(ADCSR &amp; (1&lt;&lt;ADSC));<br />return ADCW;<br />}<br /><br /><br />ISR( TIMER0_OVF_vect ) {<br />TCNT0 = 256-78; // częstotliwość 100 Hz<br /><br /><br />uint16_t n = Timer1;<br />if(n) Timer1=--n;<br /><br />n = Timer2;<br />if(n) Timer2=--n;<br /><br />n = Timer3;<br />if(n) Timer3=--n;<br /><br /><br />}<br /><br />void display_temp(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 (TIMER2_COMP_vect){<br />static uint8_t cnt=0;<br /><br />if(++cnt&gt;99){<br />s1_flag=1;<br />sekundy++;<br />if(sekundy&gt;59) sekundy=0;<br />cnt=0;/* wyzeru licznik setnych ms */<br />}<br />}[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2114">KoWaL</a> — 18 gru 2013, o 23:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jark]]></name></author>
<updated>2013-12-18T23:07:50+01:00</updated>
<published>2013-12-18T23:07:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61734#p61734</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61734#p61734"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61734#p61734"><![CDATA[
A przy wywołaniu funkcji pomiaru <br />[syntax=c]DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );[/syntax]<br />masz że 3 przewodowe tzn. z zewnętrznym zasilaniem. <br />Do 2  - przewodowego wywołanie jest z parametrem parasite:<br /><br />[syntax=c]DS18X20_start_meas( DS18X20_POWER_PARASITE, NULL );[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br /><div class="quotetitle">KoWaL napisał(a):</div><div class="quotecontent"><br />a timer to taki był przykład w książce.<br /></div><br />A konkretnie w której lekcji z której książki?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=582">jark</a> — 18 gru 2013, o 23:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[KoWaL]]></name></author>
<updated>2013-12-18T22:55:07+01:00</updated>
<published>2013-12-18T22:55:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61731#p61731</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61731#p61731"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61731#p61731"><![CDATA[
Mimo wykomentowania display_temp wyświetli się temperatura poprzez wykonanie powyższego kawałka kodu.<br /><div class="quotetitle">KoWaL napisał(a):</div><div class="quotecontent"><br />[syntax=c]ISR (TIMER2_COMP_vect){<br />        static uint8_t cnt=0;<br /> <br />        if(++cnt&gt;99){<br />                s1_flag=1;<br />                sekundy++;<br />                if(sekundy&gt;59) sekundy=0;<br /> <br />        }<br />}[/syntax]<br /></div><br /><br />Tym Timerem to co chcesz osiągnąć? Wydaje mi się że s1_flag nigdy nie będzie 1 bo zawsze po wejściu w obsługę przerwania zerujesz cnt -  static uint8_t cnt=0; więc warunek if(++cnt&gt;99) nigdy nie będzie spełniony.<br />Wynik 85 oznacza błąd konwersji - może być spowodowany np. tym że zbyt szybko chcesz odczytać temperaturę po rozpoczęciu pomiaru. napisz też czy stosujesz 2 czy 3 przewodowe podłączenie DS-a.[/quote]<br /><br /><br /><br />Stosuje połączenie na 2 przewody parasite a timer to taki był przykład w książce.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2114">KoWaL</a> — 18 gru 2013, o 22:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jark]]></name></author>
<updated>2013-12-18T22:52:30+01:00</updated>
<published>2013-12-18T22:52:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61730#p61730</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61730#p61730"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61730#p61730"><![CDATA[
<div class="quotetitle">KoWaL napisał(a):</div><div class="quotecontent"><br />[syntax=c]case 1:<br /> <br />                        lcd_locate(1,0);<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) */[/syntax]<br /></div><br />Mimo wykomentowania display_temp wyświetli się temperatura poprzez wykonanie powyższego kawałka kodu.<br /><div class="quotetitle">KoWaL napisał(a):</div><div class="quotecontent"><br />[syntax=c]ISR (TIMER2_COMP_vect){<br />        static uint8_t cnt=0;<br /> <br />        if(++cnt&gt;99){<br />                s1_flag=1;<br />                sekundy++;<br />                if(sekundy&gt;59) sekundy=0;<br /> <br />        }<br />}[/syntax]<br /></div><br /><br />Tym Timerem to co chcesz osiągnąć? Wydaje mi się że s1_flag nigdy nie będzie 1 bo zawsze po wejściu w obsługę przerwania zerujesz cnt -  static uint8_t cnt=0; więc warunek if(++cnt&gt;99) nigdy nie będzie spełniony.<br />Wynik 85 oznacza błąd konwersji - może być spowodowany np. tym że zbyt szybko chcesz odczytać temperaturę po rozpoczęciu pomiaru. napisz też czy stosujesz 2 czy 3 przewodowe podłączenie DS-a.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=582">jark</a> — 18 gru 2013, o 22:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2013-12-18T22:49:23+01:00</updated>
<published>2013-12-18T22:49:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61727#p61727</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61727#p61727"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61727#p61727"><![CDATA[
Za dużo rzeczy chcesz zrobić na raz.<br />stwórz nowy projekt i spróbuj najpierw tylko pomiar temp z jednym czujnikiem bez <br />niczego więcej i wyświetlanie w różnych miejscach wyświetlacza. Np. raz w zerowym wierszu <br />i 2 kolumnie potem w 1 wierszu i 5 kolumnie.<br />Czyli ta część programu gdzie co sekundę wykonują się sprawdzenia, konwersja i odczyt temp.<br />Do wyświetlania wykorzystaj swoją funkcję: void display_temp(uint8_t x)<br />Jak zadziała tak jak chcesz i oczekujesz wtedy dopiero dodaj następne rzeczy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 18 gru 2013, o 22:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[KoWaL]]></name></author>
<updated>2013-12-18T22:38:52+01:00</updated>
<published>2013-12-18T22:38:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61723#p61723</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61723#p61723"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61723#p61723"><![CDATA[
Ok a mógłbyś to jakoś sprecyzować to wyświetlanie?<br />już odkomentowałem ale to wtedy w każdej cześci programu wyświetla mi sie 85<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2114">KoWaL</a> — 18 gru 2013, o 22:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2013-12-18T22:30:47+01:00</updated>
<published>2013-12-18T22:30:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61719#p61719</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61719#p61719"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61719#p61719"><![CDATA[
posłuchaj.<br />żeby funkcja coś robiła musi mieć swój kod, prawda?<br />ten kod nie może być cały komentarzem! bo wtedy funkcja nic nie robi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /> Jest pomijana<br />Jeżeli chcesz żeby wyświetlało się w menu 1 to po prostu<br />w menu 1 ją wywołujesz np tak<br />[syntax=c]case 3:<br /> <br />                        if( !Timer3 ) {<br /> <br />                        display_temp(3);<br />                        }<br />       break;[/syntax]<br />Oczywiście to tyko ogólny przykład...<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Jeżeli definicja funkcji wygląda tak<br />[syntax=c]void display_temp(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 />                                        }[/syntax]<br />Nic ci się nie może i nie wyświetli<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 18 gru 2013, o 22:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[KoWaL]]></name></author>
<updated>2013-12-18T22:23:58+01:00</updated>
<published>2013-12-18T22:23:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61717#p61717</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61717#p61717"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61717#p61717"><![CDATA[
<div class="quotetitle">MirkoT napisał(a):</div><div class="quotecontent"><br />czekaj, czegoś nie rozumiem...<br />Jak może Ci wyświetlać jakąkolwiek temperaturę, jak całe ciało funkcji display_temp masz zakomentowane?  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" />  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /><br /></div><br /><br /><br /><br />No i właśnie tego nie czaje bo jak dam to tam to mi sie cały czas wszedzie to wyświetla a jak tam pod case 1 to tylko na case 1  <br /><br />a 85 wyswietla sie po chwili niezależnie czy to jest tam czy w case 1  :/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2114">KoWaL</a> — 18 gru 2013, o 22:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2013-12-18T22:21:02+01:00</updated>
<published>2013-12-18T22:21:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61714#p61714</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61714#p61714"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61714#p61714"><![CDATA[
czekaj, czegoś nie rozumiem...<br />Jak może Ci wyświetlać jakąkolwiek temperaturę, jak całe ciało funkcji display_temp masz zakomentowane?  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" />  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 18 gru 2013, o 22:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[KoWaL]]></name></author>
<updated>2013-12-18T22:14:00+01:00</updated>
<published>2013-12-18T22:14:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61711#p61711</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61711#p61711"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61711#p61711"><![CDATA[
[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;string.h&gt;<br />//#include &lt;inttypes.h&gt;<br />//#include &lt;stdint.h&gt;<br /><br />#include &quot;Definicje/leds&quot;<br />#include &quot;Definicje/keys&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br /><br />//---------------------------------<br /><br /><br />#define REF_256 (1&lt;&lt;REFS1)|(1&lt;&lt;REFS0)<br />#define REF_VCC (1&lt;&lt;REFS1)<br /><br /><br /><br />uint16_t pomiar (uint8_t kanal);<br />uint8_t keys&#91;6&#93;;<br />uint8_t czujniki_cnt;<br />uint8_t subzero, cel, cel_fract_bits;<br /><br /><br />const uint16_t adckx&#91;6&#93; PROGMEM = {1020, 768, 585, 460, 384, 327};<br /><br /><br />volatile uint16_t Timer1, Timer2, Timer3;<br />volatile uint8_t s1_flag;<br />volatile uint8_t sekundy;<br /><br />void display_temp (uint8_t x);<br /><br />//wgranie do pamięci znaków----------------------------<br /><br />void ldc_cls (void){}<br /><br />char napis1&#91;&#93; = &quot;ATNEL FOR FUN&quot;;<br />char napis2&#91;&#93; = &quot;www.forum.atnel.pl&quot;;<br /><br />int main(void)<br />{<br />ISR(ADC_vect);<br />//def portow -----------------------------<br /><br /><br />DDRD |= LED1|LED2|LED3;<br />DDRC |= LED0;<br /><br />LED0_OFF;<br />LED1_OFF; LED2_OFF; LED3_OFF;<br /><br /><br />// timer0 - Config<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00); //prescaler = 1024<br />TIMSK |= (1&lt;&lt;TOIE0); // zezwolenie na przerwanie OVF<br /><br />//timer1 - Config<br />TCCR2 |= (1&lt;&lt;WGM21);<br />TCCR2 |= (1&lt;&lt;CS21)|(1&lt;&lt;CS20)|(1&lt;&lt;CS22);<br />OCR2 = 77;//77<br />TIMSK |= (1&lt;&lt;OCIE2);<br /><br /><br /><br /><br /><br />//ADC-----------------------------------------<br />ADMUX |= (1&lt;&lt;REFS0);<br />ADCSR |= (1&lt;&lt;ADEN) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS0);<br /><br /><br />int wzr;<br /><br /><br />sei(); //globalne wlaczenie przerwan<br /><br />lcd_init();<br />// inicjalizacja LCD ----------------------------<br /><br />int8_t i, j;<br />i = 0-strlen (napis2);<br />j = 8;<br /><br /><br />//---------TEMP-----------------<br />DS18X20_POWER_PARASITE;<br /><br />czujniki_cnt = search_sensors();<br /><br />DS18X20_start_meas (DS18X20_POWER_EXTERN, NULL);<br /><br />_delay_ms(750);<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else {<br />lcd_locate(1,0);<br />lcd_str(&quot; error &quot;);/* wyświetlamy informację o błędzie jeśli np brak czujnika lub błąd odczytu */<br />}<br /><br />//---------TEMP------------------<br /><br /><br />int kv=0;<br /><br />int menu = 0;<br />_delay_ms(1000);<br />lcd_cls();<br />lcd_locate(0,0);<br />lcd_str(&quot;*     MENU     *&quot;);   //wyswietlenie głownego okna MENU<br /><br />while(1)<br />{<br /><br />//sygnalizacja LED'em pracy procka<br />if( !Timer2 ) {       //&amp;&amp; sw_on<br />LED0_TOG;<br />Timer2=200;<br />}<br /><br />//------------------TEMP--------------------------------------<br /><br />if(s1_flag) {/* 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) ) czujniki_cnt = search_sensors();<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 />if( 2 == (sekundy%3) ) {<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br /><br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(9);<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 /><br />uint8_t k;<br />for(k=0; k&lt;6; k++)<br />{<br />wzr = pgm_read_word( &amp;adckx&#91;k&#93; );<br />if( kv &gt; wzr-adcr &amp;&amp; kv &lt; wzr+adcr  )<br />{<br />if( keys&#91;k&#93;&lt;10 ) keys&#91;k&#93;++;<br />} else keys&#91;k&#93;=0;<br />}<br /><br /><br /><br />if (keys&#91;5&#93;==7)<br />{<br />menu--;<br />lcd_cls();<br />}<br /><br /><br />if (keys&#91;4&#93;==7)<br />{<br />menu++;<br />lcd_cls();<br />}<br /><br />//----------------klawisze---------------------------------<br /><br /><br /><br />lcd_locate(1,8);          //wyswietla aktualna pozycje menu<br />lcd_str(&quot;M.pos.&quot;);<br />lcd_int(menu);<br /><br />kv = pomiar(5);<br /><br /> if (menu&gt;3) menu=0;<br />       if (menu&lt;0) menu=0;<br /><br /><br /><br /><br />switch (menu)<br />{<br /><br /><br />case 3:<br /><br />if( !Timer3 ) {<br /><br />lcd_locate(0,0);<br />lcd_str(&quot;................&quot;);<br />lcd_locate(0,i++);<br />lcd_str(napis2);<br /><br />lcd_locate(1,0);<br />lcd_str(&quot;.................&quot;);<br />lcd_locate(1,j--);<br />lcd_str(napis1);<br /><br /><br />if(i&gt;19) i = 0-strlen (napis1);<br />if(j&lt;-14) j = LCD_COLS;<br /><br />Timer3=50;}<br /><br /><br /><br />//_delay_ms(300);<br /><br />             lcd_locate(1,8);<br />             lcd_str(&quot;M.pos.&quot;);<br />             lcd_int(menu);<br />             lcd_locate(1,15);<br />             lcd_str(&quot; &quot;);<br /><br />       break;<br /><br />case 2:<br />//lcd_cls();<br />lcd_locate(0,0);<br />lcd_str(&quot;Ster. ledami 1-3&quot;);<br /><br /><br /><br />if (keys&#91;0&#93;==5) LED1_TOG;<br />if (keys&#91;1&#93;==5) LED2_TOG;<br />if (keys&#91;2&#93;==5) LED3_TOG;<br /><br />//----------DEBUGOWANIE KLAWISZY----------------------<br />//lcd_locate(1,0);<br />//lcd_int(kv);<br />//lcd_locate(1,1);<br />//_delay_ms(100);<br />//lcd_str(&quot;   &quot;);<br />//----------DEBUGOWANIE KLAWISZY----------------------<br /><br />if( !Timer1 ) {<br />       Timer1=10;<br /><br />       if( keys&#91;0&#93;&lt;15) keys&#91;0&#93;++;<br />       if( keys&#91;0&#93;==15 ) { LED1_TOG; Timer1 = 5; }<br />       }<br /><br /><br />                lcd_locate(1,8);<br />             lcd_str(&quot;M.pos.&quot;);<br />             lcd_int(menu);<br />             lcd_locate(1,15);<br />             lcd_str(&quot; &quot;);<br /><br /><br /><br />break;<br /><br /><br />case 1:<br /><br />lcd_locate(1,0);<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 />lcd_locate(1,8);<br />lcd_str(&quot;M.pos.&quot;);<br />lcd_int(menu);<br />lcd_locate(1,15);<br />lcd_str(&quot; &quot;);<br /><br /><br />break;<br /><br />default:                        //domylna funkcja MENU<br /><br />lcd_locate(0,0);<br />lcd_str(&quot;*     MENU     *&quot;);<br />lcd_locate(1,8);<br />lcd_str(&quot;M.pos.&quot;);<br />lcd_int(menu);<br />lcd_locate(1,15);<br />lcd_str(&quot; &quot;);<br /><br />break;<br /><br /><br />}<br /><br /><br /><br /><br /><br /><br />}<br /><br />}<br /><br />uint16_t pomiar (uint8_t kanal){<br />ADMUX |= (ADMUX &amp; 0xF8) | kanal;<br />ADCSR |= (1&lt;&lt;ADSC);<br />while(ADCSR &amp; (1&lt;&lt;ADSC));<br />return ADCW;<br />}<br /><br /><br />ISR( TIMER0_OVF_vect ) {<br />TCNT0 = 256-78; // częstotliwość 100 Hz<br /><br /><br />uint16_t n = Timer1;<br />if(n) Timer1=--n;<br /><br />n = Timer2;<br />if(n) Timer2=--n;<br /><br />n = Timer3;<br />if(n) Timer3=--n;<br /><br /><br />}<br /><br />void display_temp(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 />ISR (TIMER2_COMP_vect){<br />static uint8_t cnt=0;<br /><br />if(++cnt&gt;99){<br />s1_flag=1;<br />sekundy++;<br />if(sekundy&gt;59) sekundy=0;<br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2114">KoWaL</a> — 18 gru 2013, o 22:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2013-12-18T22:06:31+01:00</updated>
<published>2013-12-18T22:06:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61709#p61709</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61709#p61709"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61709#p61709"><![CDATA[
skoro raz wyświetla dobrze to i następnym razem też powinien.<br />Ile masz czujników?<br />Pokaż teraz kod po poprawkach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 18 gru 2013, o 22:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[KoWaL]]></name></author>
<updated>2013-12-18T22:01:38+01:00</updated>
<published>2013-12-18T22:01:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61708#p61708</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61708#p61708"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61708#p61708"><![CDATA[
<div class="quotetitle">MirkoT napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">KoWaL napisał(a):</div><div class="quotecontent">Ok teraz ''działa'', tylko wyswietla mi sie tmp 85*c (nie wiem dlaczego)<br />i czy da się zrobic tak aby tmp. pokazywalo w menu 1?<br /></div><br />No jeżeli wywołasz funkcję wyświetlania w meniu 1 to powinno wyświetlać a dlaczego by nie?</div><br /><br /><br /><br />To już gotowe, ale tylko przez chwile wyswietla prawidłową temp. a później znów na 85*<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2114">KoWaL</a> — 18 gru 2013, o 22:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2013-12-18T21:50:56+01:00</updated>
<published>2013-12-18T21:50:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61704#p61704</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61704#p61704"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61704#p61704"><![CDATA[
<div class="quotetitle">KoWaL napisał(a):</div><div class="quotecontent"><br />Ok teraz ''działa'', tylko wyswietla mi sie tmp 85*c (nie wiem dlaczego)<br />i czy da się zrobic tak aby tmp. pokazywalo w menu 1?<br /></div><br />No jeżeli wywołasz funkcję wyświetlania w meniu 1 to powinno wyświetlać a dlaczego by nie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 18 gru 2013, o 21:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[KoWaL]]></name></author>
<updated>2013-12-18T21:47:51+01:00</updated>
<published>2013-12-18T21:47:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61703#p61703</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61703#p61703"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61703#p61703"><![CDATA[
<div class="quotetitle">MirkoT napisał(a):</div><div class="quotecontent"><br />W linii 38 masz deklarację. I tak niech zostanie to jest/było OK.<br />Zaś definicję czyli to co masz w liniach od 154 do 163<br />przenieś do linii 328.<br />I powinno się coś zmienić<br /></div><br /><br /><br />Ok to już zrobiłem teraz pozostaje problem @up<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Przy pierwszym wlaczeniu przed ukazaniem się menu pojawia sie 24*C a pozniej juz caly czas 85*<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2114">KoWaL</a> — 18 gru 2013, o 21:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2013-12-18T21:43:23+01:00</updated>
<published>2013-12-18T21:43:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61702#p61702</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61702#p61702"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61702#p61702"><![CDATA[
W linii 38 masz deklarację. I tak niech zostanie to jest/było OK.<br />Zaś definicję czyli to co masz w liniach od 154 do 163<br />przenieś do linii 328.<br />I powinno się coś zmienić<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 18 gru 2013, o 21:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[KoWaL]]></name></author>
<updated>2013-12-18T21:48:23+01:00</updated>
<published>2013-12-18T21:42:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61701#p61701</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61701#p61701"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61701#p61701"><![CDATA[
<div class="quotetitle">Zaba napisał(a):</div><div class="quotecontent"><br />witam <br />deklaracje funkcji (czyli jej nazwę wraz z parametrami i typem zwracanym )<br />umieść przed main a całą <br />definicję (czyli całe ciało) przenieś za główną funkcję main()<br /></div><br /><br /><br /><br />Ok teraz ''działa'', tylko wyswietla mi sie tmp 85*c (nie wiem dlaczego)<br />i czy da się zrobic tak aby tmp. pokazywalo w menu 1?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2114">KoWaL</a> — 18 gru 2013, o 21:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2013-12-18T21:39:00+01:00</updated>
<published>2013-12-18T21:39:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61699#p61699</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61699#p61699"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61699#p61699"><![CDATA[
To co przeniosłeś czyli deklarację ma być na górze przed main.<br />A &quot;ciało&quot; funkcji czyli jej definicję w to miejsce gdzie przeniosłeś deklarację<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 18 gru 2013, o 21:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2013-12-18T21:16:34+01:00</updated>
<published>2013-12-18T21:16:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61697#p61697</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61697#p61697"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61697#p61697"><![CDATA[
witam <br />deklaracje funkcji (czyli jej nazwę wraz z parametrami i typem zwracanym )<br />umieść przed main a całą <br />definicję (czyli całe ciało) przenieś za główną funkcję main()<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 18 gru 2013, o 21:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[KoWaL]]></name></author>
<updated>2013-12-18T19:56:28+01:00</updated>
<published>2013-12-18T19:56:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61687#p61687</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61687#p61687"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61687#p61687"><![CDATA[
<div class="quotetitle">MirkoT napisał(a):</div><div class="quotecontent"><br />nie masz zdefiniowanej funkcji display_temp()<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br />usp... to znaczy masz ale nie w tym miejscu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /> czyli nie masz...<br />Przenieś całą tą funkcję pod main.<br />Mniej więcej pod pomiar a przed przerwaniami.<br /></div><br /><br /><br />[syntax=c]}<br /><br />uint16_t pomiar (uint8_t kanal){<br />ADMUX |= (ADMUX &amp; 0xF8) | kanal;<br />ADCSR |= (1&lt;&lt;ADSC);<br />while(ADCSR &amp; (1&lt;&lt;ADSC));<br />return ADCW;<br />}<br /><br /><br />ISR( TIMER0_OVF_vect ) {<br />TCNT0 = 256-78; // częstotliwość 100 Hz<br /><br /><br />uint16_t n = Timer1;<br />if(n) Timer1=--n;<br /><br />n = Timer2;<br />if(n) Timer2=--n;<br /><br />n = Timer3;<br />if(n) Timer3=--n;<br /><br /><br />}<br /><br />void display_temp (uint8_t x);                  // czy tutaj????<br /><br />ISR (TIMER2_COMP_vect){<br />static uint8_t cnt=0;<br /><br />if(++cnt&gt;99){<br />s1_flag=1;<br />sekundy++;<br />if(sekundy&gt;59) sekundy=0;<br /><br />}<br />}[/syntax]<br /><br />Niestety dalej to samo...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2114">KoWaL</a> — 18 gru 2013, o 19:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2013-12-18T19:37:28+01:00</updated>
<published>2013-12-18T19:37:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61686#p61686</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61686#p61686"/>
<title type="html"><![CDATA[Re: Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61686#p61686"><![CDATA[
nie masz zdefiniowanej funkcji display_temp()<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br />usp... to znaczy masz ale nie w tym miejscu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /> czyli nie masz...<br />Przenieś całą tą funkcję pod main.<br />Mniej więcej pod pomiar a przed przerwaniami.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 18 gru 2013, o 19:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[KoWaL]]></name></author>
<updated>2013-12-18T19:18:45+01:00</updated>
<published>2013-12-18T19:18:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61684#p61684</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61684#p61684"/>
<title type="html"><![CDATA[Atmega 8,  problem z miernikiem temperatury]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5206&amp;p=61684#p61684"><![CDATA[
Cześć mam mały problem ponieważ wszystko działa tylko nie miernik (coś z kodem chyba nie tak)<br /><br />tutaj konsola:<br />**** Build of configuration Release for project 04_LCD ****<br /><br />make all <br />'Building target: 04_LCD.elf'<br />'Invoking: AVR C Linker'<br />avr-gcc -Wl,-Map,04_LCD.map -mmcu=atmega8 -o &quot;04_LCD.elf&quot;  ./LCD/lcd44780.o  ./1Wire/crc8.o ./1Wire/ds18x20.o ./1Wire/onewire.o  ./main.o   <br />./main.o: In function `main':<br />main.c:(.text.startup+0x74): undefined reference to `display_temp'<br />main.c:(.text.startup+0x120): undefined reference to `display_temp'<br />main.c:(.text.startup+0x13a): undefined reference to `display_temp'<br />collect2: ld returned 1 exit status<br />make: *** [04_LCD.elf] Błąd 1<br /><br />**** Build Finished ****<br /><br /><br /><br />a tutaj kod:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;string.h&gt;<br />//#include &lt;inttypes.h&gt;<br />//#include &lt;stdint.h&gt;<br /><br />#include &quot;Definicje/leds&quot;<br />#include &quot;Definicje/keys&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br /><br />//---------------------------------<br /><br /><br />#define REF_256 (1&lt;&lt;REFS1)|(1&lt;&lt;REFS0)<br />#define REF_VCC (1&lt;&lt;REFS1)<br /><br /><br /><br />uint16_t pomiar (uint8_t kanal);<br />uint8_t keys&#91;6&#93;;<br />uint8_t czujniki_cnt;<br />uint8_t subzero, cel, cel_fract_bits;<br /><br /><br />const uint16_t adckx&#91;6&#93; PROGMEM = {1020, 768, 585, 460, 384, 327};<br /><br /><br />volatile uint16_t Timer1, Timer2, Timer3;<br />volatile uint8_t s1_flag;<br />volatile uint8_t sekundy;<br /><br />void display_temp (uint8_t x);<br /><br />//wgranie do pamięci znaków----------------------------<br /><br />void ldc_cls (void){}<br /><br />char napis1&#91;&#93; = &quot;ATNEL FOR FUN&quot;;<br />char napis2&#91;&#93; = &quot;www.forum.atnel.pl&quot;;<br /><br />int main(void)<br />{<br />ISR(ADC_vect);<br />//def portow -----------------------------<br /><br /><br />DDRD |= LED1|LED2|LED3;<br />DDRC |= LED0;<br /><br />LED0_OFF;<br />LED1_OFF; LED2_OFF; LED3_OFF;<br /><br /><br />// timer0 - Config<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00); //prescaler = 1024<br />TIMSK |= (1&lt;&lt;TOIE0); // zezwolenie na przerwanie OVF<br /><br />//timer1 - Config<br />TCCR2 |= (1&lt;&lt;WGM21);<br />TCCR2 |= (1&lt;&lt;CS21)|(1&lt;&lt;CS20)|(1&lt;&lt;CS22);<br />OCR2 = 77;<br />TIMSK |= (1&lt;&lt;OCIE2);<br /><br /><br /><br /><br /><br />//ADC-----------------------------------------<br />ADMUX |= (1&lt;&lt;REFS0);<br />ADCSR |= (1&lt;&lt;ADEN) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS0);<br /><br /><br />int wzr;<br /><br /><br />sei(); //globalne wlaczenie przerwan<br /><br />lcd_init();<br />// inicjalizacja LCD ----------------------------<br /><br />int8_t i, j;<br />i = 0-strlen (napis2);<br />j = 8;<br /><br /><br />//---------TEMP-----------------<br />DS18X20_POWER_PARASITE;<br /><br />czujniki_cnt = search_sensors();<br /><br />DS18X20_start_meas (DS18X20_POWER_EXTERN, NULL);<br /><br />_delay_ms(750);<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br />else {<br />lcd_locate(1,0);<br />lcd_str(&quot; error &quot;);/* wyświetlamy informację o błędzie jeśli np brak czujnika lub błąd odczytu */<br />}<br />//---------TEMP------------------<br /><br /><br />int kv=0;<br /><br />int menu = 0;<br />_delay_ms(1000);<br />lcd_cls();<br />lcd_locate(0,0);<br />lcd_str(&quot;*     MENU     *&quot;);   //wyswietlenie głownego okna MENU<br /><br />while(1)<br />{<br /><br />//sygnalizacja LED'em pracy procka<br />if( !Timer2 ) {       //&amp;&amp; sw_on<br />LED0_TOG;<br />Timer2=200;<br />}<br /><br />//------------------TEMP--------------------------------------<br /><br />if(s1_flag) {/* 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) ) czujniki_cnt = search_sensors();<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 />if( 2 == (sekundy%3) ) {<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(0);<br /><br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;1&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(9);<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 />//------------------TEMP--------------------------------------<br />_delay_ms(1000);<br />lcd_cls();<br /><br /><br />void display_temp(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 />_delay_ms(1000);<br /><br />//------------------klawisze------------------------------<br /><br />uint8_t k;<br />for(k=0; k&lt;6; k++)<br />{<br />wzr = pgm_read_word( &amp;adckx&#91;k&#93; );<br />if( kv &gt; wzr-adcr &amp;&amp; kv &lt; wzr+adcr  )<br />{<br />if( keys&#91;k&#93;&lt;10 ) keys&#91;k&#93;++;<br />} else keys&#91;k&#93;=0;<br />}<br /><br /><br /><br />if (keys&#91;5&#93;==7)<br />{<br />menu--;<br />lcd_cls();<br />}<br /><br /><br />if (keys&#91;4&#93;==7)<br />{<br />menu++;<br />lcd_cls();<br />}<br /><br />//----------------klawisze---------------------------------<br /><br /><br /><br />lcd_locate(1,8);          //wyswietla aktualna pozycje menu<br />lcd_str(&quot;M.pos.&quot;);<br />lcd_int(menu);<br /><br />kv = pomiar(5);<br /><br /> if (menu&gt;2) menu=0;<br />       if (menu&lt;0) menu=0;<br /><br /><br /><br /><br />switch (menu)<br />{<br /><br /><br />case 3:<br /><br />if( !Timer3 ) {<br /><br />lcd_locate(0,0);<br />lcd_str(&quot;................&quot;);<br />lcd_locate(0,i++);<br />lcd_str(napis2);<br /><br />lcd_locate(1,0);<br />lcd_str(&quot;.................&quot;);<br />lcd_locate(1,j--);<br />lcd_str(napis1);<br /><br /><br />if(i&gt;19) i = 0-strlen (napis1);<br />if(j&lt;-14) j = LCD_COLS;<br /><br />Timer3=50;}<br /><br /><br /><br />//_delay_ms(300);<br /><br />             lcd_locate(1,8);<br />             lcd_str(&quot;M.pos.&quot;);<br />             lcd_int(menu);<br />             lcd_locate(1,15);<br />             lcd_str(&quot; &quot;);<br /><br />       break;<br /><br />case 2:<br />//lcd_cls();<br />lcd_locate(0,0);<br />lcd_str(&quot;Ster. ledami 1-3&quot;);<br /><br /><br /><br />if (keys&#91;0&#93;==5) LED1_TOG;<br />if (keys&#91;1&#93;==5) LED2_TOG;<br />if (keys&#91;2&#93;==5) LED3_TOG;<br /><br />//----------DEBUGOWANIE KLAWISZY----------------------<br />//lcd_locate(1,0);<br />//lcd_int(kv);<br />//lcd_locate(1,1);<br />//_delay_ms(100);<br />//lcd_str(&quot;   &quot;);<br />//----------DEBUGOWANIE KLAWISZY----------------------<br /><br />if( !Timer1 ) {<br />       Timer1=10;<br /><br />       if( keys&#91;0&#93;&lt;15) keys&#91;0&#93;++;<br />       if( keys&#91;0&#93;==15 ) { LED1_TOG; Timer1 = 5; }<br />       }<br /><br /><br />                lcd_locate(1,8);<br />             lcd_str(&quot;M.pos.&quot;);<br />             lcd_int(menu);<br />             lcd_locate(1,15);<br />             lcd_str(&quot; &quot;);<br /><br /><br /><br />break;<br /><br /><br />case 1:<br /><br />//void display_temp(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 />break;<br /><br />default:                        //domylna funkcja MENU<br /><br />lcd_locate(0,0);<br />lcd_str(&quot;*     MENU     *&quot;);<br />lcd_locate(1,8);<br />lcd_str(&quot;M.pos.&quot;);<br />lcd_int(menu);<br />lcd_locate(1,15);<br />lcd_str(&quot; &quot;);<br /><br />break;<br /><br /><br />}<br /><br /><br /><br /><br /><br /><br />}<br /><br />}<br /><br />uint16_t pomiar (uint8_t kanal){<br />ADMUX |= (ADMUX &amp; 0xF8) | kanal;<br />ADCSR |= (1&lt;&lt;ADSC);<br />while(ADCSR &amp; (1&lt;&lt;ADSC));<br />return ADCW;<br />}<br /><br /><br />ISR( TIMER0_OVF_vect ) {<br />TCNT0 = 256-78; // częstotliwość 100 Hz<br /><br /><br />uint16_t n = Timer1;<br />if(n) Timer1=--n;<br /><br />n = Timer2;<br />if(n) Timer2=--n;<br /><br />n = Timer3;<br />if(n) Timer3=--n;<br /><br /><br />}<br /><br /><br /><br />ISR (TIMER2_COMP_vect){<br />static uint8_t cnt=0;<br /><br />if(++cnt&gt;99){<br />s1_flag=1;<br />sekundy++;<br />if(sekundy&gt;59) sekundy=0;<br /><br />}<br />}[/syntax]<br /><br /><br />i nie wiem za bardzo czego to się tyczy, wyświetla mi tylko ostrzeżenie przy POWER_PARASITE<br />i jak to zrobić aby pomiar był wyświetlany po numerem case 1 ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2114">KoWaL</a> — 18 gru 2013, o 19:18</p><hr />
]]></content>
</entry>
</feed>