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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-02-08T14:06:22+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14445&amp;mode</id>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2016-02-08T14:06:22+01:00</updated>
<published>2016-02-08T14:06:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14445&amp;p=153067#p153067</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14445&amp;p=153067#p153067"/>
<title type="html"><![CDATA[Re: Obsługa klawiatury matrycowej wyjaśnienie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14445&amp;p=153067#p153067"><![CDATA[
Dokładnie, kodu nie rozumiem gdyż sam go nie pisałem <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> <br />Potrzebuję obsłużyć klawiaturę 5x5 ale z braku wiedzy i nie zrozumienia kodu podanych przez innych postanowiłem od podstaw rozpracować taką klawiaturę. <br />Na płytce stykowej zmontowałem sobie taką klawiaturkę 3x3 w celu edukacyjnym. <br /><br />Trochę poczytałem na forum, no i samą zasadę działania już rozumiem. Dużo wyjaśniła ta oto animacja:<br /><!-- m --><a class="postlink" href="https://obrazkiforum.atnel.pl/853/93247a04039eea7ddebee04f059b99b2.gif" >https://obrazkiforum.atnel.pl/853/93247a ... 9b99b2.gif</a><!-- m --><br /><br />Z programowaniem u mnie no nie jest idealnie, więc postanowiłem napisać kod na piechotę tak abym ja go rozumiał <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />I stworzyłem taki krótki kod, pokazujący samą sekwencję. Proszę o opinię czy ma on rację bytu, czyli rozbudowując go będzie on działał. Wszelkie sugestie mile widziane <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Dla klawiatury 3x3 sprawdzenie jednej z kolumn.<br /><br /><br />[syntax=c]Koncepcja klawiatura :<br /><br />DDRD &amp;= ~(1&lt;&lt;PD0);    // ustawiam piny procesora na wejście<br />DDRD &amp;= ~(1&lt;&lt;PD1);<br />DDRD &amp;= ~(1&lt;&lt;PD2);<br /><br />PORTD |= (1&lt;&lt;PD0);    // podciągam programowo pull-up wewnętrzny rezystor<br />PORTD |= (1&lt;&lt;PD1);// podłączone wiersze<br />PORTD |= (1&lt;&lt;PD2);<br /><br /><br />DDRB |= (1&lt;&lt;PB0);    // ustawiam piny procesora na wyjście<br />DDRB |= (1&lt;&lt;PB1);// podłączone kolumny<br />DDRB |= (1&lt;&lt;PB2);<br /><br /><br />// sekwencja dla pierwszej kolumny<br /><br />PORTB &amp;= ~(1&lt;&lt;PB0);// zerujemy kolumnę pierwszą<br /><br />if (!(PIND &amp; (1&lt;&lt;PD0)))   //sprawdzenie wiersza pierwszego<br />if (!(PIND &amp; (1&lt;&lt;PD0)))//sprawdzenie wiersza drugiego<br />if (!(PIND &amp; (1&lt;&lt;PD0)))//sprawdzenie wiersza trzeciego<br /><br />PORTB |= (1&lt;&lt;PB0);[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 10 minutach ]</span></strong><br /><br />No i jeszcze trzeba dodać jakieś czasy między wykonywaniem się zmiany stanu kolumny a sprawdzeniem wiersza.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 8 lut 2016, o 14:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wmr]]></name></author>
<updated>2016-02-08T11:20:58+01:00</updated>
<published>2016-02-08T11:20:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14445&amp;p=153058#p153058</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14445&amp;p=153058#p153058"/>
<title type="html"><![CDATA[Re: Obsługa klawiatury matrycowej wyjaśnienie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14445&amp;p=153058#p153058"><![CDATA[
Dobrze byłoby, gdybyż pokazał schemat układu, jednak w skrócie, bo jeżeli nie rozumiesz kodu to znaczy, ze nie jest to kod pisany przez Ciebie...<br /><br />Odczyt z klawiatury w wiekszosci przypadkow jest realizowany podobnie, czyli mniej wiecej tak:<br /><br />   1  2  3  4 <br />A<br />B<br />C<br />D<br /><br />np. kolumny 1 2 3 4 są podciągnięte rezystorami do logicznej jedynki<br />sprawdzasz wartosci na kolumnach wczesniej podajac logiczne 0 na kolejne wiersze<br /><br />i tak: w przypadku gdy podajesz 0 na linie A i masz wcisniety klawisz A4 to na kolumnie 4 beziesz mial w momencie odczytu 0 logiczne a na pozostalych 1. Odczytujac kolumny otrzymasz wartosc 1110 - i tym sposobem wiesz, ze jest to klawisz A4. sprawdzasz kolejna linie... itd...<br /><br />Oczywiscie nalezy wprowadzic np. opoznienia w celu eliminacji drgan stykow i ew. jezeli wykluczasz, ze wiecej niz jeden przycisk moze byc wcisniety w tym samym czasie to tez nalezy to zrealizowac w kodzie.<br /><br />Dobrze tez jest sprawdzac np po odczycie czy wszystkie przyciski sa puszczone ... ale to juz wszystko zalezy od potrzeb.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6675">wmr</a> — 8 lut 2016, o 11:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2016-02-07T16:12:00+01:00</updated>
<published>2016-02-07T16:12:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14445&amp;p=152983#p152983</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14445&amp;p=152983#p152983"/>
<title type="html"><![CDATA[Obsługa klawiatury matrycowej wyjaśnienie kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14445&amp;p=152983#p152983"><![CDATA[
Witam. Głowię się i głowię jak obsłużyć klawiaturę matrycową, no i nie mam jakoś pomysłu. Natrafiłem na poradnik: <br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic814.html" >topic814.html</a><!-- l --><br /><br />Czy mógłby ktoś mi w miarę łopatologicznie wytłumaczyć o co chodzi w tej części kodu??<br /><br />[syntax=c]upperNibble = 0xff;<br /> <br />                for(i=0; i&lt;4; i++)<br />            {<br />                 _delay_ms(1);<br />                 KB_PORT_OUT = ~(0x01 &lt;&lt; i);<br />                 _delay_ms(1);                                            //Opóźnienie<br />                 upperNibble = KB_PORT_IN | 0x0f;<br /> <br />                 if (upperNibble != 0xff)<br />                 {<br />                   _delay_ms(20);                                //Opóźnienie  dla niwelacji drgań<br />               upperNibble = KB_PORT_IN | 0x0f;<br />                   if(upperNibble == 0xff) goto OUT;<br /> <br />                   keyCode = (upperNibble &amp; 0xf0) | (0x0f &amp; ~(0x01 &lt;&lt; i));<br /> <br />                   while (upperNibble != 0xff)<br />                     upperNibble = KB_PORT_IN | 0x0f;<br /> <br />                   _delay_ms(20);                          //opóźnienie dla niwelacji drgań<br /> <br />                   switch (keyCode)                        //Znaki wyświetlane na LCD<br />                   {<br />                        case (0xee): keyPressed = '0';<br />                                                 break;<br />                        case (0xed): keyPressed = '1';<br />                                                 break;<br />                        case (0xeb): keyPressed = '2';<br />                                                 break;<br />                        case (0xe7): keyPressed = '3';<br />                                                 break;<br />                        case (0xde): keyPressed = '4';<br />                                                 break;<br />                        case (0xdd): keyPressed = '5';<br />                                                 break;<br />                        case (0xdb): keyPressed = '6';<br />                                                 break;<br />                        case (0xd7): keyPressed = '7';<br />                                                 break;<br />                        case (0xbe): keyPressed = '8';<br />                                                 break;<br />                        case (0xbd): keyPressed = '9';<br />                                                 break;<br />                        case (0xbb): keyPressed = 'A';<br />                                                 break;<br />                        case (0xb7): keyPressed = 'B';<br />                                                 break;<br />                        case (0x7e): keyPressed = 'C';<br />                                                 break;<br />                        case (0x7d): keyPressed = 'D';<br />                                                 break;<br />                        case (0x7b): keyPressed = 'E';<br />                                                 break;<br />                        case (0x77): keyPressed = 'F';<br />                                                 break;<br />                        default    : keyPressed = 'X';<br />                                                 break;<br />                    }//Koniec klawiszy --[/syntax]<br /><br /><br />Generalnie w klawiaturze matrycowej chodzi o to iż, część portów ustawiamy jako wyjście a część jako wejście. To raczej rozumiem i nie mam z tym problemu ale cały powyższy kod sprawia mi kłopot :/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 7 lut 2016, o 16:12</p><hr />
]]></content>
</entry>
</feed>