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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=16602&amp;mode</id>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-10-31T11:56:14+01:00</updated>
<published>2016-10-31T11:56:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173270#p173270</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173270#p173270"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173270#p173270"><![CDATA[
A dlaczego nie przetestujesz sobie tego na żywym organizmie? Na uC?<br />Zobacz jak łatwo to można zrobić, na przykład:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />uint8_t i = 2;<br />uint8_t bajt = 2;// czyli binarnie - 0b00000010<br /><br />int main(void){<br /><br />DDRA = 0xFF;<br />PORTA = 0xFF;// czyli binarnie - 0b11111111<br /><br />while(1){<br /><br />PORTA &amp;= ~bajt;// wystawienie zanegowanej zmiennej bajt na port A<br /><br />// (pamiętamy, że negujemy dla diod LED podłączonych katodami do uC)<br />// czyli PORTA = 0b11111111 &amp; (~0b00000010); <br />// po dokonaniu negacji PORTA = 0b11111111 &amp; 0b11111101; <br />// czyli PORTA = 0b11111101;<br />// (zaświeci się druga dioda LED od prawej)<br /><br />_delay_ms(1000);// delay 1s<br /><br />//PORTA &amp;= ~(bajt &lt;&lt; i); // można to samo napisać w dwóch linijkach kodu, w ten sposób:<br /><br />bajt = (bajt &lt;&lt; i); // bajt &lt;&lt; i = 0b00000010 &lt;&lt; 2 (przesuwamy o 2 miejsca w lewo) = 0b00001000, <br />// czyli zmienna bajt przyjmie teraz tą wartość 0b00001000<br /><br />PORTA &amp;= ~bajt;// czyli PORTA = PORTA &amp; (~bajt);  gdze PORTA = 0b11111101, <br />// więc PORTA = 0b11111101 &amp; (~0b00001000), po dokonaniu negacji otrzymamy:<br />// PORTA = 0b11111101 &amp; 0b11110111), a w rezultacie PORTA = 0b11110101, <br />// czyli bedą świeciły się dwie diody LED druga i czwarta od prawej<br /><br />while(1);// pułapka programowa, &quot;zatrzymanie&quot; programu, który nie &quot;wyjdzie&quot; już z tej pętli<br />// gdy zakomentujemy tą linijkę kodu, program dalej w pętli będzie dokonywał przesunięcia bitowego<br />// o dwa miejsca w lewo, czyli zaświecą się kolejne diody, czyli szósta dioda od prawej,<br />// a następnie ósma dioda od prawej<br /><br /><br />}<br />}[/syntax]<br /><br />Mam nadzieję, że komentarze pomogą ci w zrozumieniu co się tutaj dzieje.  <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=7157">anshar</a> — 31 paź 2016, o 11:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-10-31T09:49:33+01:00</updated>
<published>2016-10-31T09:49:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173264#p173264</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173264#p173264"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173264#p173264"><![CDATA[
Z tym marudzeniem to spoko, ja jestem z tych cierpliwych . <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Początki są najtrudniejsze, ale jak się zacznie uc trochę słuchać to dopiero jest frajda.<br /><br /><div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />PORTA &amp; =~(2&lt;&lt;i); a np. i=2<br />to wynik będzie 1110 1111<br /></div><br /> <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" />  no..- nie do końca to prawda, będzie przesunięte ale nie o tyle  <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br />zobacz-&gt; i=2;<br /><br />PORTA &amp;=~( 2             &lt;&lt;     i);<br /><br />PORTA &amp;=~(0000 0010 &lt;&lt;      2);  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /> <br /><br />czyli:<br />PORTA &amp;=~(       0000 1000       );<br /><br />czyli:<br />PORTA &amp;=    (     <span style="color: #408000">1111 0111</span>        );<br /><br />czyli:<br />PORTA = ??.<br />no właśnie,  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" />  jaka była początkowa wartość PORTA by można było wykonać tę operację:<br />bo ten zapis &amp; wykonuje jakby to powiedzieć - nałożenie się na siebie powtarzających się jedynek<br />w pierwotnej wartości i wyliczonego przed chwilą <span style="color: #408000">1111 0111</span>.<br />czyli dla założeń że portA był-&gt; to:<br /><br />PORTA &amp;=(1111 1101);<br />0000 000<span style="color: #0080FF"><strong>1</strong></span> &amp; 1111 011<span style="color: #0080FF"><strong>1</strong></span>-&gt;    0000 000<span style="color: #0080FF"><strong>1</strong></span>.<br />000<span style="color: #0080FF"><strong>1</strong></span> 1000 &amp; 111<span style="color: #0080FF"><strong>1</strong></span> 0111 -&gt;   000<span style="color: #0080FF"><strong>1</strong></span> 0000 .<br />0000 1<span style="color: #0080FF"><strong>111</strong></span> &amp; 1111 0<span style="color: #0080FF"><strong>111</strong></span> -&gt;  0000 0<span style="color: #0080FF"><strong>111</strong></span>.<br />1111 1111 &amp; 1111 1101  --&gt; 1111 1101 (bo na bicie nr1-'drugim', licząc od bit0, nie powtarzają się jedynki)<br /><div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />Jak jeszcze pozwolisz pomarudzć   to chciałbym wyjaśnić jedną kwestię z twojego przykładu<br />................................................................................................................................................<br />Daro69 napisał(a):<br />while(1){<br />                        PORTA &amp;= ~(1&lt;&lt;i);           /*w PORTA wyzeruje się bit (1&lt;&lt;i) jedynka przesunięta o &quot;i&quot;<br />                                                    za pierwszym obiegiem   1).  PORTA -&gt; 1111 1110, przesunięta o 0<br />.................................................................................................................................................<br /><br />jaką wartość ma &quot;i&quot; przesunięta o &quot;0&quot;<br /></div><br />w naszym przykładzie przesuwamy '1' &lt;&lt; 'i' , a pytasz o 'i' &lt;&lt;'1' , ok.<br /><br />wartość 'i' przesunięta o '0' ma wartość 'i' . <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />dla i=5;<br />i&lt;&lt;0;<br />0000 0101 &lt;&lt; 0 -&gt; 0000 0101. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  (czyli pozostaje wartość 'i'). ale możeemy tę wartość do czegoś dołączyć operatorem '|' ,<br /> lub za pomocą operatora bitowego &amp;- jedynkami sprawdzić czy w innej wartości w tych miejscach też są jedynki.<br />jeżeli są to w tych miejscach w wyniku będą jedynki, a jak nie to będą zera, tak jak wyżej to robiliśmy.  <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=11549">Daro69</a> — 31 paź 2016, o 09:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-11-01T00:28:41+01:00</updated>
<published>2016-10-31T00:18:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173249#p173249</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173249#p173249"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173249#p173249"><![CDATA[
O ile dobrze zrozumiałem to podam inny przykład :<br />PORTA &amp; =~(2&lt;&lt;i); a np. i=2<br />to wynik będzie 1110 1111<br />Jak jeszcze pozwolisz pomarudzć  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> to chciałbym wyjaśnić jedną kwestię z twojego przykładu<br /><div class="quotetitle">Daro69 napisał(a):</div><div class="quotecontent"><br />while(1){<br />                        PORTA &amp;= ~(1&lt;&lt;i);           /*w PORTA wyzeruje się bit (1&lt;&lt;i) jedynka przesunięta o &quot;i&quot;<br />                                                    za pierwszym obiegiem   1).  PORTA -&gt; 1111 1110, przesunięta o 0<br /></div><br />jaką wartość ma &quot;i&quot;    przesunięta o &quot;0&quot;<br />Ja to rozumiem w ten sposób &quot; uint8_t i &quot; jest to miejsce na wartości od  0 do  255 czyli jak w kodzie kolegi anshar<br />&quot;<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />uint8_t i;<br /><br />int main(void){<br /><br />        DDRA = 0xFF;<br />        PORTA = 0xFF;  // 1111 1111<br /><br />        while(1){<br /><br />        PORTA &amp;= ~( 1&lt;&lt;i);<br /><br />                i++;<br /><br />                if( 8 &lt; i) {<br />                        i=0;<br />                        PORTA = 0xFF;<br />                }<br /><br />                _delay_ms(2000);<br /><br />        }<br />}[/syntax]<br />&quot;i&quot; to znaczy pusty bajt 0000 0000 a dopiero przy kolejnym obiegiem pentli &quot; i++ &quot; dodawany jest kolejny bit to jest:<br /><br />                    i++        <br />      | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | <br />                 &lt;---------------------<br /><br />0000 0001 = 1<br />0000 0011 = 3 (1+2)<br />0000 0111 = 7  (1+2+4)                                        <br />0000 1111 = 15  (itd.)                <br />0001 1111 = 31                                      <br />0011 1111 = 63 <br />0111 1111 = 127<br />1111 1111 = 255<br />koniec pentli i następna .<br />A w przeciwną strone cyli w prawo wyglada tak samo tylko w odwrotnij kolejności zaczynamy od najstarszego bitu<br />PORTA &amp; =~(128&gt;&gt;1);<br />1000 0000 = 128<br />1100 0000 = 64 (128-64)<br />1110 0000 = 32 (128-64-32)<br />          itd.<br /><br /><br />PS.dziekuje za cierpliwość, zaczołem inaczej patrzeć  na inne kody chociaż dużo jeszcze przedemną.<br /><br />Pozd.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 31 paź 2016, o 00:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-10-29T23:51:45+01:00</updated>
<published>2016-10-29T23:51:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173149#p173149</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173149#p173149"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173149#p173149"><![CDATA[
a... <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />ten zapis:<br />~ (1&lt;&lt;i)<br />jest wyjęty z kontekstu.<br />w oryginale kolegi &quot;anshar&quot; było : <strong>&quot;PORTA &amp;=~ (1&lt;&lt;i);&quot;</strong>  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />To oznacza zerowanie w PORTA bitu na &quot;i&quot; pozycji od prawej.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 8 minutach ]</span></strong><br /><br />w całości zapis    PORTA &amp;=~ (1&lt;&lt;i); jeżeli np. i=3;<br />to to samo co   PORTA = PORTA  &amp;  ~(1&lt;&lt;i);<br />co można rozpisać:<br />PORTA  1111 1111 ma się równać (PORTA_1111 1111) &amp; ~(0000 0001 &lt;&lt; 3);<br />co daje 1111 1111 ma się równać (PORTA_1111 1111) &amp; ~(0000 1000);<br />co daje 1111 1111 ma się równać (PORTA_1111 1111) &amp; (1111 0111);<br />co daje 1111 1111 ma się równać (PORTA_1111 0111); (czyli wygaszony trzeci bit w bajcie licząc od zerowego.) <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=11549">Daro69</a> — 29 paź 2016, o 23:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-10-29T23:42:00+01:00</updated>
<published>2016-10-29T23:42:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173148#p173148</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173148#p173148"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173148#p173148"><![CDATA[
Kod z wyrażeniem if (8&lt;1) pezesłał kolega &quot;anshar&quot; (kod powyżej).<br />No i wreście przechodzimy do sedna sprawy  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> .<br />Problemem nie są przesunięcia bitowe tylko sam zapis i w jakiej  kolejności kompilator odczytuje kod to znaczy :<br />PORTA=1111 1111 ( PORTA= 0xFF)<br />a wyrażenie ~ (1&lt;&lt;i) daje wynik 1111 1110 więc poco znak &quot;~&quot;które powinno dać wynik 0000 0001<br /><br />Pozd.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 29 paź 2016, o 23:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-10-29T19:54:02+01:00</updated>
<published>2016-10-29T19:54:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173139#p173139</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173139#p173139"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173139#p173139"><![CDATA[
[syntax=c]while(1){<br />                        PORTA &amp;= ~(1&lt;&lt;i);           /*w PORTA wyzeruje się bit (1&lt;&lt;i) jedynka przesunięta o &quot;i&quot;<br />                                                    za pierwszym obiegiem   1).  PORTA -&gt; 1111 1110, przesunięta o 0<br />                                                    za drugim obiegiem      2).  PORTA -&gt; 1111 1100, przesunięta o 1 (było 1111 1110 jest 1111 1100)<br />                                                                            3.)  PORTA -&gt; 1111 1000, przesunięta o 2 (po skasowaniu następnego - trzeciego bitu.)<br />                                                                          ...<br />                                                                          ...  :) jeżeli o to chodziło.<br />*/  <br />                        i++;<br /> <br />                       if( 8 &lt; i) {                /*jeżeli i &gt; 8 , i=0 , PORTA = 1111 1111. tylko dlaczego 8 ? <br />                                                      dla i=0, -. (1&lt;&lt;0)tj. (0000 0001) czyli pozostanie na pierwszym miejscu-zero przesunięcia.<br />                                                    a dla i=8 ? (1&lt;&lt;8)tj. (0000 0000) czyli wyzeruje &quot;nic&quot;. !!<br />                                                     jeżeli to było zaplanowane by na końcu ostatni obieg nic nie zrobił to OK. :) */ <br /><br />                        i=0;                       /*zerowanie &quot;i&quot;*/<br />                        PORTA = 0xFF;              /*1111 1111 na PORTA*/<br />                }<br /> <br />                _delay_ms(500);<br /> <br />        }<br />}[/syntax]<br />Tak to mi wygląda.  <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=11549">Daro69</a> — 29 paź 2016, o 19:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-10-29T11:32:27+01:00</updated>
<published>2016-10-29T11:32:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173127#p173127</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173127#p173127"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173127#p173127"><![CDATA[
A czy taki zapis jest poprawny:<br />[syntax=c]int main(void){<br /><br />        DDRA = 0xFF;<br />        PORTA = 0xFF;  // 1111 1111 (255)<br /><br />        while(1){<br />        PORTA &amp;= ~(1&lt;&lt;i);<br />  //PORTA=1111 1111        <br />  //(i&lt;&lt;1) = ~ ((1&lt;&lt;1111 1111)=1111 1110 ( 254 )) <br />                i++;<br /><br />                if( 8 &lt; i) {<br />                        i=0;<br />                        PORTA = 0xFF;<br />                }<br /><br />                _delay_ms(500);<br /><br />        }<br />}[/syntax]<br />wynik=1111 1110 <br /><br />1001 0110&lt;&lt;2 -----&gt;0101 1000<br />0010 0011&lt;&lt;3------&gt;0001 1000<br />4&gt;&gt;0101 1100------&gt;0000 0101<br />1&gt;&gt;1101 1010------&gt;0110 1101<br />Pozd.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 29 paź 2016, o 11:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-10-29T00:05:10+01:00</updated>
<published>2016-10-29T00:05:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173108#p173108</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173108#p173108"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173108#p173108"><![CDATA[
<div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />(1&lt;&lt;1) = (1&lt;&lt;1111 1111)=1111 1110 ( 254 ) =~=0000 0001( 1 )<br /></div>P<br />no nie tak.  <img src="https://forum.atnel.pl/images/smilies/icon_neutral.gif" alt=":|" title="Średnio zadowolony" /> <br /><br />PORTA = 1111 1111; <br /><br />PORTA = PORTA &lt;&lt; 1 ; /*chcemy przesunąć całą zawartość portu o jedno miejsce w lewo.*/<br />czyli:<br />PORTA = 1111 1111 &lt;&lt; 1 ; <br />wynik to PORTA  ---&gt;  1111 1110 <br />(wartość przesuwana&lt;&lt;wartość przesunięcia)/* to co z lewej 1111 1111 &lt;&lt; w lewo     o 1miejsce*/<br /><br />albo takie coś:<br />PORTA  = 1100 0011;<br /><br />PORTA = (PORTA&lt;&lt;3);  da w wyniku 0001 1000  /*przesunięcie o 3 tego co w PORTA*/<br /><br />PORTA = (0001 0001&lt;&lt;3); da w wyniku 1000 1000 /*do PORTA wpisaliśmy przesunięte o 3 w lewo to 0001 0001*/<br /><br />uwaga! odwrotny zapis z innym przesunięciem<br />PORTA = (   3  &lt;&lt;   0000 0010   );  /*tu przesuwamy trojkę&quot;3&quot;czyli(0000 0011),  &lt;&lt;w lewo,   (0000 0010)←o dwa miejsca,  */ wynik na PORTA<br />PORTA to   0000 1100<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 6 minutach ]</span></strong><br /><br />porównaj zapisy:<br />(3&lt;&lt;2)  czyli (0000 0011 &lt;&lt;0000 0010) // trójka przesuwana o dwa w lewo. --&gt;wynik 0000 1100<br />(2&lt;&lt;3)  czyli (0000 0010 &lt;&lt;0000 0011) //dwójka przesuwana o trzy w lewo. --&gt;wynik 0001 0000<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 29 paź 2016, o 00:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-10-28T23:38:17+01:00</updated>
<published>2016-10-28T23:38:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173107#p173107</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173107#p173107"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173107#p173107"><![CDATA[
Własnie mam problem jak kompilator odczytuje program, Mirek nakrecił film poruszający to zagadnienie ,niekiedy mam z tym problem z zkolejnością odczytu lub zapisu. <br />Same przesunięcia nie stanowiom problemu, ale zastosowanie ich w kodzie to niekiedy zgadywanka np.:<br /><br />PORTA-1111 1111-(255)<br />(1&lt;&lt;1) = (1&lt;&lt;1111 1111)=1111 1110 ( 254 ) =~=0000 0001( 1 )<br /><br />Pozd.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 28 paź 2016, o 23:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-10-28T19:45:09+01:00</updated>
<published>2016-10-28T19:45:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173080#p173080</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173080#p173080"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173080#p173080"><![CDATA[
<img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />1&lt;&lt; 1111 1110<br /></div><br />Tu przesuwasz jedynkę o 254 w lewo.  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />czyli z 0000 0001(jedynka) przesunięta o 254 w lewo będzie (?) <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> <br />raczej nie 1111 1110  <img src="https://forum.atnel.pl/images/smilies/icon_cry.gif" alt=":cry:" title="Płacze" /> przyjrzyj się.<br /><strong>z lewej strony jest wartość przesuwana a z prawej ilość przesunięć o 1.</strong>  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 8 minutach ]</span></strong><br /><br />tylko dobrze zrozum, 1111 1110 to wartość 254. a nie siedem jedynek. <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=11549">Daro69</a> — 28 paź 2016, o 19:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-10-28T19:11:52+01:00</updated>
<published>2016-10-28T19:11:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173075#p173075</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173075#p173075"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=173075#p173075"><![CDATA[
Bardzo fajny przykład wiec postanowiłem go rozpisać:<br />PORTA   1111 1111<br /> 1&lt;&lt;     1111 1110<br />end-------------------<br />wynik    1111 1110<br />potem kolejne przesunięcie i pentla ,czy tak to powinno być.<br /><br />Pozd.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 28 paź 2016, o 19:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-10-27T01:25:47+01:00</updated>
<published>2016-10-27T01:25:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172938#p172938</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172938#p172938"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172938#p172938"><![CDATA[
Dlaczego zapisujemy: PORTA = ~bajt;  ?<br /><br />Ano dlatego, że jeśli zapisalibyśmy PORTA = bajt; to na port A (PORTA) wystawimy (przypiszemy) wartość zmiennej bajt, prawda?<br />Czyli jeśli bajt = 0b00001111; to na porcie A cztery najstarsze bity przyjmą wartość 0, a cztery najmłodsze wartość 1.<br />Teraz jeśli diody LED podłączone są anodami do mikrokontrolera, a katodami (oczywiście poprzez rezystory ograniczające prąd) do masy to cztery diody podłączone do PA7, PA6, PA5 i PA4 nie będą się świeciły, za to diody podłączone do PA3, PA2, PA1 i PA0 zaświecą się.<br />Inaczej jest gdy diody podłączone są odwrotnie, czyli katodami do mikrokontrolera, a anodami (również poprzez rezystory ograniczające prąd) tym razem do Vcc. Teraz diody od PA7 do PA4 będą się świeciły, a cztery pozostałe nie będą.<br />Dlatego używamy operatora negacji &quot;~&quot; i zapisujemy PORTA = ~bajt;, by diody świeciły się zgodnie z założeniem, że &quot;1&quot; oznacza świecenie, a &quot;0&quot; oznacza nieświecenie. <br /><br />Dla potwierdzenia zamiast PORTA = ~bajt; napisz PORTA = bajt;, skompiluj i wgraj program do procka. Zobacz co się będzie działo.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Mam nadzieję, że jest to dla ciebie jasne.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Dlaczego zapisujemy PORTA = ~bajt; raz na górze (przesunięcie w lewo) a raz na dole (przesunięcie w prawo)?<br /><br />A jakie jest założenie programu (programisty)? No przecież to ty sam wymyśliłeś, by diody przesuwały się (zaświecały się po kolei) od prawej strony do lewej przy czym gdy wszystkie osiem diod będą się już świeciły, to w kolejnym kroku mają wszystkie zgasnąć. Z kolei w następnym kroku znowu zaświeci się pierwsza dioda LED itd., prawda?<br />Przygotowałem dwie tabelki (pierwsza dla przesunięcia w prawo, druga dla przesunięcie w lewo). Zapomnij na razie w jednym i drugim przypadku o kolumnie zawierającej właśnie PORT = ~bajt; i sprawdź czy wszystko się zgadza. Teraz przypomnij sobie jaki chcesz osiągnąć rezultat (jak te biedne diody LED mają się zachowywać).  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br />W którym miejscu umieściłbyś teraz tą linijkę kodu, tak aby diody świeciły i gasły prawidłowo? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Za pomocą &quot;metody wojskowej&quot; chciałem ci pokazać, że wykorzystując mechanizm przesunięć bitowych można osiągnąć w tym przypadku to samo co za pomocą metody tablicowej. <br />Różnica jest taka, że zamiast tablicy zawierającej 9 zmiennych uint8_t, definiujemy tylko jedną zmienną np. uint8_t bajt i właśnie na niej dokonujemy wszystkie &quot;operacje&quot;, czyli przesunięcie bitowe w lewo lub w prawo, bądź inkrementację tej zmiennej. <br /><br />Proponuję dla odmiany teraz taki kodzik (od prawej do lewej):<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />uint8_t i;<br /><br />int main(void){<br /><br />DDRA = 0xFF;<br />PORTA = 0xFF;<br /><br />while(1){<br /><br />PORTA &amp;= ~(1&lt;&lt;i);<br /><br />i++;<br /><br />if( 8 &lt; i) {<br />i=0;<br />PORTA = 0xFF;<br />}<br /><br />_delay_ms(800);<br /><br />}<br />}[/syntax]<br /><br />Też działa prawidłowo, chociaż wygląda prościej, prawda? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Przeanalizuj go sobie. Zauważ, że zasada działania tego programu, jego algorytm jest bardzo podobny do tego z wykorzystaniem &quot;metody wojskowej&quot; od prawej do lewej. Tylko tutaj trzeba było zadbać o gaszenie diod LED za pomocą dodatkowego warunku if.<br /><br />A co zrobić, by na podstawie tego kodu powyżej, teraz diody przesuwały się od lewej do prawej?  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />@Daro69<br />Damy radę.  <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=7157">anshar</a> — 27 paź 2016, o 01:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-10-27T00:48:02+01:00</updated>
<published>2016-10-27T00:48:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172936#p172936</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172936#p172936"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172936#p172936"><![CDATA[
to może jeszcze raz.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />bajt to 8 bitów. np &quot;<strong>0000 0001</strong>&quot;<br />teraz zrobimy operację przesunięcia na poprzednim kodzie<br />[syntax=c]PORTA = ~bajt;<br />                bajt = ( (bajt&lt;&lt;1)|(bajt&gt;&gt;7) ) ;<br />                bajt++;[/syntax]<br />krok_1 - &quot; PORT = ~bajt;&quot;    ----&gt; <strong>PORT</strong> otrzymuje wartość(1111 1110)= <strong>~</strong>odwrócony <strong>bajt</strong> (0000 0001)<br />PORT to teraz 1111 1110 , a bajt to 0000 0001 &lt;----------------------****<br /><br />krok_2 - &quot;bajt = ( (bajt&lt;&lt;1)|(bajt&gt;&gt;7) ) ;<br />rozbijmy to na drobne. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />(stary bajt&lt;&lt;1)  --&gt; (0000 0001 &lt;&lt; 1)  da wynik <strong>0000 0010</strong><br />(stary bajt&gt;&gt;7)  --&gt; (0000 0001 &gt;&gt; 7)  da wynik <strong>0000 0000</strong> jedynka i kilka zer wypada z prawej a z lewej wchodzą zera.<br />te dwa wyniki łączy operator bitowy OR.<br />(teraz uwaga, to są te nasze dwa wyniki).zamiast zapisać obok siebie utworzę kolumnę.<br /><br />0000 0010 pierwszy wynik przesunięty<br />&quot; | &quot; operator<br />0000 0000 drugi wynik przesunięty<br />...............<br />0000 0010 suma przesunięć (nakładanie jedynek na siebie w pionie)<br /><br />gdyby była jedynka np. na trzecim bicie w którymkolwiek z przesunięć to była by i w wyniku też na trzecim bicie.<br />teraz <strong>nowy bajt ma postać 0000 0010</strong>.<br /><br />teraz jest bajt++; dodanie jeden do nowy bajt.<br /><br />0000 0010 to wartość 2.<br />dodamy jeden.<br />0000 0011 to jest wartość 3<br />czyli teraz <strong>bajt to 0000 0011</strong><br /><br />i znowu jest polecenie PORT=~bajt; czyli odwrócony ( nowszy bajt 0000 0011 )<br />od teraz PORT to 1111 1100 a bajt to 0000 0011. &lt;----------------------****<br /><br />krok_ - &quot;bajt = ( (bajt&lt;&lt;1)|(bajt&gt;&gt;7) ) ;<br />rozbijmy to znowu na drobne. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />( bajt&lt;&lt;1)  --&gt; (0000 0011 &lt;&lt; 1)  da wynik <strong>0000 0110</strong><br />( bajt&gt;&gt;7)  --&gt; (0000 0011 &gt;&gt; 7)  da wynik <strong>0000 0000</strong> obie jedynki i kilka zer wypada z prawej a z lewej wchodzą zera.<br />te dwa wyniki łączy operator bitowy OR.<br /><br />0000 0110 pierwszy wynik przesunięty<br />&quot; | &quot; operator<br />0000 0000 drugi wynik przesunięty<br />...............<br />0000 0110 suma przesunięć (nakładanie jedynek na siebie w pionie)<br /><br />teraz <strong>nowy bajt ma postać 0000 0110</strong>.<br /><br />teraz jest bajt++; dodanie jeden do bajt.<br /><br />0000 0110 to wartość 6.<br />dodamy jeden.<br />0000 0111 to jest wartość 7<br />czyli teraz <strong>bajt to 0000 0111</strong> (7)<br /><br />i znowu jest polecenie PORT=~bajt; czyli odwrócony ( nowszy bajt 0000 0111 )<br />od teraz PORT to 1111 1000 a bajt to 0000 0111. &lt;----------------------****<br /><br />itd..... <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 27 paź 2016, o 00:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-10-26T23:28:59+01:00</updated>
<published>2016-10-26T23:28:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172931#p172931</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172931#p172931"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172931#p172931"><![CDATA[
W skrucie można by powiedzieć przesuwamy bajt    odczytujemy ~bajt , to dlaczego zapisujemy  PORTA = ~bajt; <br />raz na górze (przesunięcie w lewo) a ma dole w prawo.<br />Same przesunięcia są dla mnie tyiko z zapisem troche ciemniej.<br />----------------------------------------------------------------------------------<br />Z tym męczeniem ~bajt  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Pozd.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 26 paź 2016, o 23:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-10-26T22:52:45+01:00</updated>
<published>2016-10-26T22:52:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172929#p172929</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172929#p172929"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172929#p172929"><![CDATA[
hie..<br />pomęczymy kolegę aż w końcu załapie i będzie zaskoczony że to takie proste. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 6 minutach ]</span></strong><br /><br />może tak : <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />nie ma tu zapisu  bajt = ~bajt;<br />(bo wtedy rzeczywiście odwrócił by się nam bajt i to on odwrócony by się przesuwał )<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 26 paź 2016, o 22:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-10-26T22:50:14+01:00</updated>
<published>2016-10-26T22:50:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172927#p172927</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172927#p172927"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172927#p172927"><![CDATA[
Kolega Daro69 ma rację. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Aż zrobiłem nową tabelkę, tym razem dla przesunięcia w lewo:<br /><br /><a href="https://obrazkiforum.atnel.pl/7157/99daac1e87b5de8e5f9bc73eeadb3d34.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/7157/99daac1e87b5de8e5f9bc73eeadb3d34.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 26 paź 2016, o 22:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-10-26T22:40:08+01:00</updated>
<published>2016-10-26T22:40:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172924#p172924</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172924#p172924"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172924#p172924"><![CDATA[
no tak,<br />ale to jest tak że nowy bajt = przesunięty stary bajt,<br />i PORT= odwrócony nowy bajt. (ale ten bajt się nie odwraca tylko odwrócony wynik jest podany do PORT)<br />a nie że bajt to odwrócony bajt.<br />.....................................................<br />mam nadzieję że teraz to nie zakręciłem kolegi za bardzo. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 7 minutach ]</span></strong><br /><br />stary bajt 0000 0001<br />przesunięty stary bajt np o 3 w lewo da nowy 0000 1000<br /><br />PORT teraz będzie miał 1111 0111 (bo podajemy mu odwrócony bajt) a bajt nadal jest 0000 1000.<br />i przesuwamy go znowu np. o 2 w lewo teraz bajt będzie miał 0010 0000 a na port pójdzie <br />odwrócenie czyli port będzie 1101 1111. <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=11549">Daro69</a> — 26 paź 2016, o 22:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-10-26T22:30:35+01:00</updated>
<published>2016-10-26T22:30:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172922#p172922</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172922#p172922"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172922#p172922"><![CDATA[
Zrobiłem tak jak jest zapisany program bajt , ~bajt i ten odwrócony bajt przesunołem myślałem że jak on jest zapisany<br />nad przesunięciem to właśnie tan dwrócony bajt zostanie przesunięty .<br />Kolega &quot;anshar&quot; przedstawił przykład przesunięcia w prawo i tam bajt odwracany jest pod koniec tabeli<br />ja zrobiłem przesunięcie  w lewo .<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 26 paź 2016, o 22:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-10-26T20:31:17+01:00</updated>
<published>2016-10-26T20:31:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172912#p172912</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172912#p172912"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172912#p172912"><![CDATA[
no przyjrzałem się tabelce kolegi &quot;anshar&quot; i tam jest wszystko OK. <br />Natomiast w tabelce powyżej już nie.<br />w pierwszym słupku jest bajt, w drugim odwrócony bajt , a w trzecim powinien być przesunięty bajt - a nie przesunięty &quot;odwrócony bajt&quot;.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />czyli powinny być przesunięte zera a nie jedynki w pierwszej linijce. <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=11549">Daro69</a> — 26 paź 2016, o 20:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-10-26T20:09:01+01:00</updated>
<published>2016-10-26T20:09:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172908#p172908</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172908#p172908"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172908#p172908"><![CDATA[
Na podstawie tabeli którą przedstawił kolega rozpisałem kod tak jak jest napisany z przesunięciem w lewo i myśle<br /> że coś jest zle, przypuszczam że bajt++.<br />Przy okazji tego przykładu przećwiczyłem sobie przesunięcia i lepiej je zrozumiałem.<br />  <br /> <br /><br />[syntax=c]while(1){<br /><br />            PORTA = ~bajt;<br />                bajt = ( (bajt&lt;&lt;1)|(bajt&gt;&gt;7) ) ;<br />                bajt++;<br /><br />                _delay_ms(800);<br />                 }<br />     }<br /><br />/* cztery obiegi pentli<br />  bajt       ~bajt       bajt&lt;&lt;1     bajt&gt;&gt;7     &lt;&lt;1||&gt;&gt;7    bajt++<br />0000 0000 | 1111 1111 | 1111 1110 | 0000 0001 | 1111 1111 | 0000 0001 <br />           <br />0000 0001 | 1111 1110 | 1111 1100 | 0000 0001 | 1111 1101 | 0000 0011<br /><br />0000 0011 | 1111 1100 | 1111 1000 | 0000 0001 | 1111 1001 | 0000 0111<br /><br />0000 0111 | 1111 1000 | 1111 0000 | 0000 0001 | 1111 0001 | 0000 1111<br /><br />*/[/syntax]<br />PS.Bardzo fajna tabelka dzięki  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Pozd.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 26 paź 2016, o 20:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-10-25T15:05:31+01:00</updated>
<published>2016-10-25T15:05:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172764#p172764</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172764#p172764"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172764#p172764"><![CDATA[
Kolego Daro69 ma rację, że trzeba wziąść pod uwagę kilka rzeczy na raz, przede wszystkim to, że zmienna bajt jest zadeklarowana i jednocześnie zdefiniowana jako zmienna globalna, która domyślnie przyjmuje wartość 0. Dlatego w poniższej tabelce rozpisałem co po kolei następuje, jaką wartość otrzymuje zmienna bajt w kolejnych obiegach pętli nieskończonej dla kodu z zapalaniem diod Led od lewej do prawej. Sądzę, że na podstawie tego kodu powstał całkiem fajny przykład na zabawę z przesunięciami bitowymi.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br /><a href="https://obrazkiforum.atnel.pl/7157/969ec4150896ae5e77e2bbe90a36eabf.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/7157/969ec4150896ae5e77e2bbe90a36eabf.jpg" alt="Obrazek" /></a><br /><br />I tak w pierwszym obiegu pętli while (patrz pierwsza kolumna) zmienna bajt=0 czyli binarnie 0000 0000 (patrz druga kolumna).<br />Następnie dokonujemy przesunięcia bitowego o 1 pozycję w prawo (trzecia kolumna) oraz przesunięcia bitowego o 7 pozycji w lewo (czwarta kolumna).<br />W piątej kolumnie oblicamy sume logiczną (alternatywę) z obliczonych wartości z trzeciej i czwartej kolumny.<br />W szóstej kolumnie przypisujemy do rejestru wyjściowego PORTA wartość obliczonej zmiennej bajt (wartość z kolumny piątej). Ponieważ diody są podłączone katodami do mikrokontrolera, dlatego dokonujemy po drodze negacji, prawda? <br />Jeśli to nie jest jasne to polecam: <a href="http://mirekk36.blogspot.co.uk/2012/01/avr-porty-wewy-dir-podstawy.html"  class="postlink">http://mirekk36.blogspot.co.uk/2012/01/avr-porty-wewy-dir-podstawy.html</a><br />Za to w ostatniej kolumnie otrzymujemy wynik inkrementacji zmiennej bajt  ( bajt++, czyli bajt = bajt +1; ).<br />W kazdym obiegu pętli wykonujemy dokładnie to samo, czyli przesunięcie bitowe o 1 w prawo, o 7 w lewo, sumę logiczną i wynik przypisujemy do zmiennej bajt:<br />[syntax=c]bajt = ( (bajt&gt;&gt;1) | ( bajt&lt;&lt;7 ) );[/syntax]<br />Następnie podajemy to na port do którego są podłączone diody Led:<br />[syntax=c]PORTA = ~bajt;[/syntax]<br />Na samym końcu dokonujemy inkrementacji zmiennej bajt.<br />Porównaj 10 obieg pętli z 1 obiegiem. Wynika z tego, że w 11 obiegu bedzie dokładnie to samo co w 2, w 12 to samo co w 3 itd.<br />Zauważ w którym momencie dokonujemy przypisania zmiennej bajt do PORTA.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Porównaj sobie kody z przesuwaniem diod Led od prawej do lewej i od lewej do prawej. Zrób sobie taką tabelkę na kartce papieru (tym razem dla kodu z przesuwaniem diod Led od prawej do lewej). <br />Mam nadzieję, że przesunięcia bitowe i tym razem okażą się dla ciebie banalnie proste.<br />Jeśli coś jest nie jasne daj znać. Chętnie pomogę. <br />Pozdrawiam.  <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=7157">anshar</a> — 25 paź 2016, o 15:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-10-25T05:41:10+01:00</updated>
<published>2016-10-25T05:41:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172718#p172718</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172718#p172718"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172718#p172718"><![CDATA[
Witam,<br />Tu musisz wziąć pod uwagę kilka rzeczy na raz.<br />Aktualny stan Port.<br />Nowy stan port- po kazdej operacji.<br />Oraz przesuniecie aktualnego stanu portu w lewo oraz w prawo i nałożenie wyników na siebie.<br />Wynik jest w następnym obiegu stanem wyjściowym port.<br />1000 0000 = ( 1000 0000 &gt;&gt; 1) | ( 1000 0000&lt;&lt;7).<br />Czyli ........= (0100 0000) | (0000 0000)<br />Czyli........= (0100 0000). Po operacji |.<br />I wszystko sie powtarza ale z port już równym 0100 0000.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 53 minutyach ]</span></strong><br /><br />Natomiast kiedy wynik portu dojdzie do wartości 0000 0001<br />Port 0000 0001 zaraz będzie miał wartość:<br />= (0000 0001&gt;&gt;1) | (0000 0001&lt;&lt;7) // wartość portu przed operacja gotowa do przesunięcia.<br />Czyli po przesunieciach<br />=(0000 0000) | (1000 0000)<br />Po operacji | <br />Nowa wartość portu 1000 0000<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 25 paź 2016, o 05:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-10-24T23:58:46+01:00</updated>
<published>2016-10-24T23:58:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172710#p172710</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172710#p172710"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172710#p172710"><![CDATA[
O ile dobrze rozumiem to ( bajt&gt;&gt;1) zapala się pierwsza dioda najstarszy bit (128) przesunięcie o &quot;1&quot;  i zapala się następna bit(64) i tak do &quot;7&quot;   a (bajt&lt;&lt;7) oznacz powrót do &quot;1&quot;  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /> , a co z   PORTA=~bajt;   to ostatnia dioda,<br />a może   (bajt&lt;&lt;7) przy zapaleniu się ostatniej powrót do pierwszej.<br /><br />Pozd.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 24 paź 2016, o 23:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-10-24T21:39:17+01:00</updated>
<published>2016-10-24T21:39:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172701#p172701</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172701#p172701"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172701#p172701"><![CDATA[
Cieszę się, że &quot;metoda tablicowa&quot; okazała się banalnie prosta.  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br />Tak samo będzie z wersją wojskową.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Myślę, że powinieneś to sobie rozpisać na kartce papieru, krok po kroku. <br />Poniżej wersja wojskowa w prawo:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />uint8_t bajt;<br /><br />int main(void){<br /><br />DDRA = 0xFF;<br />PORTA = 0xFF;<br /><br />while(1){<br /><br />bajt = ( (bajt&gt;&gt;1) | ( bajt&lt;&lt;7 ) );<br />PORTA = ~bajt;<br />bajt++;<br /><br />_delay_ms(800);<br /><br />}<br />}[/syntax]<br /><br />Dlaczego teraz działa?  <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=7157">anshar</a> — 24 paź 2016, o 21:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-10-24T20:32:00+01:00</updated>
<published>2016-10-24T20:32:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172688#p172688</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172688#p172688"/>
<title type="html"><![CDATA[Re: Prozba o pomoc led]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16602&amp;p=172688#p172688"><![CDATA[
Mam jeszcze ptyanie dotyczące Wersji Wojskowej dlaczego podczas przewijania w prawo <br /> bajt = ( (bajt&gt;&gt;1) | ( bajt&lt;&lt;7 ) );<br />diody świecą:<br />1-pierwsza po  prawej<br />2-pierwsza po lewej             <br />3-druga po lewej itd. do szóstej i pentla zaczyna się od nowa.<br /><br />Pozd.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 24 paź 2016, o 20:32</p><hr />
]]></content>
</entry>
</feed>