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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-05-18T07:13:57+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=15399&amp;mode</id>
<entry>
<author><name><![CDATA[PJS]]></name></author>
<updated>2016-05-18T07:13:57+01:00</updated>
<published>2016-05-18T07:13:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160846#p160846</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160846#p160846"/>
<title type="html"><![CDATA[Re: Dziwne zachowanie się kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160846#p160846"><![CDATA[
Jeżeli korzystasz z if() to nawet dla jednej funkcji/polecenia używaj nawiasów {}. Po pierwsze program jest czytelniejszy. Po drugie, gdy trzeba dodać coś nie ma problemu, bo wstawiasz funkcje/polecenia w ten nawias (a przy braku {} często się o tym zapomina i program nie działa, tak jak chce się). Po trzecie, gdy wyrobisz sobie odruch, że po każdym if() dajesz {, to unikasz kolejnego częstego błędu, jakim jest wstawianie średnika po if() - wtedy warunek działa tylko dla średnika. Mało tego, jeśli nawet na końcu linijki z if(){ wstawisz średnik to program będzie działał dobrze, gdyż średnik (czyli pusta instrukcja) będzie w bloku obsługi polecenia if() - ot przykład:<br />[syntax=c]if(a=0);    //tu if sprawdza warunek i wykonuje gdy a=0 instrukcję pustą oraz w każdym przypadku LED_ON- program nieprawidłowo działa<br />   LED_ON;<br /><br /><br />if(a=0){;    //tu if sprawdza warunek i wykonuje gdy a=0 grupę instrukcji - pustą i LED_ON - program działa prawidłowo<br />   LED_ON;<br />   }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1614">PJS</a> — 18 maja 2016, o 07:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[k_lukasik]]></name></author>
<updated>2016-05-18T05:03:52+01:00</updated>
<published>2016-05-18T05:03:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160843#p160843</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160843#p160843"/>
<title type="html"><![CDATA[Re: Dziwne zachowanie się kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160843#p160843"><![CDATA[
W przypadku if jeśli masz tylko jedną czynność do wykonania to nie musisz używać nawiasów klamrowych, jeśli masz więcej niż jedną to już musisz inaczej program pomimo nie zgodnego warunku wykona te czynności poza pierwszą leżącą za ifem. Co do #define (przepraszam za mój nie profesjonalny język itp.) po prostu w define możesz dać kilka linijek kodu działa to jak makro. Tak jak masz w przypadku z BB, dzięki czemu za jednym zamachem możesz ustawiać bity na kilku portach co ułatwia sprawę, musisz je oddzielać średnikiem poza ostatnią inaczej program zakomunikuje błąd. Średnik daje informację, że za nim jest kolejna funkcja. A przynajmniej ja to tak rozumuje. Generalnie Define ułatwia bardzo życie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3791">k_lukasik</a> — 18 maja 2016, o 05:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elektronikq]]></name></author>
<updated>2016-05-17T21:21:44+01:00</updated>
<published>2016-05-17T21:21:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160832#p160832</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160832#p160832"/>
<title type="html"><![CDATA[Re: Dziwne zachowanie się kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160832#p160832"><![CDATA[
Dziękuje o to chodziło. Mam jeszcze jedno pytanie odnośnie używania nawiasów klamrowych:<br /><br />np. Jak zapisuje zmienne to:<br /><br />int a, b, c; mogę oddzielić je przecinkami<br />np. jak mam if (x==2&amp;&amp;y==1)<br />                   {LED;<br />                    LED2;<br />                   }<br />jak mogę zapisać to bez nawiasów klamrowych? Jak bym miał tylko samo LED to bym zapisał:<br />if (x==2&amp;&amp;y==1) LED; <br />Oddzielenie przecinkami nie działa.<br /><br />Pan Mirek w BB użył takiej makrodefinicji:<br />#define DC_LEWO PORTB &amp;= ~WE_A; PORTB |= WE_B<br />Po WE_B nie powinno być; Czemu w zmiennych żeby oddzielić zmienne używamy przecinków a tutaj średników?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11544">elektronikq</a> — 17 maja 2016, o 21:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[k_lukasik]]></name></author>
<updated>2016-05-17T14:05:39+01:00</updated>
<published>2016-05-17T14:05:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160789#p160789</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160789#p160789"/>
<title type="html"><![CDATA[Re: Dziwne zachowanie się kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160789#p160789"><![CDATA[
Dokładnie to co powiedział kolega Jacek, aby to co chcesz zrobić zadziałało powinieneś wg mnie dodać jakąś zmienną którą byś zmieniał w przerwaniu i sprawdzał dodatkowo w warunku np [syntax=c]uint8_t zapalona = 0; <br />if(x==4 &amp;&amp; !zapalona) {LED2; zapalona = 1;}[/syntax]<br />, a w przerwaniu np. <br />[syntax=c]ISR(TIMER1_COMPA_vect)<br />    {<br />   x++;<br />if(zapalona) zapalona = 0;<br />    }[/syntax]<br />Wtedy dioda się zapali i nie zgaśnie dopiero przy następnym x==4 dioda zgaśnie czyli za ok 251 sekund<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3791">k_lukasik</a> — 17 maja 2016, o 14:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2016-05-17T14:00:04+01:00</updated>
<published>2016-05-17T14:00:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160788#p160788</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160788#p160788"/>
<title type="html"><![CDATA[Re: Dziwne zachowanie się kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160788#p160788"><![CDATA[
W czasie gdy x ma wartość równą cztery to stan diody w pętli while nie zmieni się jeden raz tylko tysiące razy. Zmienna x wartość równą cztery będzie miała na czas jednej sekundy. W tym czasie pętla while przekręci się tysiące razy. I za każdym razem zmieni się stan diody led. Czyli dioda tak naprawdę nie świeci światłem ciągłym tylko bardzo szybko miga.<br /><br />Podejrzewam, że w momencie gdy x zmienia swą wartość z 4 na 5 dioda jest akurat wygaszona. Dlatego wydaje ci się, że dioda przez sekundę świeci a potem gaśnie.<br /><br />Dla testu wstaw do pętli while opóźnienie np. 100ms aby to sprawdzić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 17 maja 2016, o 14:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elektronikq]]></name></author>
<updated>2016-05-17T13:37:01+01:00</updated>
<published>2016-05-17T13:37:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160787#p160787</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160787#p160787"/>
<title type="html"><![CDATA[Dziwne zachowanie się kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15399&amp;p=160787#p160787"><![CDATA[
[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define LED (1&lt;&lt;PB4) // dioda LED1<br />#define LED2 PORTB ^=LED <br /><br /><br />volatile uint8_t x;<br />int main (void)<br />{<br />TCCR1B |= (1&lt;&lt;WGM12); <br />TCCR1B |= (1&lt;&lt;CS12); <br />OCR1A = 31249; <br />TIMSK |= (1&lt;&lt;OCIE1A); <br />sei();<br /><br /><br />DDRB |= WE_A|WE_B|PWM| LED | LED1;<br />PORTB |= KEY| LED;<br />while(1)<br />{<br />if (x==4) LED2;<br /><br /><br />}<br />}<br /><br />ISR(TIMER1_COMPA_vect)<br />    {<br />   x++;<br />    }[/syntax]<br /><br />W tym kodzie przerwanie występuje co 1 sek. I po 4 sekundach ma się zapalić dioda i powinna świecić aż x się wyzeruje i doliczy do 4 sekund i powinna zgasnąć. A u mnie dioda zapala się po 4 sekundach czyli dobrze i świeci ok 1 sekund i gaśnie.<br />Natomiast jak zrobię tak:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define LED (1&lt;&lt;PB4) // dioda LED1<br />#define LED2 PORTB &amp;=~LED <br /><br /><br />volatile uint8_t x;<br />int main (void)<br />{<br />TCCR1B |= (1&lt;&lt;WGM12); <br />TCCR1B |= (1&lt;&lt;CS12); <br />OCR1A = 31249; <br />TIMSK |= (1&lt;&lt;OCIE1A); <br />sei();<br /><br /><br />DDRB |= WE_A|WE_B|PWM| LED | LED1;<br />PORTB |= KEY| LED;<br />while(1)<br />{<br />if (x==4) LED2;<br /><br /><br />}<br />}<br /><br />ISR(TIMER1_COMPA_vect)<br />    {<br />   x++;<br />    }[/syntax]<br />Dioda się zapali po 4 sekundach i świeci cały czas.<br />PYTANIE:<br />Dlaczego w 1 przypadku dioda gaśnie po 1 sekundzie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11544">elektronikq</a> — 17 maja 2016, o 13:37</p><hr />
]]></content>
</entry>
</feed>