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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9924&amp;mode</id>
<entry>
<author><name><![CDATA[tom251]]></name></author>
<updated>2014-12-30T12:28:07+01:00</updated>
<published>2014-12-30T12:28:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111252#p111252</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111252#p111252"/>
<title type="html"><![CDATA[Re: lcd_readHalf(void) pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111252#p111252"><![CDATA[
Dzięki Wszystkim! Sprawa jasna <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />. Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6679">tom251</a> — 30 gru 2014, o 12:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bogdanc]]></name></author>
<updated>2014-12-30T11:22:20+01:00</updated>
<published>2014-12-30T11:22:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111241#p111241</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111241#p111241"/>
<title type="html"><![CDATA[Re: lcd_readHalf(void) pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111241#p111241"><![CDATA[
PINx - to jest rejstr wejsciowy pinow mikrokontrolera.<br />czyli zapis: PIN(x) gdzie x to numer portu.<br />Np. PIND czyli rejstr wejsciowy portu D.<br /><br />Załóżmy że mamy nastepujace stany logiczne na tym porcie: 0b00000110.(gdzie najstarszy bit to pin7 a najmlodszy to pin 0)<br /><br />Teraz zajmiemy sie naszym iloczynem &amp;. (Tutaj musisz sobie poczytac podstawy o operacjach na bitach.) Ten znak to jest iloczyn.<br />Czyli: &amp; (1&lt;&lt;LCD_4) to nic innego jak przesuniecie bitowe (tu rownież odslyam jw).<br /><br />LCD_D4 to nic innego jak stala zdefiniowana wczesniej przez nas ,okreslajaca na ktorym pinie portu mamy linie D4 np 2 czyli odzwierciedlenie tego binarnie to: 0b00000010.<br /> <br />Czyli nasz zapis iloczynu &amp; <br />0b00000110<br />0b00000010 &amp;<br />_____________<br />0b00000010<br /><br />Zwroci nam :0b00000010 czyli w ten sposob sprawdzilismy ze na naszym Pinie 2 portu D jest logiczna 1.<br />Czyli nasz warunek jest prawdziwy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1319">bogdanc</a> — 30 gru 2014, o 11:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tom251]]></name></author>
<updated>2014-12-30T10:15:17+01:00</updated>
<published>2014-12-30T10:15:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111233#p111233</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111233#p111233"/>
<title type="html"><![CDATA[Re: lcd_readHalf(void) pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111233#p111233"><![CDATA[
Dzięki za szybką odpowiedź. Forum ma się więc dobrze <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> . <br />Więc fragment:<br />[syntax=c]PIN(LCD_D4PORT)[/syntax]<br />nie zawiera żadnej konfiguracji bitów, a jest tylko wskazaniem portu i pinu który mam być badany?<br />Natomiast ciąg dalszy:<br />[syntax=c]&amp;(1&lt;&lt;LCD_D4)[/syntax]<br />nie powoduje maskowania  poprzedniej konfiguracji PIN(LCD_D4PORT), a jedynie aktywację bitu 4? Przy badaniu badanie stanu przycisku następowało maskowanie wcześniej ustalonego stanu PIN, a następnie negacja wyniku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6679">tom251</a> — 30 gru 2014, o 10:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-12-29T21:58:42+01:00</updated>
<published>2014-12-29T21:58:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111171#p111171</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111171#p111171"/>
<title type="html"><![CDATA[Re: lcd_readHalf(void) pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111171#p111171"><![CDATA[
Witam<br />Jest to podobne do sprawdzenia naciśnięcia klawisza tyle że bez negacji. Po if'ie podajemy który PIN ma czytać ( PIN(LCD_DxPORT) ) i sprawdzamy czy czy jest tam jedynka ( 1&lt;&lt;LCD_Dx). Jest tam operator &amp; więc po &quot;matematycznemu&quot; iloczyn (AND). Końcowy &quot;result&quot; można było by zapisać np.: result |= (1&lt;&lt;0)|(...).  W tych miejscach ( na tych bitach ) gdzie wystąpiła 1 będzie jeden a gdzie jedynki nie było pozostanie zainicjowane 0 ( uint8_t result= 0; )<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 29 gru 2014, o 21:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rajmund96]]></name></author>
<updated>2014-12-29T21:56:18+01:00</updated>
<published>2014-12-29T21:56:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111169#p111169</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111169#p111169"/>
<title type="html"><![CDATA[Re: lcd_readHalf(void) pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111169#p111169"><![CDATA[
Po pierwsze operator &amp; nie wyzeruje nam wszystkiego. Służy on nam do pozyskania wartości tylko jednego konkretnego bitu w rejestrze PINx, a to za sprawą (1&lt;&lt;LCD_D4) . Czyli warunek<br />[syntax=c]if(PIN(LCD_D4PORT)&amp;(1&lt;&lt;LCD_D4)) <br />}[/syntax]<br />da nam w rezultacie wartość tylko konkretnego bitu w rejestrze PINx czyli stan tego pinu, któremu odpowiada ten bit. <br />A wygląda to tak:<br />załóżmy że LCD_D4 jest zdefiniowane jako 4 ( np. PB4 )<br />Temu wyrażeniu [syntax=c]1&lt;&lt;LCD_D4[/syntax]odpowiada zatem 0b 0000 0001 &lt;&lt; 4 przesuwanie bitowe to nic innego jak mnożenie przez 2 czyli  w rezultacie da nam to liczbę <br />0b 0001 0000 z kolei dalsza operacja czyli [syntax=c]PIN(LCD_D4PORT)&amp;(1&lt;&lt;LCD_D4)[/syntax] powoduje wyzerowanie wszystkich bitów odczytanych z rejestru PINx oprócz właśnie tego 5 bitu dlatego że 1 &amp; ( cokolwiek ) zawsze zwróci ( cokolwiek ) <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Nie wiem czy moje tłumaczenie jest zrozumiałe, ale mam nadzieję, że coś tam pomoże <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=2275">rajmund96</a> — 29 gru 2014, o 21:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tom251]]></name></author>
<updated>2014-12-29T21:11:20+01:00</updated>
<published>2014-12-29T21:11:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111153#p111153</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111153#p111153"/>
<title type="html"><![CDATA[lcd_readHalf(void) pytanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9924&amp;p=111153#p111153"><![CDATA[
Witam,<br />mam pytanie z dotyczące fragmentu przykładu z wyświetlaczem LCD:<br />[syntax=c]static inline uint8_t lcd_readHalf(void) <br />{<br />uint8_t result=0;<br /> if(PIN(LCD_D4PORT)&amp;(1&lt;&lt;LCD_D4)) result |=(1&lt;&lt;0).<br />return result;<br />}[/syntax]<br />Rozumiem, że zostaje sprawdzony stan panujący na pinie i jeśli jest różny od 0, to ustawiany jest bit w młodszej części zmiennej result na stan wysoki. <br />Nie jest dla mnie jasne co się dzieje w warunku if(PIN...Użyty jest tam operator &amp;, który zawsze wyzeruje mi zawartość w nawiasie po if. Czy ktoś mógłby wyjaśnić lub rozpisać kiedy otrzymam w tym warunku &quot;true&quot; po którym result przyjmie stan wysoki?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6679">tom251</a> — 29 gru 2014, o 21:11</p><hr />
]]></content>
</entry>
</feed>