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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-07-31T15:27:02+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=15883&amp;mode</id>
<entry>
<author><name><![CDATA[Pawel Frackowiak]]></name></author>
<updated>2016-07-31T15:27:02+01:00</updated>
<published>2016-07-31T15:27:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165122#p165122</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165122#p165122"/>
<title type="html"><![CDATA[Re: Obsługa kilku klawiszy na ATMega32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165122#p165122"><![CDATA[
Problem rozwiązany!<br /><br />Przyczyną takiego zachowania wejść było użycie portu na którym aktywny był JTAG, wystarczyło go wyłączyć i wszystkie wejścia zaczęły działać jak ta lala.<br />Guzik OK działał bo jako jedyny nie był podłączony pod piny interfejsu JTAG.<br /><br />Dzięki za wszelką pomoc!<br />Pozdrawiam!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14571">Pawel Frackowiak</a> — 31 lip 2016, o 15:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-07-29T16:03:07+01:00</updated>
<published>2016-07-29T16:03:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165017#p165017</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165017#p165017"/>
<title type="html"><![CDATA[Re: Obsługa kilku klawiszy na ATMega32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165017#p165017"><![CDATA[
Witam<br />Przynajmniej dla pewności i czytelności oddziel nawiasami właściwe pary w wyrażeniu:<br />[syntax=c]if ( bit_is_clear(KEYPAD, KEY_OK) &amp;&amp; klawisz.ok_key == false )[/syntax]<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 29 lip 2016, o 16:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Piotrek_P]]></name></author>
<updated>2016-07-29T15:55:00+01:00</updated>
<published>2016-07-29T15:55:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165016#p165016</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165016#p165016"/>
<title type="html"><![CDATA[Re: Obsługa kilku klawiszy na ATMega32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165016#p165016"><![CDATA[
Spróbuj dać na początku funkcji main jakiegoś krótkiego delay'a np. 50ms i zobacz czy będzie lepiej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=290">Piotrek_P</a> — 29 lip 2016, o 15:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Pawel Frackowiak]]></name></author>
<updated>2016-07-29T15:12:32+01:00</updated>
<published>2016-07-29T15:12:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165015#p165015</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165015#p165015"/>
<title type="html"><![CDATA[Re: Obsługa kilku klawiszy na ATMega32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165015#p165015"><![CDATA[
Rozumiem, że chodzi o to że jak wcisnąłem jeden guzik to nie ma sensu sprawdzać drugiego, trzeciego i czwartego i dokładnie o to mi chodzi. Problem w tym że gdy program startuje i żaden przycisk nie jest wciśnięty czyli oba wyrażenia (klawisz.ok_key, klawisz.up_key) są false ( bo z taką wartością są inicjowane) to funkcja pobierz_klawisz i tak w wyniku daje true co według mnie nie jest poprawnym zachowaniem chyba, że kompletnie nie rozumiem tego co napisałeś wyżej.<br /><br />Generalnie moim zamierzeniem jest osiągnięcie wartości logicznej true jako wynik funkcji pobierz_klawisz() jeśli wcisnę którykolwiek klawisz, a gdy żaden nie jest wciśnięty wynikiem ma być false.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14571">Pawel Frackowiak</a> — 29 lip 2016, o 15:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[brat_kamyka]]></name></author>
<updated>2016-07-29T11:32:23+01:00</updated>
<published>2016-07-29T11:32:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165005#p165005</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165005#p165005"/>
<title type="html"><![CDATA[Re: Obsługa kilku klawiszy na ATMega32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=165005#p165005"><![CDATA[
Język C wykonuje skrócone obliczanie wyrażeń logicznych - to znaczy, oblicza wyrażenie tylko tak długo, jak nie wie, jaka będzie jego ostateczna wartość. To znaczy, idzie od lewej do prawej obliczając kolejne wyrażenia (dodatkowo na kolejność wpływ mają nawiasy) i gdy będzie miał na tyle informacji, by obliczyć wartość całości, nie liczy reszty. Może to wydawać się niejasne, ale przyjrzyjmy się wyrażeniom logicznym:<br /><br />[syntax=c]A &amp;&amp; B[/syntax]  <br />Jeśli A jest fałszywe, nie trzeba obliczać B w pierwszym wyrażeniu, bo koniunkcja fałszu i dowolnego wyrażenia zawsze da fałsz<br /><br /><br />[syntax=c]A || B[/syntax]    <br />Analogicznie, w drugim przykładzie, jeśli A jest prawdziwe, to całe wyrażenie jest prawdziwe i wartość B nie ma znaczenia.<br /><br />[syntax=c]bool pobierz_klawisz()<br />{<br />  // pominięto dużo kodu <br /> <br />        if ( klawisz.ok_key == true || klawisz.up_key == true ) // &lt;|----------------- widzisz ? A||B<br />        {<br />                return true;<br />        }<br />        else<br />        {<br />                return false;<br />        }[/syntax]<br /><br /><br />Innymi słowy przemyśl jakim warunkiem logicznym osiągniesz to co zamierzasz (logiczne &quot;i&quot; czy &quot;lub&quot;).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6029">brat_kamyka</a> — 29 lip 2016, o 11:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Pawel Frackowiak]]></name></author>
<updated>2016-07-28T18:24:35+01:00</updated>
<published>2016-07-28T18:24:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=164958#p164958</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=164958#p164958"/>
<title type="html"><![CDATA[Obsługa kilku klawiszy na ATMega32]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15883&amp;p=164958#p164958"><![CDATA[
Witam!<br /><br />Mam nurtujący mnie problem z obsługą dwóch i więcej klawiszy podłączonych do ATMega32.<br />Polega on na tym, że w poniższym programie (w zasadzie jego części, ale ta część właśnie nie działa jak należy) dzieją się rzeczy, których ogarnąć nie potrafię. <br /><br />[syntax=c]DDRD |= _BV(GRZALKA);// PD5 ustawione jako wyjście<br />PORTD &amp;= ~_BV(GRZALKA);// PD5 pracuje jako wyjście bez zasilania<br /><br />DDRC &amp;= ~_BV(KEY_OK);// PC1 ustawione jako wejście<br />PORTC |= _BV(KEY_OK);// PC1 pracuje jako wejscie z wewnetrznym pull'upem<br /><br />DDRC &amp;= ~_BV(KEY_UP);// PC3 ustawione jako wejście<br />PORTC |= _BV(KEY_UP);// PC3 pracuje jako wejscie z wewnetrznym pull'upem<br /><br /><br />klawisz.ok_key = false;<br />klawisz.up_key = false;<br /><br /><br /><br /><br />while(1)// Pętla główna programu<br />{<br />// Pobranie klawisza<br />wyswietlane_menu = pobierz_klawisz();<br />if ( wyswietlane_menu == true )<br />{<br />PORTD |= _BV(GRZALKA); <br />}<br />else<br />{<br />PORTD &amp;= ~_BV(GRZALKA);<br />}<br />}<br /><br /><br />bool pobierz_klawisz()<br />{<br />// Wcisniecie klawisza OK<br />if ( bit_is_clear(KEYPAD, KEY_OK) &amp;&amp; klawisz.ok_key == false )<br />{<br />_delay_ms(50);<br />if ( bit_is_clear(KEYPAD, KEY_OK) &amp;&amp; klawisz.ok_key == false )<br />{<br />klawisz.ok_key = true ;<br />}<br />}<br />else<br />{<br />// Puszczenie klawisza OK<br />if ( bit_is_set(KEYPAD, KEY_OK) &amp;&amp; klawisz.ok_key == true )<br />{<br />_delay_ms(50);<br />if ( bit_is_set(KEYPAD, KEY_OK) &amp;&amp; klawisz.ok_key == true )<br />{<br />klawisz.ok_key = false;<br />}<br />}<br />}<br /><br /><br />// Wcisniecie klawisza UP<br />if ( bit_is_clear(PINC, 3) &amp;&amp; klawisz.up_key == false )<br />{<br />_delay_ms(50);<br />if ( bit_is_clear(PINC, 3) &amp;&amp; klawisz.up_key == false )<br />{<br />klawisz.up_key = true;<br />}<br />}<br />else<br />{<br />// Puszczenie klawisza UP<br />if ( bit_is_set(PINC, 3) &amp;&amp; klawisz.up_key == true )<br />{<br />_delay_ms(50);<br />if ( bit_is_set(PINC, 3) &amp;&amp; klawisz.up_key == true )<br />{<br />klawisz.up_key = false;<br />}<br />}<br />}<br /><br />if ( klawisz.ok_key == true || klawisz.up_key == true )<br />{<br />return true;<br />}<br />else<br />{<br />return false;<br />}<br />}[/syntax]<br /><br />Po starcie programu od razu zapala mi się dioda podłączona do wyjścia PD5 co sygnalizuje, że został wciśnięty jeden z dwóch klawiszy (zasadniczo żaden klawisz wciśnięty nie został). Dziwniejsze natomiast jest to, że gdy w funkcji pobierz_klawisz() zakomentuje część kodu odpowiedzialną za obsługę klawisza UP i zostawię tylko to co odpowiada za klawisz OK to funkcja śmiga jak ta lala czyli gdy trzymam guzik to dioda się pali, a gdy go puszcze to gaśnie.<br />Nie wiem co robię źle i stąd moja prośba o pomoc i nakierowanie mnie na właściwe tory by móc obsłużyć dwa guziki, a docelowo cztery.<br /><br />Z góry dziękuje serdecznie!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14571">Pawel Frackowiak</a> — 28 lip 2016, o 18:24</p><hr />
]]></content>
</entry>
</feed>