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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-08-15T19:58:48+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=8150&amp;mode</id>
<entry>
<author><name><![CDATA[moscow18-1990]]></name></author>
<updated>2014-08-15T19:58:48+01:00</updated>
<published>2014-08-15T19:58:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91638#p91638</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91638#p91638"/>
<title type="html"><![CDATA[Re: Prośba o wyjaśnienie jednej linijki kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91638#p91638"><![CDATA[
Właśnie link do tego poradnika naprowadził mnie na sedno sprawy. Obejrzałem jeszcze poradnik Pana Mirosława o maskowaniu i już wszystko jest dla mnie jasne. Dziękuje też za objaśnienia. I tak w ogóle poradniki w połączeniu z niebieską książką są świetną sprawą.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5472">moscow18-1990</a> — 15 sie 2014, o 19:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2014-08-15T18:32:01+01:00</updated>
<published>2014-08-15T18:32:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91625#p91625</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91625#p91625"/>
<title type="html"><![CDATA[Re: Prośba o wyjaśnienie jednej linijki kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91625#p91625"><![CDATA[
Po pierwsze, pewnie Ci  zaraz uwagę zwrócą ze kod umieszczamy w listingu &quot;syntax c&quot; wiec spróbuj poprawić szybciej, hehe<br />Twój kod:<br /><br />[syntax=c]#include&lt;avr/io.h&gt;<br />#include&lt;util/delay.h&gt;<br /><br />#define LED_DIODA (1&lt;&lt;PB1)<br />#define LED_ZMIANA PORTB ^= LED_DIODA<br />#define PRZYCISK_PIN (1&lt;&lt;PB2)<br />#define PRZYCISK_DOWN !(PINB &amp; PRZYCISK_PIN)// Negacja logiczna &quot;!&quot; po lewej stronie, nierozumiem tego co się tu odbywa<br />#define LED_DIODA2 (1&lt;&lt;PD3)<br />#define LED_DIODA3 (1&lt;&lt;PC5)<br /><br />int main(void)<br />{<br />DDRB |= LED_DIODA; // wyjcie na PB1<br />PORTB |= LED_DIODA; // ustawiony jako wyjcie<br />DDRB &amp;= ~PRZYCISK_PIN; // &quot;zerowanie bitu&quot;, w makrodefinicji ustawiony jako wyjscie po &quot;zerowaniu bitu&quot; wejscie<br />PORTB |= PRZYCISK_PIN; // podciąganie do VCC - dlaczego? PB2 ustawiony po &quot;zerowaniu bitu&quot; jako wejscie wiec ustawienie teraz 1...<br />// dalej... na tym bicie spowoduje uruchomienie znajdujacego sie wewnatrz układu podciagania do VCC czyli podsumowujac...<br />//dalej... jezeli poprzez DDRx ustawie wejscie a poprzez PORTx wyjscie to w ten sposob podciagne do VCC<br />DDRD |= LED_DIODA2;<br />PORTD &amp;= ~LED_DIODA2;<br />DDRC |= LED_DIODA3;<br />PORTC |= LED_DIODA3;<br />while(1)<br />{<br />if(PRZYCISK_DOWN)<br />{<br />_delay_ms(80);<br /><br />if(PRZYCISK_DOWN)<br /><br />{<br />LED_ZMIANA;<br />_delay_ms(200);<br />}<br /><br /><br />}<br /><br />}<br /><br />}[/syntax]<br /><br />Na początku masz definicje pre-procesora, które ułatwiają i skracają wpisywanie poszczególnych pinów i portów w kodzie. Wszystkie przyciski muszą byc ustawione jako wyjscia, domyślnie po resecie same się ustawiają ale dla zasady dobrze jest pisać zeby łatwiej potem rozumieć kod.<br /><br />[syntax=c]DDRB |= LED_DIODA; // wyjcie na PB1<br />PORTB |= LED_DIODA; // ustawiony jako wyjcie<br />DDRB &amp;= ~PRZYCISK_PIN; // &quot;zerowanie bitu&quot;, w makrodefinicji ustawiony jako wyjscie po &quot;zerowaniu bitu&quot; wejscie<br />PORTB |= PRZYCISK_PIN; // podciąganie do VCC - dlaczego? PB2 ustawiony po &quot;zerowaniu bitu&quot; jako wejscie wiec[/syntax]<br /><br />Poprzez DDRx - ustawiasz kierunek portu wejście [syntax=c]DDRx &amp;= ~(1&lt;&lt;PIN)[/syntax] czy wyjscie  [syntax=c]DDRx |= (1&lt;&lt;PIN)[/syntax]<br />Poprzez PORTx - ustawiasz podciągniecie rezystora wewnętrznego, inaczej byś to musiał robić poprzez fizyczne podciąganie - tak jest łatwiej.  [syntax=c]PORTx &amp;= ~ (1&lt;&lt;PIN)[/syntax] bez podciągnięcia,  [syntax=c]PORTx |=  (1&lt;&lt;PIN)[/syntax] podcigniecie do VCC.<br /><br />[syntax=c]#define PRZYCISK_DOWN !(PINB &amp; PRZYCISK_PIN)[/syntax]<br />Zastosowna jest tu maska bitowa, warunek w nawiasie sprawdza stan tylko i wyłącznie na pinie PRZYCISK_PIN, dzieki temu na pozostałych pinach mozesz sobie pod pin co chcesz i nie maja wpływu na klawisz.  &quot;!&quot;  to negacja, czyli w instrukcji warunkowej, np. &quot;if&quot; bedzie sprawdzane czy cos nie jest &quot;prawdą&quot; - w tym przypadku czy jest stan niski na pinie - bo wcisniety klawisz do masy daje stan logiczny &quot;0&quot; na pinie uC.<br /><br /><br />------------<br /><br />Mirek mnie wyprzedził ; P<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 15 sie 2014, o 18:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-08-15T18:17:26+01:00</updated>
<published>2014-08-15T18:17:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91623#p91623</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91623#p91623"/>
<title type="html"><![CDATA[Re: Prośba o wyjaśnienie jednej linijki kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91623#p91623"><![CDATA[
<div class="quotetitle">moscow18-1990 napisał(a):</div><div class="quotecontent"><br />Nie za bardzo wiem jak rozpisać PINB. Generalnie chodzi o operacje na bitach i wyjaśnienie &quot;idei&quot; tego jak działa sprawdzanie stanu niskiego poprzez operacje na tych bitach.<br /></div><br /><br />oglądaj poradniki na moim blogu a szczególnie ten:<br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2014/05/if-pind-operacje-bitowe-logiczne-o-co.html" >http://mirekk36.blogspot.com/2014/05/if ... -o-co.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 sie 2014, o 18:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[luki]]></name></author>
<updated>2014-08-15T18:13:41+01:00</updated>
<published>2014-08-15T18:13:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91622#p91622</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91622#p91622"/>
<title type="html"><![CDATA[Re: Prośba o wyjaśnienie jednej linijki kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91622#p91622"><![CDATA[
Witaj listingi kodu wstawiaj zgodnie z tym co masz w edytorze.<br />Wszystko opisane tutaj <a href="http://forum.atnel.pl/topic7402.html"  class="postlink">http://forum.atnel.pl/topic7402.html</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=273">luki</a> — 15 sie 2014, o 18:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow18-1990]]></name></author>
<updated>2014-08-15T18:20:51+01:00</updated>
<published>2014-08-15T18:08:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91621#p91621</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91621#p91621"/>
<title type="html"><![CDATA[Prośba o wyjaśnienie jednej linijki kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8150&amp;p=91621#p91621"><![CDATA[
Mam problem ze zrozumieniem  jednej linijki kodu, a bardziej operacji na poszczególnych bitach. Chodzi o obsługę klawiszy typu micro-switch. Jestem początkujący dlatego proszę o zrozumienie. Chodzi mi o fragment:  !(PINB &amp; PRZYCISK_PIN).<br /><br /><br /><br />[syntax=c]#include&lt;avr/io.h&gt;<br />#include&lt;util/delay.h&gt;<br /><br />#define LED_DIODA (1&lt;&lt;PB1)<br />#define LED_ZMIANA PORTB ^= LED_DIODA<br />#define PRZYCISK_PIN (1&lt;&lt;PB2)<br />#define PRZYCISK_DOWN !(PINB &amp; PRZYCISK_PIN)// Negacja logiczna &quot;!&quot; po lewej stronie, nierozumiem tego co się tu odbywa<br />#define LED_DIODA2 (1&lt;&lt;PD3)<br />#define LED_DIODA3 (1&lt;&lt;PC5)<br /><br />int main(void)<br />{<br />DDRB |= LED_DIODA; // wyjcie na PB1<br />PORTB |= LED_DIODA; // ustawiony jako wyjcie<br />DDRB &amp;= ~PRZYCISK_PIN; // &quot;zerowanie bitu&quot;, w makrodefinicji ustawiony jako wyjscie po &quot;zerowaniu bitu&quot; wejscie<br />PORTB |= PRZYCISK_PIN; // podciąganie do VCC - dlaczego? PB2 ustawiony po &quot;zerowaniu bitu&quot; jako wejscie wiec ustawienie teraz 1...<br />// dalej... na tym bicie spowoduje uruchomienie znajdujacego sie wewnatrz układu podciagania do VCC czyli podsumowujac...<br />//dalej... jezeli poprzez DDRx ustawie wejscie a poprzez PORTx wyjscie to w ten sposob podciagne do VCC<br />DDRD |= LED_DIODA2;<br />PORTD &amp;= ~LED_DIODA2;<br />DDRC |= LED_DIODA3;<br />PORTC |= LED_DIODA3;<br />while(1)<br />{<br />if(PRZYCISK_DOWN)<br />{<br />_delay_ms(80);<br /><br />if(PRZYCISK_DOWN)<br /><br />{<br />LED_ZMIANA;<br />_delay_ms(200);<br />}<br /><br /><br />}<br /><br />}<br /><br />}[/syntax]<br /><br />Wnoskuję że (1&lt;&lt;PB2) można zapisać na ośmiu bitach jako: 0000 0010 , pojawia sie iloczyn logiczny czyli operacja wykona się pomiędzy (1&lt;&lt;PB2) a PINB. Nie za bardzo wiem jak rozpisać PINB. Generalnie chodzi o operacje na bitach i wyjaśnienie &quot;idei&quot; tego jak działa sprawdzanie stanu niskiego poprzez operacje na tych bitach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5472">moscow18-1990</a> — 15 sie 2014, o 18:08</p><hr />
]]></content>
</entry>
</feed>