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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-12-07T20:30:45+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=13779&amp;mode</id>
<entry>
<author><name><![CDATA[marian43]]></name></author>
<updated>2015-12-07T20:24:38+01:00</updated>
<published>2015-12-07T20:24:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147341#p147341</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147341#p147341"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147341#p147341"><![CDATA[
Działa! Dzięki serdeczne i przepraszam za mój brak podstawowej wiedzy. Gdyby nie Wasza bezinteresowna pomoc to nie wiem jakby te forum funkcjonowało.. Chwała Wam za to, a ja zawodowy mechanik szybciej zaskoczę nawet tak podstawowe sprawy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12053">marian43</a> — 7 gru 2015, o 20:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2015-12-07T20:30:45+01:00</updated>
<published>2015-12-07T19:05:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147322#p147322</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147322#p147322"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147322#p147322"><![CDATA[
A gdzie kolega próbuje wywoływać funkcje lcd_defchar_P? Czy przed funkcją main?<br /><br />Funkcje wywoływać można tylko wewnątrz innych funkcji. Przed funkcją main nie można wywoływać żadnych funkcji. A coś mi się zdaje, że kolega właśnie tak próbuje zrobić. <br />Żeby nie być gołosłownym. Zrobiłem tak w swoim projekcie i otrzymałem ten sam błąd.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 7 gru 2015, o 19:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marian43]]></name></author>
<updated>2015-12-07T18:47:43+01:00</updated>
<published>2015-12-07T18:47:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147320#p147320</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147320#p147320"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147320#p147320"><![CDATA[
Zmieniłem na lcd_defchar_P  lecz gdzie szukać problemu z tymi błędami w kompilacji? Są takie same jak były wcześniej..<br /><br />[syntax=c]const uint8_t tab1&#91;&#93; PROGMEM = {31,16,16,30,16,16,31,6}; // Ę<br />const uint8_t tab2&#91;&#93; PROGMEM = {4,31,16,31,1,1,31,32}; //Ś<br />const uint8_t tab3&#91;&#93; PROGMEM = {8,8,10,12,8,24,15,32};            // Ł<br /><br />lcd_defchar_P(0x80, tab1);<br />lcd_defchar_P(0x81, tab2);<br />lcd_defchar_P(0x82, tab3);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12053">marian43</a> — 7 gru 2015, o 18:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2015-12-07T18:07:46+01:00</updated>
<published>2015-12-07T18:07:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147316#p147316</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147316#p147316"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147316#p147316"><![CDATA[
Jak już to chyba powinno być<br />[syntax=c]const uint8_t tab1&#91;&#93; PROGMEM = {31,16,16,30,16,16,31,6}; // Ę<br />const uint8_t tab2&#91;&#93; PROGMEM = {4,31,16,31,1,1,31,32}; //Ś<br />const uint8_t tab3&#91;&#93; PROGMEM = {8,8,10,12,8,24,15,32};            // Ł[/syntax]<br />Ale wtedy powinieneś użyć lcd_defchar_P dla wszystkich trzech tablic. Jeśli chcesz używać poleceń lcd_defchar i lcd_defchar_E to nie możesz tych tablic umieszczać w pamięci Flash.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 7 gru 2015, o 18:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marian43]]></name></author>
<updated>2015-12-07T16:38:57+01:00</updated>
<published>2015-12-07T16:38:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147311#p147311</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147311#p147311"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147311#p147311"><![CDATA[
Myślę, że jest ok.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12053">marian43</a> — 7 gru 2015, o 16:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2015-12-07T15:32:49+01:00</updated>
<published>2015-12-07T15:32:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147307#p147307</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147307#p147307"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147307#p147307"><![CDATA[
A sprawdziłeś jakie masz deklaracje lcd_defchar?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 7 gru 2015, o 15:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marian43]]></name></author>
<updated>2015-12-07T15:22:12+01:00</updated>
<published>2015-12-07T15:22:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147304#p147304</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147304#p147304"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147304#p147304"><![CDATA[
Zmieniłem na:<br />[syntax=c]uint8_t const tab1&#91;&#93; PROGMEM = {31,16,16,30,16,16,31,6}; // Ę<br />uint8_t const tab2&#91;&#93; PROGMEM = {4,31,16,31,1,1,31,32}; //Ś<br />uint8_t const tab3&#91;&#93; PROGMEM = {8,8,10,12,8,24,15,32};            // Ł<br />lcd_defchar(0x80, tab1);<br />lcd_defchar_P(0x81, tab2 );<br />lcd_defchar_E(0x82, tab3 );[/syntax]<br /><br />podkreśla wszystkie defchar'y na czerwono. <br />I generuje błędy:<br /><br />[syntax=c]avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega8 -DF_CPU=8000000UL -MMD -MP -MF&quot;main.d&quot; -MT&quot;main.o&quot; -c -o &quot;main.o&quot; &quot;../main.c&quot;<br />../main.c:14:13: error: expected declaration specifiers or '...' before numeric constant<br /> lcd_defchar(0x80, tab1);<br />             ^<br />../main.c:14:19: error: expected declaration specifiers or '...' before 'tab1'<br /> lcd_defchar(0x80, tab1);<br />                   ^<br />../main.c:15:15: error: expected declaration specifiers or '...' before numeric constant<br /> lcd_defchar_P(0x81, tab2 );<br />               ^<br />../main.c:15:21: error: expected declaration specifiers or '...' before 'tab2'<br /> lcd_defchar_P(0x81, tab2 );<br />                     ^<br />../main.c:16:15: error: expected declaration specifiers or '...' before numeric constant<br /> lcd_defchar_E(0x82, tab3 );<br />               ^<br />../main.c:16:21: error: expected declaration specifiers or '...' before 'tab3'<br /> lcd_defchar_E(0x82, tab3 );<br />                     ^<br />make: *** &#91;main.o&#93; Błąd 1[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12053">marian43</a> — 7 gru 2015, o 15:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2015-12-07T14:52:37+01:00</updated>
<published>2015-12-07T14:52:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147300#p147300</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147300#p147300"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147300#p147300"><![CDATA[
A czy może nie powinieneś mieć:<br />[syntax=c]uint8_t const tab2&#91;&#93; PROGMEM = {4,31,16,31,1,1,31,32};    //Ś[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 7 gru 2015, o 14:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marian43]]></name></author>
<updated>2015-12-07T13:23:45+01:00</updated>
<published>2015-12-07T13:23:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147287#p147287</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147287#p147287"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147287#p147287"><![CDATA[
Nic mi to nie mówi odnośnie mojego przypadku. Może jestem zbyt tępy.. Ale zauważyłem jedno.. :<br /><br />Fragment z lcd44780.h :<br /><br />[syntax=c]void lcd_locate(uint8_t y, uint8_t x);// domyślnie WŁĄCZONA z kompilacji w pliku lcd.c<br /><br />void lcd_char(char c);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_str_P(const char * str);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_str_E(char * str);// domyślnie wyłączona z kompilacji w pliku lcd.c<br />void lcd_int(int val);[/syntax]<br /><br />Widzę, że tu już jest składnia ' void lcd_str_P(const char * str); ' opisana na blogu..<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12053">marian43</a> — 7 gru 2015, o 13:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2015-12-07T11:44:48+01:00</updated>
<published>2015-12-07T11:44:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147278#p147278</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147278#p147278"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147278#p147278"><![CDATA[
Poczytaj to na blogu Mirka. Powinno Ci pomóc<br /><a href="http://mirekk36.blogspot.com/2012/08/eclipse-kopot-z-pstr-przeczytaj.html"  class="postlink">http://mirekk36.blogspot.com/2012/08/eclipse-kopot-z-pstr-przeczytaj.html</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 7 gru 2015, o 11:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marian43]]></name></author>
<updated>2015-12-07T11:23:45+01:00</updated>
<published>2015-12-07T11:23:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147277#p147277</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147277#p147277"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147277#p147277"><![CDATA[
Serdeczne dzięki nie zauważyłem tego.. teraz działa, muszę sobie to utrwalić żeby takich błędów nie popełniać. Chciałem jeszcze zmienić sobie trzy słowa aby użyć w nich polskich znaków. Nie umiem sobie z tym poradzić. Wygenerowałem sobie wg generatora fontów Ę, Ś i Ł. Zapisałem w programie w postaci jak na BB lecz traktuje to jako błąd. Ktoś domyśla się o co może chodzić?<br /><br />[syntax=c]uint8_t tab1&#91;&#93; = {31,16,16,30,16,16,31,6}; //Ę<br />uint8_t tab2&#91;&#93; = {4,31,16,31,1,1,31,32};    //Ś<br />uint8_t tab3&#91;&#93; = {8,8,10,12,8,24,15,32};    //Ł<br />lcd_defchar(0x80, tab1);<br />lcd_defcharP(0x81, tab2 );<br />lcd_defchar_E(0x82, tab3 );[/syntax]<br /><br />[syntax=c]&#91;lcd_locate(1,0);<br />cd_str(&quot;CI&quot;&quot;\x81&quot;&quot;NIENIOWEGO&quot;);<br />_delay_ms(2500);[/syntax]<br /><br /><br /><br /><br /><br />BŁĘDY:<br />[syntax=c]avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega8 -DF_CPU=8000000UL -MMD -MP -MF&quot;main.d&quot; -MT&quot;main.o&quot; -c -o &quot;main.o&quot; &quot;../main.c&quot;<br />../main.c:14:13: error: expected declaration specifiers or '...' before numeric constant<br /> lcd_defchar(0x80, tab1);<br />             ^<br />../main.c:14:19: error: expected declaration specifiers or '...' before 'tab1'<br /> lcd_defchar(0x80, tab1);<br />                   ^<br />../main.c:15:14: error: expected declaration specifiers or '...' before numeric constant<br /> lcd_defcharP(0x81, tab2 );<br />              ^<br />../main.c:15:20: error: expected declaration specifiers or '...' before 'tab2'<br /> lcd_defcharP(0x81, tab2 );<br />                    ^<br />../main.c:16:15: error: expected declaration specifiers or '...' before numeric constant<br /> lcd_defchar_E(0x82, tab3 );<br />               ^<br />../main.c:16:21: error: expected declaration specifiers or '...' before 'tab3'<br /> lcd_defchar_E(0x82, tab3 );<br />                     ^<br />make: *** &#91;main.o&#93; Błąd 1[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12053">marian43</a> — 7 gru 2015, o 11:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2015-12-06T21:35:23+01:00</updated>
<published>2015-12-06T21:35:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147251#p147251</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147251#p147251"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147251#p147251"><![CDATA[
Druga linia jest pusta bo temperatura wyświetlana jest co ok. 3s a co 600ms ekran jest czyszczony. Po wyświetleniu temperatury program przechodzi na początek pętli while gdzie po wykonaniu pomiaru wyświetlacz zostaje wyczyszczony. <br />Trochę zmieniłem program i druga linia mi się wyświetla<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;lcd44780.h&quot;<br />#include &lt;avr/eeprom.h&gt;<br />#include &quot;1WIRE/ds18x20.h&quot;<br /><br /><br /><br />typedef struct {<br /><br />uint16_t adc_mid;<br />uint16_t ref_adc;<br />uint16_t ref_v;<br />char v1&#91;3&#93;;<br />char v2&#91;3&#93;;<br />}<br />TVOL;<br /><br />TVOL sensor_vol;<br /><br />uint16_t pomiar(uint8_t kanal);<br />void get_vol (uint16_t adc, TVOL * voltage);<br />void lcd_int(int val);<br />void lcd_locate(uint8_t y, uint8_t x);<br /><br />void display_temp(uint8_t x);<br />uint8_t czujniki_cnt;<br />volatile uint8_t s1_flag;<br />volatile uint8_t sekundy;<br /><br />uint8_t subzero, cel, cel_fract_bits;<br />uint16_t wynik=0;<br /><br /><br /><br />int main(void)<br />{<br />lcd_init();<br /><br /><br />ADMUX |= (1&lt;&lt;REFS0);<br />ADCSRA |= (1&lt;&lt;ADEN);<br />ADCSRA |= (1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0);<br /><br />sensor_vol.ref_adc = 496;<br />sensor_vol.ref_v = 242;<br /><br />TCCR2 |= (1 &lt;&lt; WGM12); // Ustawienie trybu CTC<br />TCCR2 |= (1 &lt;&lt; CS22)|(1 &lt;&lt; CS21)|(1 &lt;&lt; CS20); // prskaler 1024<br />OCR1A = 16; //<br />TIMSK |= (1 &lt;&lt; OCIE2);<br /><br /><br />   czujniki_cnt = search_sensors();<br /><br />   DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />   _delay_ms(750);<br /><br /><br />   if(DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;,&amp;subzero, &amp;cel, &amp;cel_fract_bits)) display_temp(2);<br />   else<br /><br />   {<br />   lcd_locate(1,2);<br />   lcd_str(&quot; error &quot;);<br />   }<br /><br />   sei();<br /><br />   lcd_locate(1,0);<br /><br />   lcd_str_P(PSTR(&quot; T1 &quot;));<br /><br />while(1)<br />{<br /><br />wynik = pomiar (PC0);<br />get_vol(wynik, &amp;sensor_vol);<br /><br /><br />if(s1_flag)<br />{<br />lcd_locate(0,0);<br />lcd_str(&quot;NAPIECIE:&quot; );<br />lcd_str(sensor_vol.v1);<br />lcd_str(&quot;.&quot;);<br />lcd_str(sensor_vol.v2);<br />lcd_str(&quot;&#91;V&#93;&quot;);<br /><br /><br />if( 0 == (sekundy%3) ) czujniki_cnt = search_sensors();<br /><br />if( 1 == (sekundy%3) ) DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL);<br /><br />if( 2 == (sekundy%3) )<br />{<br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;,&amp;subzero, &amp;cel, &amp;cel_fract_bits) ) display_temp(2);<br /><br />else<br />{<br />lcd_locate(1,2);<br />lcd_str(&quot; error &quot;);<br />}<br />}<br /><br />s1_flag = 0;<br />}<br />}<br /><br />}<br /><br />uint16_t pomiar(uint8_t kanal)<br />{<br /><br />ADMUX = (ADMUX &amp; 0xF8) | kanal;<br />ADCSRA |= (1&lt;&lt;ADSC);<br />while( ADCSRA &amp; (1&lt;&lt;ADSC));<br />return ADCW;<br />}<br /><br /><br /><br />void get_vol (uint16_t adc, TVOL * voltage)<br />{<br /><br />uint16_t wynik = (adc * (uint32_t)voltage-&gt;ref_v) / (voltage-&gt;ref_adc);<br />div_t divmod = div(wynik, 100);<br />itoa( divmod.quot, voltage-&gt;v1, 10);<br />itoa( divmod.rem, voltage-&gt;v2, 10);<br /><br />if (divmod.rem &lt; 10 ){<br /><br />voltage-&gt;v2&#91;0&#93;='0';<br />voltage-&gt;v2&#91;1&#93;=divmod.rem+'0';<br />}<br /><br />voltage-&gt;v1&#91;2&#93;=0;<br />voltage-&gt;v2&#91;2&#93;=0;<br /><br /><br />}<br /><br />void display_temp(uint8_t x)<br />{<br />lcd_locate(1,x);<br /><br />if(subzero) lcd_str(&quot;-&quot;);<br /><br />else lcd_str(&quot; &quot;);<br />lcd_int(cel);<br />lcd_str(&quot;.&quot;);<br />lcd_int(cel_fract_bits);<br />lcd_str(&quot; C &quot;);<br />}<br /><br /><br /><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 />A tak poza tym to niepotrzebnie w pętli while używasz polecenia sei(). Po co z każdym obiegiem włączać przerwanie skoro już wcześniej zostały włączone.<br /><br />No i ten paskudny delay. Jeśli chcesz aby pomiar był wykonywany co 600ms to zamiast delaya wykorzystaj timer programowy tak jak to jest zrobione w przypadku pomiaru temperatury.<br />Ja dla testu pomiar napięcia wsadziłem w ten sam timer programowy co pomiar temperatury.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 6 gru 2015, o 21:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2015-12-06T17:50:16+01:00</updated>
<published>2015-12-06T17:50:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147207#p147207</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147207#p147207"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147207#p147207"><![CDATA[
Witam ponownie.<br />Spróbuj może wyświetlić cokolwiek w 2 linii wyświetlacza, być może masz wyświetlacz, który ma inny adres 2 linii w jego pamięci.<br /><br />Pozdrawiam, QuadMan.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 6 gru 2015, o 17:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marian43]]></name></author>
<updated>2015-12-06T17:26:18+01:00</updated>
<published>2015-12-06T17:26:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147204#p147204</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147204#p147204"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147204#p147204"><![CDATA[
Witam, dzięki za wskazówki. Też zauważyłem to godzinkę przed Tobą. Kompilacja bezbłędna, lecz póki co działa mi tylko voltomierz.<br />W 1 linijce LCD wyświetla mi napiecie, lecz druga jest pusta. Nie wiem czy problem polega na wyświetlaniu czy samym pomiarze temperatury. Na obecny stan:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;lcd44780.h&quot;<br />#include &lt;avr/eeprom.h&gt;<br />#include &quot;1WIRE/ds18x20.h&quot;<br /><br /><br /><br />typedef struct {<br /><br />        uint16_t adc_mid;<br />        uint16_t ref_adc;<br />        uint16_t ref_v;<br />        char v1&#91;3&#93;;<br />        char v2&#91;3&#93;;<br />}<br />TVOL;<br /><br />TVOL sensor_vol;<br /><br />uint16_t pomiar(uint8_t kanal);<br />void get_vol (uint16_t adc, TVOL * voltage);<br />void lcd_int(int val);<br />void lcd_locate(uint8_t y, uint8_t x);<br /><br />void display_temp(uint8_t x);<br />uint8_t czujniki_cnt;<br />volatile uint8_t s1_flag;<br />volatile uint8_t sekundy;<br /><br />uint8_t subzero, cel, cel_fract_bits;<br />uint16_t wynik=0;<br /><br /><br /><br />int main(void) {<br /><br /><br />        lcd_init();<br /><br /><br />        ADMUX |= (1&lt;&lt;REFS0);<br />        ADCSRA |= (1&lt;&lt;ADEN);<br />        ADCSRA |= (1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0);<br /><br />        sensor_vol.ref_adc = 496;<br />        sensor_vol.ref_v = 242;<br /><br />        TCCR2 |= (1 &lt;&lt; WGM12); // Ustawienie trybu CTC<br />        TCCR2 |= (1 &lt;&lt; CS22)|(1 &lt;&lt; CS21)|(1 &lt;&lt; CS20); // prskaler 1024<br />        OCR1A = 16; //<br />        TIMSK |= (1 &lt;&lt; OCIE2);<br /><br /><br />                       czujniki_cnt = search_sensors();<br /><br />                       DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />                       _delay_ms(750);<br /><br /><br />                       if(DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;,&amp;subzero, &amp;cel, &amp;cel_fract_bits)) display_temp(2);<br />                       else<br /><br />                       {<br />                                                       lcd_locate(1,9);<br />                                                       lcd_str(&quot;error&quot;);<br />                                               }<br /><br />                       sei();<br /><br />                       lcd_locate(1,0);<br /><br />                       lcd_str_P(PSTR(&quot; T1 &quot;));<br /><br /><br /><br /><br /><br /><br />        while(1) {<br /><br />                wynik = pomiar (PC0);<br />                get_vol(wynik, &amp;sensor_vol);<br /><br />                sei();<br /><br />                lcd_cls();<br />                lcd_str(&quot;NAPIECIE:&quot; );<br />                lcd_str(sensor_vol.v1);<br />                lcd_str(&quot;.&quot;);<br />                lcd_str(sensor_vol.v2);<br />                lcd_str(&quot;&#91;V&#93;&quot;);<br />                _delay_ms(600);<br /><br /><br /><br /><br />                if(s1_flag) {<br /><br />                        if( 0 == (sekundy%3) ) czujniki_cnt = search_sensors();<br /><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(2);<br /><br />                                else {<br />                                        lcd_locate(1,9);<br />                                        lcd_str(&quot; error&quot;);<br />                                }<br />                        }<br /><br />                        s1_flag = 0;<br />                }<br />        }<br /><br /><br /><br />}<br /><br />uint16_t pomiar(uint8_t kanal) {<br /><br />        ADMUX = (ADMUX &amp; 0xF8) | kanal;<br />        ADCSRA |= (1&lt;&lt;ADSC);<br />        while( ADCSRA &amp; (1&lt;&lt;ADSC));<br />        return ADCW;<br />     }<br /><br /><br /><br />        void get_vol (uint16_t adc, TVOL * voltage) {<br /><br />                uint16_t wynik = (adc * (uint32_t)voltage-&gt;ref_v) / (voltage-&gt;ref_adc);<br />                div_t divmod = div(wynik, 100);<br />                itoa( divmod.quot, voltage-&gt;v1, 10);<br />                itoa( divmod.rem, voltage-&gt;v2, 10);<br /><br />                if (divmod.rem &lt; 10 ){<br /><br />                        voltage-&gt;v2&#91;0&#93;='0';<br />                        voltage-&gt;v2&#91;1&#93;=divmod.rem+'0';<br />                }<br /><br />                voltage-&gt;v1&#91;2&#93;=0;<br />                voltage-&gt;v2&#91;2&#93;=0;<br /><br /><br />        }<br /><br />        void display_temp(uint8_t x) {<br />                        lcd_locate(1,x);<br /><br />                        if(subzero) lcd_str(&quot;-&quot;);<br /><br />                        else lcd_str(&quot; &quot;);<br />                        lcd_int(cel);<br />                        lcd_str(&quot;.&quot;);<br />                        lcd_int(cel_fract_bits);<br />                        lcd_str(&quot; C &quot;);<br />        }<br /><br /><br /><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]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12053">marian43</a> — 6 gru 2015, o 17:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2015-12-06T16:34:42+01:00</updated>
<published>2015-12-06T16:34:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147198#p147198</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147198#p147198"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147198#p147198"><![CDATA[
Witam ponownie.<br /><br />Mój błąd, nie zauważyłem wcześniej tej deklaracji i szczerze Ci powiem, że w takim razie nie mam pojęcia o co chodzi.<br /><br />Pozdrawiam, QuadMan.<br /><br />DOPISANE: U Ciebie funkcja pomiar(...) znajduje się wewnątrz pętli funkcji main() i to dlatego. Wcześniej tego nie zauważyłem. Aha, i usuń:[syntax=c]#include &lt;avr/delay.h&gt;[/syntax] i to drugie sei() - z pętli while(1).<br />Po tych modyfikacjach Twój program kompiluje się bez błędów i ostrzeżeń, niestety nie mam możliwości sprawdzenia, czy działa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 6 gru 2015, o 16:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marian43]]></name></author>
<updated>2015-12-06T13:06:02+01:00</updated>
<published>2015-12-06T13:06:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147172#p147172</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147172#p147172"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147172#p147172"><![CDATA[
Pomyślałem od tym na samym początku, ale w 24 linii jest deklaracja funkcji pomiar.<br /><div class="quotetitle">QuadMan napisał(a):</div><div class="quotecontent"><br />Witam,<br /><br />Brakuje Ci deklaracji funkcji &quot;pomiar(...)&quot;. Zastanów się, jak kompilator ma znaleźć funkcję do której się odwołujesz wcześniej ( w linii 84), niż ją zdefiniowałeś ( w linii 118) ?<br />Po prostu, przed funkcją main() ( na przykład w linii 37)  umieść:[syntax=c]uint16_t pomiar(uint8_t kanal);[/syntax]<br /><br />Pozdrawiam, QuadMan.<br /></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12053">marian43</a> — 6 gru 2015, o 13:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2015-12-06T03:06:31+01:00</updated>
<published>2015-12-06T03:06:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147157#p147157</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147157#p147157"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147157#p147157"><![CDATA[
Witam,<br /><br />Brakuje Ci deklaracji funkcji &quot;pomiar(...)&quot;. Zastanów się, jak kompilator ma znaleźć funkcję do której się odwołujesz wcześniej ( w linii 84), niż ją zdefiniowałeś ( w linii 118) ?<br />Po prostu, przed funkcją main() ( na przykład w linii 37)  umieść:[syntax=c]uint16_t pomiar(uint8_t kanal);[/syntax]<br /><br />Pozdrawiam, QuadMan.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 6 gru 2015, o 03:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marian43]]></name></author>
<updated>2015-12-06T00:35:13+01:00</updated>
<published>2015-12-06T00:35:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147155#p147155</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147155#p147155"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147155#p147155"><![CDATA[
Co nieco uporządkowałem. Generuje błąd (undefinied reference to 'pomiar'). <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/delay.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;lcd44780.h&quot;<br />#include &lt;avr/eeprom.h&gt;<br />#include &quot;1WIRE/ds18x20.h&quot;<br /><br /><br /><br />typedef struct {<br /><br />        uint16_t adc_mid;<br />        uint16_t ref_adc;<br />        uint16_t ref_v;<br />        char v1&#91;3&#93;;<br />        char v2&#91;3&#93;;<br />}TVOL;<br /><br />TVOL sensor_vol;<br /><br />uint16_t pomiar(uint8_t kanal);<br />void get_vol (uint16_t adc, TVOL * voltage);<br />void lcd_int(int val);<br />void lcd_locate(uint8_t y, uint8_t x);<br /><br />void display_temp(uint8_t x);<br />uint8_t czujniki_cnt;<br />volatile uint8_t s1_flag;<br />volatile uint8_t sekundy;<br /><br />uint8_t subzero, cel, cel_fract_bits;<br />uint16_t wynik=0;<br /><br /><br /><br />int main(void) {<br /><br /><br />        lcd_init();<br /><br /><br />        ADMUX |= (1&lt;&lt;REFS0);<br />        ADCSRA |= (1&lt;&lt;ADEN);<br />        ADCSRA |= (1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0);<br /><br />        sensor_vol.ref_adc = 496;<br />        sensor_vol.ref_v = 242;<br /><br />        TCCR2 |= (1 &lt;&lt; WGM12); // Ustawienie trybu CTC<br />        TCCR2 |= (1 &lt;&lt; CS22)|(1 &lt;&lt; CS21)|(1 &lt;&lt; CS20); // prskaler 1024<br />        OCR1A = 16; //<br />        TIMSK |= (1 &lt;&lt; OCIE2);<br /><br /><br />                       czujniki_cnt = search_sensors();<br /><br />                       DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />                       _delay_ms(750);<br /><br /><br />                       if(DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;,&amp;subzero, &amp;cel, &amp;cel_fract_bits)) display_temp(2);<br />                       else<br /><br />                       {<br />                                                       lcd_locate(1,9);<br />                                                       lcd_str(&quot;error&quot;);<br />                                               }<br /><br /><br /><br />        sei();<br /><br />        lcd_locate(1,0);<br /><br />        lcd_str_P(PSTR(&quot; T1 &quot;));<br /><br /><br />        while(1) {<br /><br />                wynik = pomiar (PC0);<br />                get_vol(wynik, &amp;sensor_vol);<br /><br />                sei();<br /><br />                lcd_cls();<br />                lcd_str(&quot;NAPIECIE:&quot; );<br />                lcd_str(sensor_vol.v1);<br />                lcd_str(&quot;.&quot;);<br />                lcd_str(sensor_vol.v2);<br />                lcd_str(&quot;&#91;V&#93;&quot;);<br />                _delay_ms(600);<br /><br /><br />                if(s1_flag) {<br /><br />                        if( 0 == (sekundy%3) ) czujniki_cnt = search_sensors();<br /><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(2);<br /><br />                                else {<br />                                        lcd_locate(1,9);<br />                                        lcd_str(&quot; error&quot;);<br />                                }<br />                        }<br /><br />                        s1_flag = 0;<br />                }<br />        }<br /><br /><br />uint16_t pomiar(uint8_t kanal) {<br /><br />        ADMUX = (ADMUX &amp; 0xF8) | kanal;<br />        ADCSRA |= (1&lt;&lt;ADSC);<br />        while( ADCSRA &amp; (1&lt;&lt;ADSC));<br />        return ADCW;<br />     }<br />}<br />        void get_vol (uint16_t adc, TVOL * voltage) {<br /><br />                uint16_t wynik = (adc * (uint32_t)voltage-&gt;ref_v) / (voltage-&gt;ref_adc);<br />                div_t divmod = div(wynik, 100);<br />                itoa( divmod.quot, voltage-&gt;v1, 10);<br />                itoa( divmod.rem, voltage-&gt;v2, 10);<br /><br />                if (divmod.rem &lt; 10 ){<br /><br />                        voltage-&gt;v2&#91;0&#93;='0';<br />                        voltage-&gt;v2&#91;1&#93;=divmod.rem+'0';<br />                }<br /><br />                voltage-&gt;v1&#91;2&#93;=0;<br />                voltage-&gt;v2&#91;2&#93;=0;<br /><br /><br />        }<br /><br />        void display_temp(uint8_t x) {<br />                        lcd_locate(1,x);<br /><br />                        if(subzero) lcd_str(&quot;-&quot;);<br /><br />                        else lcd_str(&quot; &quot;);<br />                        lcd_int(cel);<br />                        lcd_str(&quot;.&quot;);<br />                        lcd_int(cel_fract_bits);<br />                        lcd_str(&quot; C &quot;);<br />        }<br /><br /><br /><br />        ISR(TIMER0_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]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12053">marian43</a> — 6 gru 2015, o 00:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafał555]]></name></author>
<updated>2015-12-05T23:29:15+01:00</updated>
<published>2015-12-05T23:29:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147153#p147153</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147153#p147153"/>
<title type="html"><![CDATA[Re: Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147153#p147153"><![CDATA[
No ładnie posklejałeś sobie dwa programy  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> . <br />&quot;sei();&quot;  daj przed pętlę while.<br />Tą drugą pętlę while(1) skasuj, a zawartość wrzuć do pierwszej.<br /> To na początek, żeby jakoś to ogarnąć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2697">Rafał555</a> — 5 gru 2015, o 23:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marian43]]></name></author>
<updated>2015-12-05T22:53:29+01:00</updated>
<published>2015-12-05T22:53:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147148#p147148</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147148#p147148"/>
<title type="html"><![CDATA[Pomiar temperatury DS18b20]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13779&amp;p=147148#p147148"><![CDATA[
Witam, jako że jestem początkującym proszę o wytknięcie mi błędu w kodzie. Pewnie coś &quot;pokręciłem&quot;. Wzorowałem się na BB oraz filmikach na YT od Pana Mirka. Mam lcd 16x2 i działający voltomierz. Napięcie wyświetla mi się w 1 linijce, w drugiej linii wyświetlacza chciałbym wyświetlać temperaturę. W BB jest kod opisany na Atmega32 i wykorzystane dwa czujniki na 1wire.<br />Ja potrzebuję tylko jeden i mam na atmega8, pozmieniałem &quot;według siebie&quot; i noty aplikacyjnej. Wgrywałem kod i kompilowałem (błędów nie ma). W każdym razie voltomierz mi działa, ale temperatura nie wyswietla się. Czujnik podłączony na 100% dobrze. Pin PB1 ustawiony również w onewire.h według BB. Z góry dzięki.<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/delay.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;lcd44780.h&quot;<br />#include &lt;avr/eeprom.h&gt;<br />#include &quot;1WIRE/ds18x20.h&quot;<br /><br /><br /><br /><br /><br /><br /><br />typedef struct {<br /><br />uint16_t adc_mid;<br />uint16_t ref_adc;<br />uint16_t ref_v;<br />char v1&#91;3&#93;;<br />char v2&#91;3&#93;;<br />}TVOL;<br /><br />TVOL sensor_vol;<br /><br />uint16_t pomiar(uint8_t kanal);<br />void get_vol (uint16_t adc, TVOL * voltage);<br />void lcd_int(int val);<br /><br />void display_temp(uint8_t x);<br />uint8_t czujniki_cnt;<br />volatile uint8_t s1_flag;<br />volatile uint8_t sekundy;<br /><br />uint8_t subzero, cel, cel_fract_bits;<br />uint16_t wynik=0;<br /><br /><br /><br />int main(void) {<br /><br /><br />lcd_init();<br /><br />// ------------------------------------------voltomierz-----------------------------------------------------------//<br />ADMUX |= (1&lt;&lt;REFS0);<br />ADCSRA |= (1&lt;&lt;ADEN);<br />ADCSRA |= (1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0);<br /><br />sensor_vol.ref_adc = 496;<br />sensor_vol.ref_v = 242;<br /><br />while(1) {<br /><br />wynik = pomiar (PC0);<br />get_vol(wynik, &amp;sensor_vol);<br /><br />sei();<br /><br />lcd_cls();<br />lcd_str(&quot;NAPIECIE: &quot; );<br />lcd_str(sensor_vol.v1);<br />lcd_str(&quot;.&quot;);<br />lcd_str(sensor_vol.v2);<br />lcd_str(&quot;&#91;V&#93;&quot;);<br />_delay_ms(600);<br /><br />}<br />//----------------temp-------------------------------------//<br /><br /> TCCR2 |= (1 &lt;&lt; WGM12); // Ustawienie trybu CTC<br /> TCCR2 |= (1 &lt;&lt; CS22)|(1 &lt;&lt; CS21)|(1 &lt;&lt; CS20); // prskaler 1024<br /> OCR1A = 16; // Przepełnienie co około 4 milisekundy dzięki temu<br /> TIMSK |= (1 &lt;&lt; OCIE2);<br /><br /><br />czujniki_cnt = search_sensors();<br /><br />DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );<br /><br />_delay_ms(750);<br /><br /><br />if(DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;,&amp;subzero, &amp;cel, &amp;cel_fract_bits)) display_temp(2);<br />else<br /><br />{<br />lcd_locate(1,9);<br />lcd_str(&quot;error&quot;);<br />}<br />sei();<br /><br />lcd_locate(1,0);<br /><br />lcd_str_P(PSTR(&quot; T1 &quot;));<br /><br />while(1)<br />{<br />if(s1_flag) {<br /><br />if( 0 == (sekundy%3) ) czujniki_cnt = search_sensors();<br /><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(2);<br /><br />else {<br />lcd_locate(1,9);<br />lcd_str(&quot; error&quot;);<br />}<br />}<br /><br />s1_flag = 0;<br />}<br />}<br /><br />}<br /><br /><br /><br /><br /><br /><br /><br />uint16_t pomiar(uint8_t kanal) {<br /><br />ADMUX = (ADMUX &amp; 0xF8) | kanal;<br />ADCSRA |= (1&lt;&lt;ADSC);<br />while( ADCSRA &amp; (1&lt;&lt;ADSC));<br />return ADCW;<br />}<br /><br />void get_vol (uint16_t adc, TVOL * voltage) {<br /><br />uint16_t wynik = (adc * (uint32_t)voltage-&gt;ref_v) / (voltage-&gt;ref_adc);<br />div_t divmod = div(wynik, 100);<br />itoa( divmod.quot, voltage-&gt;v1, 10);<br />itoa( divmod.rem, voltage-&gt;v2, 10);<br /><br />if (divmod.rem &lt; 10 ){<br /><br />voltage-&gt;v2&#91;0&#93;='0';<br />voltage-&gt;v2&#91;1&#93;=divmod.rem+'0';<br />}<br /><br />voltage-&gt;v1&#91;2&#93;=0;<br />voltage-&gt;v2&#91;2&#93;=0;<br /><br /><br />}<br /><br />void display_temp(uint8_t x) {<br />lcd_locate(1,x);<br /><br />if(subzero) lcd_str(&quot;-&quot;);<br /><br />else lcd_str(&quot; &quot;);<br />lcd_int(cel);<br />lcd_str(&quot;.&quot;);<br />lcd_int(cel_fract_bits);<br />lcd_str(&quot; C &quot;);<br />}<br /><br /><br /><br />ISR(TIMER0_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]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12053">marian43</a> — 5 gru 2015, o 22:53</p><hr />
]]></content>
</entry>
</feed>