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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-10-25T11:12:02+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8939&amp;mode</id>
<entry>
<author><name><![CDATA[The River]]></name></author>
<updated>2014-10-25T11:12:02+01:00</updated>
<published>2014-10-25T11:12:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100628#p100628</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100628#p100628"/>
<title type="html"><![CDATA[Re: Sterowanie kilkoma i wyjściami i wejściami na jednym por]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100628#p100628"><![CDATA[
&quot;^&quot; oznacza operację XOR różni się ona od zwykłego OR tym że w tabeli prawdy dla 1 XOR 1 wynik jest 0 a nie 1 jak dla OR, inaczej mówiąc XOR daje w wyniku 0 gdy na wejściu są takie same stany (00 lub 11), a kiedy są różne daje 1. <br /><br />(1&lt;&lt;PC2) działa na takiej zasadzie że wykonujesz przesunięcie bitowe na jakimś rejestrze tymczasowym (na poziomie assemblera np. R16) , on ma same zera a ty przesuwasz mu 1 na pozycję w tym przypadku nr 2 (bo PC2 ma swoją definicję jako wartość 2). Więc ten rejestr trymczasowy będzie wyglądał teraz tak 000 0100<br /><br />Dalej robisz operację XOR pomiędzy rejestrami PORTC i wcześniej wspomnianym rejestrze tymczasowym. <br />Więc z każdym wykonaniem<br />[syntax=c]PORTC ^= (1&lt;&lt;PC2);[/syntax]<br /><br />będziesz zmieniał stan na drugiej pozycji (licząc pierwszą jako 0) czyli na porcie PC2, bo jeśli będzie 0 to 0 EOR 1 da w wyniku 1. Więc wpiszesz na tej pozycji 1 i następnym razem wykonasz ponownie tą operację ale tym razem będzie 1 EOR 1 czyli da 0. I tak w kółko. <br /><br />Dokładniej poczytaj sobie to w pierwszej książce Mirka tzw. &quot;Blue book'u&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Jest to wszystko bardzo ładnie wyjaśnione.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=508">The River</a> — 25 paź 2014, o 11:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jakub113a]]></name></author>
<updated>2014-10-25T10:50:16+01:00</updated>
<published>2014-10-25T10:50:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100625#p100625</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100625#p100625"/>
<title type="html"><![CDATA[Re: Sterowanie kilkoma i wyjściami i wejściami na jednym por]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100625#p100625"><![CDATA[
Przepraszam kolego, kod który pisałem w poście kiladziesiąt minut temu działa, twój również <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Wielkie dzięki, jedno pytanie jeszcze, co oznacza &quot;^=&quot;, i troszkę nie rozumiem tego &quot;&lt;&lt;&quot; wiem, że to przesunięcie bitu ale nie rozumiem zasady jego działania. Pozdrawiam<br /><br />edit: Już wszystko wiem, jeszcze raz dzięki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6282">jakub113a</a> — 25 paź 2014, o 10:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[The River]]></name></author>
<updated>2014-10-25T10:33:58+01:00</updated>
<published>2014-10-25T10:33:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100621#p100621</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100621#p100621"/>
<title type="html"><![CDATA[Re: Sterowanie kilkoma i wyjściami i wejściami na jednym por]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100621#p100621"><![CDATA[
A przytrzymaj przycisk kilka sekund i zobacz wtedy co się stanie. Teraz program w takiej postaci &quot;siedzi&quot; cały czas w &quot;else&quot; wykonyjąc opóźninie i ustawienia bitów więc dlatego gubisz odczyt przycisku który trwa zaledwie 100 ms w twoim przypadku. Spróbuj sobie przetestować taką pętlę while:<br /><br />[syntax=c]while(1)<br />{<br />   if(!(PINC &amp; (1&lt;&lt;PC5)))<br />   {<br />       _delay_ms(100);<br />       if(!(PINC &amp; (1&lt;&lt;PC5)))<br />      {<br />           PORTC ^= (1&lt;&lt;PC2);<br />       }<br />}[/syntax]<br /><br />W ten sposób sprawdzisz czy poprawnie działa w twoim przypadku odczyt przycisku. Jeśli działa poprawnie to każde jego naciśnięcie powinno zmieniać stan na PC2<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=508">The River</a> — 25 paź 2014, o 10:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jakub113a]]></name></author>
<updated>2014-10-25T10:21:24+01:00</updated>
<published>2014-10-25T10:21:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100617#p100617</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100617#p100617"/>
<title type="html"><![CDATA[Re: Sterowanie kilkoma i wyjściami i wejściami na jednym por]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100617#p100617"><![CDATA[
Napisałem taki kod żeby można było nim łatwiej operować: [syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/delay.h&gt;<br /><br />int main(void){<br /><br />    DDRC |= (1&lt;&lt;PC0)|(1&lt;&lt;PC1)|(1&lt;&lt;PC2)|(1&lt;&lt;PC3);<br />PORTC |= (1&lt;&lt;PC5);<br /><br />    while(1){<br /><br />if(!(PINC &amp; (1&lt;&lt;PC5)))<br />{<br />_delay_ms(100);<br /> if(!(PINC &amp; (1&lt;&lt;PC5)))<br />{<br />        PORTC |= (1&lt;&lt;PC3);<br />        _delay_ms(200);<br />        PORTC &amp;= ~(1&lt;&lt;PC3);<br />        _delay_ms(200);<br />}<br />}<br />else{<br />PORTC |= (1&lt;&lt;PC2);<br />_delay_ms(200);<br />PORTC &amp;= ~(1&lt;&lt;PC2);<br />_delay_ms(200);<br />}<br />                        <br />    }<br />}[/syntax]<br /><br />I niezależnie od tego co robię ciągle miga dioda PC2.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6282">jakub113a</a> — 25 paź 2014, o 10:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[The River]]></name></author>
<updated>2014-10-25T10:00:04+01:00</updated>
<published>2014-10-25T10:00:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100608#p100608</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100608#p100608"/>
<title type="html"><![CDATA[Re: Sterowanie kilkoma i wyjściami i wejściami na jednym por]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100608#p100608"><![CDATA[
Zauważ że jeśli naciśniesz przycisk do diody zapalą ci się jedynie na chwilkę (ewentualnie dodaj tam opóźnienie) i poten będzie wykonywany cały czas elese. <br />Czy ustawiłeś podciągnięcie od którym ci mówiłem ? <br />Dodatkowo zwróć uwagę na to że wpisując [syntax=c]PORTC = 15;[/syntax] kasujesz to podciągnięcie, które wcześniej ustawiałeś.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=508">The River</a> — 25 paź 2014, o 10:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jakub113a]]></name></author>
<updated>2014-10-25T09:54:04+01:00</updated>
<published>2014-10-25T09:54:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100606#p100606</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100606#p100606"/>
<title type="html"><![CDATA[Re: Sterowanie kilkoma i wyjściami i wejściami na jednym por]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100606#p100606"><![CDATA[
Dzięki za pomoc. Jednak wciąż coś jest nie tak. Pokazują się dziwne rzeczy. Przycisk mam podłączony do Atmegi i do masy. A diody tak jak napisałeś - anodą do atmegi i katodą do masy. <br /><br />Podłączam układ do zasilania. Diody zrobią jeden cykl i wszystkie się zaświecą. Gdy wcisnę klawisz nic się nie dzieje, nawet jak dłużej przytrzymam. ALE co ciekawe wystarczy, że lekko dotknę kabel łączący switch z atmegą, to diody robią cykl, i jeśli znów nie poruszę kablem to będą świecić w nieskończoność. A teraz co bardzo dziwne - wystarczy że dotknę atmege palcem (!) to diody robią cykle. Spalony układ ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6282">jakub113a</a> — 25 paź 2014, o 09:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[The River]]></name></author>
<updated>2014-10-25T09:05:07+01:00</updated>
<published>2014-10-25T09:05:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100591#p100591</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100591#p100591"/>
<title type="html"><![CDATA[Re: Sterowanie kilkoma i wyjściami i wejściami na jednym por]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100591#p100591"><![CDATA[
Pierwsze pytanie jak masz podłączone diody do portu ? Anodą do atmegi i katodą do masy ? <br /><br />Druga rzeczy to poczytaj o drganiach styków. Bo ten warunek<br />[syntax=c]if(!(PINC &amp; (1&lt;&lt;PC5)))[/syntax]<br />wykona się bardzo szybko. <br />A w chwili kiedy ty naciskasz przycisk tam przez dłuższą chwilę (dłuższą w porównaniu do czasu wykonania powyższego sprawdzenia) mogą pojawiać się naprzemiennie stany 0 i 1 dlatego  odczytaj sobie wciśnięcie przycisku tak:<br />[syntax=c]if(!(PINC &amp; (1&lt;&lt;PC5)))<br />{<br />    _delay_ms(100);<br />   if(!(PINC &amp; (1&lt;&lt;PC5))) <br />   {<br />       // teraz wykonujesz to co tam ma być wykonane<br />   }<br />}[/syntax]<br /><br />Teraz przez ten okres 100 ms po pierwszym wykryciu zetknięcia się styków przycisku na pewno sytuacja się ustabilizuje i za drugim razem odczytasz już poprawny stan, to raz a dwa ten warunek nie wykona ci się kilka razy (chyba że długo będziesz trzymał przycisk)<br /><br />Aha i jeszcze odnośnie podłączenia przycisku, skoro odczytujesz go jako poziom niski zakładam że tak masz go własnie podłączonego a więc przydało by się podciągnięcie do VCC na tym wejściu<br />[syntax=c]PORTC |= (1&lt;&lt;PC5);[/syntax]<br />Teraz gdy przycisk nie jest wciśnięty odczytasz na tym wejściu stan wysoki, a gdy zewrzesz go przyciskiem do masy - stan niski.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=508">The River</a> — 25 paź 2014, o 09:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jakub113a]]></name></author>
<updated>2014-10-25T08:01:16+01:00</updated>
<published>2014-10-25T08:01:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100586#p100586</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100586#p100586"/>
<title type="html"><![CDATA[Re: Sterowanie kilkoma i wyjściami i wejściami na jednym por]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100586#p100586"><![CDATA[
[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/delay.h&gt;<br /><br />int main(void){<br /><br />    DDRC |= (1&lt;&lt;PC0)|(1&lt;&lt;PC1)|(1&lt;&lt;PC2)|(1&lt;&lt;PC3);<br /><br />uint8_t tab &#91;&#93; = {1,2,4,8,0};<br />uint8_t i;<br /><br />    while(1){<br /><br />if(!(PINC &amp; (1&lt;&lt;PC5)))<br />{<br />PORTC=15; //załóżmy, że po wciśnięciu LED mają się zapalić<br />}<br />else{<br />for (i=0; i&lt;5; i++)<br />{<br />PORTC = tab&#91;i&#93;;<br />_delay_ms(500);<br />}<br />}                     <br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6282">jakub113a</a> — 25 paź 2014, o 08:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-10-24T22:51:37+01:00</updated>
<published>2014-10-24T22:51:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100565#p100565</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100565#p100565"/>
<title type="html"><![CDATA[Re: Sterowanie kilkoma i wyjściami i wejściami na jednym por]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100565#p100565"><![CDATA[
Bez kodu ciężko pomóc, ale trzeba pamiętać, aby nie modyfikować 6-tego bitu (licząc od 1) rejestru PORTC, który jest odpowiedzialny za ewentualny pull-up przycisku. Może się zdarzyć w kodzie np. &quot;PORTC ^= 0xFF&quot;, który ma migać diodami, ale również &quot;mruga&quot; pull-up'em...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 24 paź 2014, o 22:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danny]]></name></author>
<updated>2014-10-24T22:13:57+01:00</updated>
<published>2014-10-24T22:13:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100562#p100562</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100562#p100562"/>
<title type="html"><![CDATA[Re: Sterowanie kilkoma i wyjściami i wejściami na jednym por]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100562#p100562"><![CDATA[
To niech pokaże kolega jak kombinuje, znajdziemy błąd w kodzie...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1505">danny</a> — 24 paź 2014, o 22:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jakub113a]]></name></author>
<updated>2014-10-24T22:11:02+01:00</updated>
<published>2014-10-24T22:11:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100561#p100561</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100561#p100561"/>
<title type="html"><![CDATA[Sterowanie kilkoma i wyjściami i wejściami na jednym porcie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8939&amp;p=100561#p100561"><![CDATA[
Witam. Tak jak w temacie. Mam banalny problem, ale nie wiem jak go rozwiązać. Mianowicie, załóżmy że na PC0, PC1 i PC2 mam diody a na PC5 mam switch. Skoro domyślnie wszystkie porty ustawione są na wejścia to wystarczy PC 1-3 ustawić na wyjścia. Później wystarczy ustawić warunek dla przycisku if(!(PINC &amp; (1&lt;&lt;PC5))) no i powinno działać. Ale coś nie bardzo, kombinuje z tym i kombinuje. Pokaże ktoś przykładowy kod ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6282">jakub113a</a> — 24 paź 2014, o 22:11</p><hr />
]]></content>
</entry>
</feed>