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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-06-29T07:41:24+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7592&amp;mode</id>
<entry>
<author><name><![CDATA[Waszek]]></name></author>
<updated>2014-06-29T07:41:24+01:00</updated>
<published>2014-06-29T07:41:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86037#p86037</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86037#p86037"/>
<title type="html"><![CDATA[Re: Problem z funkcjami if]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86037#p86037"><![CDATA[
Ze swojej strony, może czysto technicznie, ale nie operować na zmiennych typu double, bo to marnowanie pamięci, a zmienić na uint, przecież nie ustawiamy temperatury na 21,53455435 i 21,345354345 st. Celsjusza <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Wtedy program będzie bardziej optymalny <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=2204">Waszek</a> — 29 cze 2014, o 07:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tadex0]]></name></author>
<updated>2014-06-28T21:55:26+01:00</updated>
<published>2014-06-28T21:55:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86024#p86024</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86024#p86024"/>
<title type="html"><![CDATA[Re: Problem z funkcjami if]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86024#p86024"><![CDATA[
Tak wiem bo nie kopiowałem tego z programu tylko pisałem z ręki, ale chodzi o kwestię wyłączenia.<br />Należało dodać:<br />[syntax=c]if (alarm &gt; tempc)[/syntax]<br />przed tymi dwoma ifami ponieważ pomimo że włączyliśmy BEP to w następnym kroku został on wyłączony i tak w kółko.<br />Jeszcze raz Dziękuję.<br /><br />Została jeszcze Histereza i Menu bo mam Przez BIT_IS_CLEAR czyli trzeba trzymać przycisk aby wyświetlało się podmenu i projekt będzie skończony.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4930">tadex0</a> — 28 cze 2014, o 21:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-06-28T21:11:49+01:00</updated>
<published>2014-06-28T21:11:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86016#p86016</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86016#p86016"/>
<title type="html"><![CDATA[Re: Problem z funkcjami if]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86016#p86016"><![CDATA[
Najlepiej jak rozpiszesz sobie na kartce dane:<br />[syntax=c]double za=25.0;  //temperatura zadana<br />double alarm=80.0; //temperatura maksymalna<br /><br />double tempd; //temperatura dom np. 20, 30<br />double tempc; //temperatura C.O. np. 15, 40, 90[/syntax]<br />i przyjmiesz wszystkie możliwe kombinacje i prześledzisz sprawdzanie tych warunków.<br />PS.<br /><div class="quotetitle">tadex0 napisał(a):</div><div class="quotecontent"><br />[syntax=c]else {PORTC &amp;= ~(1&lt;&lt;BEEP); PORTC &amp;= ~(1&lt;&lt;BEEP);}// załączanie alarmu[/syntax]<br /></div><br />2 razy masz BEEP<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 28 cze 2014, o 21:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tadex0]]></name></author>
<updated>2014-06-28T20:46:51+01:00</updated>
<published>2014-06-28T20:46:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86012#p86012</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86012#p86012"/>
<title type="html"><![CDATA[Re: Problem z funkcjami if]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86012#p86012"><![CDATA[
Aby nie było tak prosto to chciałem razem z alarmem włączyć cyrkulacje czyli do ifa dodajemy jeszcze BEP jak poniżej- efekt ta dioda BEP miga jak na początku tematu:<br /><br />[syntax=c]if (tempc  &gt; alarm) {PORTC |= (1&lt;&lt;BEEP); PORTC |= (1&lt;&lt;BEP);} else {PORTC &amp;= ~(1&lt;&lt;BEEP); PORTC &amp;= ~(1&lt;&lt;BEEP);}// załączanie alarmu[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4930">tadex0</a> — 28 cze 2014, o 20:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tadex0]]></name></author>
<updated>2014-06-28T19:32:04+01:00</updated>
<published>2014-06-28T19:32:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86008#p86008</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86008#p86008"/>
<title type="html"><![CDATA[Re: Problem z funkcjami if]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86008#p86008"><![CDATA[
Przeróbka zrobiona ale temperatura na co wynosi 1996.5<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 33 minutach ]</span></strong><br /><br />Mój błąd wypinałem dsa bo testowałem na 4m kablu i źle wpiołem o jeden pin. Teraz temp są ok tylko dioda (BEP) nigddy nie gaśnie.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 38 minutach ]</span></strong><br /><br />To znaczy jak już się zapali raz to już nie gaśnie.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 48 minutach ]</span></strong><br /><br />Ok poradziłem sobie, nie dostrzegłem, że else od BEP było w drugim ifie a powinno być w pierwszym. Dziękuję za pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4930">tadex0</a> — 28 cze 2014, o 19:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-06-28T19:24:10+01:00</updated>
<published>2014-06-28T19:24:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86007#p86007</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86007#p86007"/>
<title type="html"><![CDATA[Re: Problem z funkcjami if]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86007#p86007"><![CDATA[
Zamień:<br />[syntax=c]{if (tempc &gt; tempd)PORTC = (1&lt;&lt;BEP); else PORTC = (0&lt;&lt;BEP);}// załączanie cyrkulacji<br /> <br />//jeżeli teperatura na piecu co jest większa od alarmu to zapal diodę BEEP<br />if (tempc  &gt; alarm) PORTC = (1&lt;&lt;BEEP); else PORTC = (0&lt;&lt;BEEP);// załączanie alarmu[/syntax]<br />na:<br />[syntax=c]{if (tempc &gt; tempd)PORTC |= (1&lt;&lt;BEP); else PORTC &amp;= ~(1&lt;&lt;BEP);}// załączanie cyrkulacji<br /> <br />//jeżeli temperatura na piecu co jest większa od alarmu to zapal diodę BEEP<br />if (tempc  &gt; alarm) PORTC |= (1&lt;&lt;BEEP); else PORTC &amp;= ~(1&lt;&lt;BEEP);// załączanie alarmu[/syntax]<br />a czemu tak to już kolega Zaba się wypowiedział.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 28 cze 2014, o 19:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tadex0]]></name></author>
<updated>2014-06-28T19:02:04+01:00</updated>
<published>2014-06-28T19:02:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86006#p86006</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86006#p86006"/>
<title type="html"><![CDATA[Re: Problem z funkcjami if]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86006#p86006"><![CDATA[
Cały kod:<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 03-05-2014<br /> *      Author: Tadeusz<br /> *<br /> */<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;ds18b20.h&quot;<br />#include &quot;ds18b202.h&quot;<br /><br />#defineBEP PC0<br />#defineBEEP PC1<br />//<br />#define LCD  PORTB<br />#define E  3<br />#define RS  2<br />//<br />#define SET_E   LCD |= _BV(E)<br />#define CLR_E   LCD &amp;= ~_BV(E)<br />//<br />#define SET_RS  LCD |= _BV(RS)<br />#define CLR_RS  LCD &amp;= ~_BV(RS)<br /><br />char str&#91;17&#93;=&quot;fxdf&quot;;// W tablicy będą formowane komunikaty tekstowe wysyłane do wyświetlacza<br /><br />void waitms(char x)// funkcja opóźniająca o x*1ms<br />{<br />unsigned char a, b; // zmnienne licznikowe<br />for( ; x &gt; 0; --x) // ta pętla zostanie wykonana x-razy<br />  for(b = 10; b &gt; 0; --b) // a ta 10 razy<br />for(a = 100; a &gt; 0; --a) // natomiast ta 100 razy<br />__asm(&quot;nop&quot;); // dodatkowa instrukcja opóźniająca o 1 cykl, razem to da opóźnienie ok. x * 1ms, x od 0 do 255<br />}<br /><br />void write_to_lcd(char x)// pcodedura zapisu bajtu do wyświetlacza LCD, bez rozróżnienia instrukcja/dana<br />{<br />SET_E; // ustaw na E stan wysoki<br />LCD = ((LCD &amp; 0x0F) | (x &amp; 0xF0)); // zapis pierwszej połówki bajtu<br />CLR_E; // opadające zbocze na E -&gt; zapis do wyświetlacza<br />SET_E; // ustaw na E stan wysoki<br />LCD = ((LCD &amp; 0x0F) | ((x &amp; 0x0F) &lt;&lt; 4)); // zapis drugiej połowki bajtu<br />CLR_E; // opadające zbocze na E -&gt; zapis do wyświetlacza<br />waitms(1); // czekaj 1ms<br />}<br /><br />void write_command(char x)// procedura zapisu instrukcji do wyświetlacza LCD<br />{<br />CLR_RS; // niski stan na RS -&gt; zapis instrukcji<br />write_to_lcd(x); // zapis do LCD<br />}<br /><br />void write_char(char x)// procedura zapisu danej do wyświetlacza LCD<br />{<br />SET_RS; // wysoki stan na RS -&gt; zapis danej<br />write_to_lcd(x); // zapis do LCD<br />}<br /><br />void lcd_init(void)// procedura inicjalizacji wyświetlacza LCD<br />{<br />waitms(15); // czekaj 15ms na ustabilizowanie się napięcia zasilającego<br />CLR_E; // E = 0<br />CLR_RS; // RS = 0<br />char i; // zmianna licznikowa<br />for(i = 0; i &lt; 3; i++) // trzykrotne powtórzenie bloku instrukcji<br />{<br />SET_E; // E = 1<br />LCD &amp;= 0x3F; //<br />CLR_E; // E = 0<br />waitms(5); // czekaj 5ms<br />}<br />SET_E; // E = 1<br />LCD &amp;= 0x2E; //<br />CLR_E; // E = 0<br />waitms(1); // czekaj 1ms<br />write_command(0x28); // interfejs 4-bity, 2-linie, znak 5x7<br />write_command(0x08); // wyłącz LCD, kursor i miganie<br />write_command(0x01); // czyść LCD<br />write_command(0x06); // bez przesuwania w prawo<br />write_command(0x0C); // włącz LCD, bez kursora i mrugania<br />}<br /><br />void write_text(char * str)// procedura zapisu tekstu do wyświetlacza LCD<br />{<br />while(*str) // do napotkania 0<br />  {<br />  write_char(*str); // zapisz znak wskazywany przez s na LCD<br />  str++; // zwiększ s (przygotuj nastepny znak)<br />  }<br />}<br /><br />int main(void)// program główny<br />{//PRZYCISKI<br />DDRD &amp;= ~_BV(PD0); //PC0 jako wejście<br />PORTD |= _BV(PD0); //które podciągamy do plusa<br />DDRD &amp;= ~_BV(PD1); PORTD |= _BV(PD1);<br />DDRD &amp;= ~_BV(PD2); PORTD |= _BV(PD2);<br /><br />double tempd;// Zmienna przechowuje aktualną wartość temperatury<br />double tempc;<br /><br />  unsigned char temp1&#91;9&#93;;// W tablicy zapisywane będą dane odczytane z układu ds18b20<br />  unsigned char temp2&#91;9&#93;;<br /><br />DDRC |= (1&lt;&lt;BEP); //załączanie diody<br />DDRC |= (1&lt;&lt;BEEP);<br /><br /><br />DDRB = 0xFF;// konfiguracja portów we/wy<br />DDRD = 0xFC;<br />PORTB = 0xFF;<br />PORTD = 0xF7;<br /><br /><br />lcd_init();// inicjalizacja LCD<br /><br /> double za=25.0;<br /> double alarm=80.0;<br />while(1){<br /><br />     if(ds18b20_ConvertT())// Funkcja 'ds18b20_ConvertT' wysyła do układu ds18b20 polecenie pomiaru<br />    {  ds18b20_Read(temp1);// Odczyt z układu ds18b20, dane zapisywane są w tablicy ds18b20_pad. Dwie pierwsze pozycje w tablicy to kolejno mniej znaczący bajt i bardziej znaczący bajt wartość zmierzonej temperatury<br />  tempd = ((temp1&#91;1&#93; &lt;&lt; 8) + temp1&#91;0&#93;) / 16.0 ;}//Składa dwa bajty wyniku pomiaru w całość. Cztery pierwsze bity mniej znaczącego bajtu to część ułamkowa wartości temperatury, więc całość dzielona jest przez 16<br /><br />     if(ds18b20_ConvertT2())<br />     { ds18b20_Read2(temp2);<br />  tempc = ((temp2&#91;1&#93; &lt;&lt; 8) + temp2&#91;0&#93;) / 16.0 ;}<br /><br />     if(bit_is_clear(PIND, PD2)) //ustawianie poziomu alarmu<br /> {if(bit_is_clear(PIND, PD0)) alarm=alarm+1.0;<br /> if(bit_is_clear(PIND, PD1))alarm=alarm-1.0;<br /> if (alarm &gt;=95) alarm=95;<br /> if (alarm&lt;=0) alarm=0;}<br /> else// ustawianie poziomu zalaczania<br /> {if(bit_is_clear(PIND, PD0))za=za+0.5;<br /> if(bit_is_clear(PIND, PD1))za=za-0.5;<br /> if (za &gt;=40) za=40;<br /> if (za&lt;=0)za=0;<br /> }<br />     if (tempd  &lt; za)<br />     {if (tempc &gt; tempd)PORTC = (1&lt;&lt;BEP); else PORTC = (0&lt;&lt;BEP);}// załączanie cyrkulacji<br />         if (tempc  &gt; alarm) PORTC = (1&lt;&lt;BEEP); else PORTC = (0&lt;&lt;BEEP);// załączanie alarmu<br /><br />     char wew= &quot;ZADANA       DOM&quot;;<br /> char zew= &quot;ALARM         CO&quot;;<br /><br /> if(bit_is_clear(PIND, PD2))//wybor menu<br />{write_command(0x80); _delay_us(10);<br />write_text(zew);<br />write_command(0xC0);<br />sprintf(str,&quot;%4.1f\xdf&quot;&quot;C&quot;, alarm);write_text(str); write_text(&quot;    &quot;);<br />     sprintf(str,&quot;%4.1f\xdf&quot;&quot;C&quot;, tempc); write_text(str);}<br />  else<br />{write_command(0x80); _delay_us(10);<br />write_text(wew);<br />write_command(0xC0);<br />sprintf(str,&quot;%4.1f\xdf&quot;&quot;C&quot;, za); write_text(str); write_text(&quot;    &quot;);<br />sprintf(str,&quot;%4.1f\xdf&quot;&quot;C&quot;, tempd);write_text(str);}<br /><br />  }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4930">tadex0</a> — 28 cze 2014, o 19:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nefarious19]]></name></author>
<updated>2014-06-28T18:51:15+01:00</updated>
<published>2014-06-28T18:51:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86003#p86003</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86003#p86003"/>
<title type="html"><![CDATA[Re: Problem z funkcjami if]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86003#p86003"><![CDATA[
Widzę że to Twój pierwszy posta na forum, więc Witaj serdecznie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ale...<br /><br />1) kod wstawiamy z znaczniki syntax=C<br /><br />2) gdybyś mógł to wstaw całe main.c bo to co tu wstawiłeś nie wygląda za dobrze.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2500">Nefarious19</a> — 28 cze 2014, o 18:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-06-28T18:50:11+01:00</updated>
<published>2014-06-28T18:50:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86002#p86002</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86002#p86002"/>
<title type="html"><![CDATA[Re: Problem z funkcjami if]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=86002#p86002"><![CDATA[
Witam<br /><br />Umieszczaj kod  w znacznikach <strong><span style="color: #008000">syntax=c</span></strong><br />i poczytaj to o operacjach na portach uC<br /><a href="http://mirekk36.blogspot.com/2012/01/avr-porty-wewy-dir-podstawy.html"  class="postlink">http://mirekk36.blogspot.com/2012/01/avr-porty-wewy-dir-podstawy.html</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 28 cze 2014, o 18:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tadex0]]></name></author>
<updated>2014-06-28T19:00:39+01:00</updated>
<published>2014-06-28T18:30:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=85998#p85998</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=85998#p85998"/>
<title type="html"><![CDATA[Problem z funkcjami if]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7592&amp;p=85998#p85998"><![CDATA[
Witam mam problem:<br />Chcę aby po spełnieniu warunków zapalały się diody, tylko jest problem działa zawsze tylko pierwsza pętla a druga zamiast dać ciągłe światło miga z bardzo dużą prędkością(ledwo widać światło). Kod poniżej:<br />[syntax=c]#defineBEP PC0<br />#defineBEEP PC1<br />DDRC |= (1&lt;&lt;BEP); //załączanie diody<br />DDRC |= (1&lt;&lt;BEEP);<br />if (tempd  &lt; za)// jeśli temperatura w domu jest mniejsza od zadanej i temperatura na piecu co jest większa od zadanej to zapal diodę (BEP)<br />{if (tempc &gt; tempd)PORTC = (1&lt;&lt;BEP); else PORTC = (0&lt;&lt;BEP);}// załączanie cyrkulacji<br /><br />//jeżeli teperatura na piecu co jest większa od alarmu to zapal diodę BEEP<br />if (tempc  &gt; alarm) PORTC = (1&lt;&lt;BEEP); else PORTC = (0&lt;&lt;BEEP);// załączanie alarmu[/syntax]<br /><br />Wszystkie pętelki poza tymi powyżej pracują jak należy. Czekam na propozycję i dziękuję za rady.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4930">tadex0</a> — 28 cze 2014, o 18:30</p><hr />
]]></content>
</entry>
</feed>