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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-02-16T11:35:30+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14504&amp;mode</id>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2016-02-16T11:35:30+01:00</updated>
<published>2016-02-16T11:35:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153784#p153784</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153784#p153784"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153784#p153784"><![CDATA[
<div class="quotetitle">rskup napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent">A kliknięcie pomógł, to nie łaska koledze dać?<br /></div></div><br /><br />Już poszło <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br />A o to kod w całości jaki mam :<br /><br />[syntax=c]#include &lt;stdio.h&gt;<br />    #include &lt;avr/io.h&gt;<br />    #include &lt;util/delay.h&gt;<br />    #include &quot;LCD/lcd44780.h&quot;<br />    #include &lt;avr/interrupt.h&gt;<br /><br /><br /><br />     uint8_t switch_flag = 0;<br /><br />    int main(void){<br /><br />    lcd_init();<br />    lcd_cls();<br /><br />     DDRC |= (1&lt;&lt;PC3) | (1&lt;&lt;PC4) | (1&lt;&lt;PC5) ;          // kolumny wyjścia<br /><br /><br /><br />     DDRD &amp;= ~(1&lt;&lt;PD1) &amp; ~(1&lt;&lt;PD0) &amp; ~(1&lt;&lt;PD2);       // wiersze wejścia<br /><br />     PORTD |= (1&lt;&lt;PD1) | (1&lt;&lt;PD0) | (1&lt;&lt;PD2) | (1&lt;&lt;PD3);<br /><br /><br /><br />     DDRB |= (1&lt;&lt;PB1);// wyjście LED<br /><br /><br />    while(1){<br /><br />    // sekwencja dla pierwszej kolumny<br /><br /><br />    PORTC &amp;= ~(1&lt;&lt;PC3);             // zerujemy kolumnę pierwszą<br /><br />    <br />    if (!(PIND &amp; (1&lt;&lt;PD0)))    switch_flag = 1;   //sprawdzenie wiersza pierwszego<br />    if (!(PIND &amp; (1&lt;&lt;PD1)))  switch_flag = 2;       //sprawdzenie wiersza drugiego<br />    if (!(PIND &amp; (1&lt;&lt;PD2)))    switch_flag = 3;     //sprawdzenie wiersza trzeciego<br /><br />    PORTC |= (1&lt;&lt;PC3);<br /><br /><br />    // sekwencja dla drugiej kolumny<br /><br />    PORTC &amp;= ~(1&lt;&lt;PC4);  // zerujemy kolumnę drugą<br /><br />    <br />    if (!(PIND &amp; (1&lt;&lt;PD0))) switch_flag = 4;  //sprawdzenie wiersza pierwszeg<br />    if (!(PIND &amp; (1&lt;&lt;PD1)))   switch_flag = 5;      //sprawdzenie wiersza drugiego<br />    if (!(PIND &amp; (1&lt;&lt;PD2)))   switch_flag = 6;      //sprawdzenie wiersza trzeciego<br /><br />    PORTC |= (1&lt;&lt;PC4);<br /><br />    // sekwencja dla trzeciej kolumny<br /><br />    PORTC &amp;= ~(1&lt;&lt;PC5);// zerujemy kolumnę trzecią<br /><br />    <br />    if (!(PIND &amp; (1&lt;&lt;PD0)))  switch_flag = 7; //sprawdzenie wiersza pierwszego<br />    if (!(PIND &amp; (1&lt;&lt;PD1)))  switch_flag = 8;       //sprawdzenie wiersza drugiego<br />    if (!(PIND &amp; (1&lt;&lt;PD2)))   switch_flag = 9;      //sprawdzenie wiersza trzeciego<br /><br />    PORTC |= (1&lt;&lt;PC5);<br /><br />    lcd_locate(0,5);<br />    lcd_int(switch_flag);<br /><br /> // funkce dla danego klawisza<br /><br />    if(switch_flag)<br />    {<br />      if(switch_flag == 1)<br />      { PORTB ^= (1&lt;&lt;PB1);<br />      }<br />      if(switch_flag == 2)<br />      {PORTB ^= (1&lt;&lt;PB1);<br />      }<br />      if(switch_flag == 3)<br />      {PORTB ^= (1&lt;&lt;PB1);<br />      }<br />      if(switch_flag == 4)<br />      {PORTB ^= (1&lt;&lt;PB1);<br />      }<br />      if(switch_flag == 5)<br />      {PORTB ^= (1&lt;&lt;PB1);<br />      }<br />      if(switch_flag == 6)<br />      {PORTB ^= (1&lt;&lt;PB1);<br />      }<br />      if(switch_flag == 7)<br />      {PORTB ^= (1&lt;&lt;PB1);<br />      }<br />      if(switch_flag == 8)<br />      {PORTB ^= (1&lt;&lt;PB1);<br />      }<br />      if(switch_flag == 9)<br />      {PORTB ^= (1&lt;&lt;PB1);<br />      }<br /><br /><br /><br /><br />      switch_flag = 0;<br />      _delay_ms(500);<br />    }<br />    }<br />    }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 16 lut 2016, o 11:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek123]]></name></author>
<updated>2016-02-15T20:36:31+01:00</updated>
<published>2016-02-15T20:36:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153731#p153731</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153731#p153731"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153731#p153731"><![CDATA[
Skąd wiesz, że działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  przecież w kodzie niema żadnej reakcji na to czy wciśnięty jest przycisk <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  Pokaż pełny kod z np zmienieniem stanu diody czy coś bo tak ciężko powiedzieć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10617">Bartek123</a> — 15 lut 2016, o 20:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-02-15T20:15:36+01:00</updated>
<published>2016-02-15T20:15:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153728#p153728</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153728#p153728"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153728#p153728"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Pierwsze co chciałbym podziękować koledze Bartek123 <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Wielkie dzięki <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /></div><br />A kliknięcie pomógł, to nie łaska koledze dać?<br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 15 lut 2016, o 20:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2016-02-15T19:16:31+01:00</updated>
<published>2016-02-15T19:16:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153718#p153718</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153718#p153718"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153718#p153718"><![CDATA[
Pierwsze co chciałbym podziękować koledze Bartek123 <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Wielkie dzięki <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br />Kod działa, ale nie do końca. Nie rozumiem jednego zjawiska, a mianowicie. W tej formie jaką podał kolega Bartek123 <br /><br />[syntax=c]#include &lt;stdio.h&gt;<br />    #include &lt;avr/io.h&gt;<br />    #include &lt;util/delay.h&gt;<br />    #include &quot;LCD/lcd44780.h&quot;<br />    #include &lt;avr/interrupt.h&gt;<br />     <br />     <br />     <br />     uint8_t switch_flag = 0;<br />     <br />    int main(void){<br />     <br />     DDRC |= (1&lt;&lt;PC3) | (1&lt;&lt;PC4) | (1&lt;&lt;PC5) ;          // kolumny wyjścia<br />     <br />     DDRB |= (1&lt;&lt;PB0);<br />     <br />     DDRD &amp;= ~(1&lt;&lt;PD0) &amp; ~(1&lt;&lt;PD1) &amp; ~(1&lt;&lt;PD2);       // wiersze wejścia<br />     <br />     PORTD |= (1&lt;&lt;PD0) | (1&lt;&lt;PD1) | (1&lt;&lt;PD2);<br />     <br />     <br />                     while(1){<br />     <br />     <br />     <br />     <br />    PORTC &amp;= ~(1&lt;&lt;PC3);             // zerujemy kolumnę pierwszą<br />     <br />    if (!(PIND &amp; (1&lt;&lt;PD0)))    switch_flag = 1;   //sprawdzenie wiersza pierwszego<br />    if (!(PIND &amp; (1&lt;&lt;PD1)))  switch_flag = 2;       //sprawdzenie wiersza drugiego<br />    if (!(PIND &amp; (1&lt;&lt;PD2)))    switch_flag = 3;     //sprawdzenie wiersza trzeciego<br />     <br />    PORTC |= (1&lt;&lt;PC3);<br />     <br />     <br />    // sekwencja dla drugiej kolumny<br />     <br />    PORTC &amp;= ~(1&lt;&lt;PC4);<br />     <br />    if (!(PIND &amp; (1&lt;&lt;PD0))) switch_flag = 4;  //sprawdzenie wiersza pierwszeg<br />    if (!(PIND &amp; (1&lt;&lt;PD1)))   switch_flag = 5;      //sprawdzenie wiersza drugiego<br />    if (!(PIND &amp; (1&lt;&lt;PD2)))   switch_flag = 6;      //sprawdzenie wiersza trzeciego<br />     <br />    PORTC |= (1&lt;&lt;PC4);<br />     <br />    // sekwencja dla trzeciej kolumny<br />     <br />    PORTC &amp;= ~(1&lt;&lt;PC5);<br />     <br />    if (!(PIND &amp; (1&lt;&lt;PD0)))  switch_flag = 7; //sprawdzenie wiersza pierwszego<br />    if (!(PIND &amp; (1&lt;&lt;PD1)))  switch_flag = 8;       //sprawdzenie wiersza drugiego<br />    if (!(PIND &amp; (1&lt;&lt;PD2)))   switch_flag = 9;      //sprawdzenie wiersza trzeciego<br />     <br />    PORTC |= (1&lt;&lt;PC5);<br />     <br />    if(switch_flag)<br />    {<br />      if(switch_flag == 1)<br />      {<br />      }<br />      if(switch_flag == 2)<br />      {<br />      }<br />      if(switch_flag == 3)<br />      {<br />      }<br />      if(switch_flag == 4)<br />      {<br />      }<br />      if(switch_flag == 5)<br />      {<br />      }<br />      if(switch_flag == 6)<br />      {<br />      }<br />      if(switch_flag == 7)<br />      {<br />      }<br />      if(switch_flag == 8)<br />      {<br />      }<br />      if(switch_flag == 9)<br />      {<br />      }<br />      switch_flag = 0;<br />      _delay_ms(500);<br />    }<br />    }<br />    }[/syntax]<br /><br />Działają dwa wiersze, pierwszy podłączony do PD0 nie działa. Zaczołem szukać co jest grane, no i za komentowałem sprawdzanie wiersza pierwszego:<br /><br />[syntax=c]PORTC &amp;= ~(1&lt;&lt;PC3);             // zerujemy kolumnę pierwszą<br /><br /><br />    //if (!(PIND &amp; (1&lt;&lt;PD0)))    switch_flag = 1;   //sprawdzenie wiersza pierwszego<br />    if (!(PIND &amp; (1&lt;&lt;PD1)))  switch_flag = 2;       //sprawdzenie wiersza drugiego<br />    if (!(PIND &amp; (1&lt;&lt;PD2)))    switch_flag = 3;     //sprawdzenie wiersza trzeciego<br /><br />    PORTC |= (1&lt;&lt;PC3);[/syntax] <br /><br />No i zauważyłem, że działa tylko jeden wiersz. No to wymyśliłem sobie, że dodam przed PD0 sprawdzenie jakiegoś innego wiersza, zupełnie nie podłączonego do nieczego <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> <br /><br />[syntax=c]PORTC &amp;= ~(1&lt;&lt;PC3);             // zerujemy kolumnę pierwszą<br /><br />    if (!(PIND &amp; (1&lt;&lt;PD3))) switch_flag = 4;     // nie podłączony PIN<br />    if (!(PIND &amp; (1&lt;&lt;PD4)))    switch_flag = 1;   //sprawdzenie wiersza pierwszego<br />    if (!(PIND &amp; (1&lt;&lt;PD1)))  switch_flag = 2;       //sprawdzenie wiersza drugiego<br />    if (!(PIND &amp; (1&lt;&lt;PD2)))    switch_flag = 3;     //sprawdzenie wiersza trzeciego<br /><br />    PORTC |= (1&lt;&lt;PC3);[/syntax]<br /><br />Ku mojemu zdziwieniu, wiersz pierwszy nagle działa. Analizowałem kod, ale nie zauważyłem co jest powodem takiego działania <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Może ktoś z Was będzie miał jakiś pomysł <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 15 lut 2016, o 19:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2016-02-14T12:06:56+01:00</updated>
<published>2016-02-14T12:06:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153626#p153626</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153626#p153626"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153626#p153626"><![CDATA[
Dziękuję bardzo za cenna wskazówkę, właśnie o taką odpowiedź mi chodziło <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> wprowadze zmiany,  przetestuje i dam zdam raport <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 14 lut 2016, o 12:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek123]]></name></author>
<updated>2016-02-14T10:44:32+01:00</updated>
<published>2016-02-14T10:44:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153616#p153616</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153616#p153616"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153616#p153616"><![CDATA[
Najpierw to wywal stąd te delaye przelicz ile pętla główna potrzebuje czasu aby zrobić obieg, ale zrobię to za ciebie potrzeba jej aż prawie 500ms <img src="https://forum.atnel.pl/images/smilies/icon_e_surprised.gif" alt=":o" title="Zdziwiony" /> . Po wywaleniu dealy'ów nie zmieniaj w ifach stanu portu PB0 tylko zrób sobie zmienną np uint8_t switch_flag i to ją ustaw na jeden kiedy zostanie wciśnięty przycisk i na samym końcu pętli zrób if'a który sprawdzi czy zmienna switch_flag jest równa 1 jeśli tak to zmień stan portu PB0 na przeciwny, wyzeruj zmienną switch_flag i daj tam delay_ms(500). Kod powinien tak wyglądać nie mniej jednak przyjrzyj się niemu i zastanów się dlaczego nie działało. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />[syntax=c]#include &lt;stdio.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &lt;avr/interrupt.h&gt;<br /> <br /> <br /> <br /> uint8_t switch_flag = 0;<br /> <br />int main(void){<br /> <br /> DDRC |= (1&lt;&lt;PC3) | (1&lt;&lt;PC4) | (1&lt;&lt;PC5) ;          // kolumny wyjścia<br /> <br /> DDRB |= (1&lt;&lt;PB0);<br /> <br /> DDRD &amp;= ~(1&lt;&lt;PD0) &amp; ~(1&lt;&lt;PD1) &amp; ~(1&lt;&lt;PD2);       // wiersze wejścia<br /> <br /> PORTD |= (1&lt;&lt;PD0) | (1&lt;&lt;PD1) | (1&lt;&lt;PD2);<br /> <br /> <br />                 while(1){<br /> <br /> <br /> <br /> <br />PORTC &amp;= ~(1&lt;&lt;PC3);             // zerujemy kolumnę pierwszą<br /> <br />if (!(PIND &amp; (1&lt;&lt;PD0)))    switch_flag = 1;   //sprawdzenie wiersza pierwszego<br />if (!(PIND &amp; (1&lt;&lt;PD1)))  switch_flag = 1;       //sprawdzenie wiersza drugiego<br />if (!(PIND &amp; (1&lt;&lt;PD2)))    switch_flag = 1;     //sprawdzenie wiersza trzeciego<br /> <br />PORTC |= (1&lt;&lt;PC3);<br /> <br /> <br />// sekwencja dla drugiej kolumny<br /> <br />PORTC &amp;= ~(1&lt;&lt;PC4);<br /> <br />if (!(PIND &amp; (1&lt;&lt;PD0))) switch_flag = 1;  //sprawdzenie wiersza pierwszeg<br />if (!(PIND &amp; (1&lt;&lt;PD1)))   switch_flag = 1;      //sprawdzenie wiersza drugiego<br />if (!(PIND &amp; (1&lt;&lt;PD2)))   switch_flag = 1;      //sprawdzenie wiersza trzeciego<br /> <br />PORTC |= (1&lt;&lt;PC4);<br /> <br />// sekwencja dla trzeciej kolumny<br /> <br />PORTC &amp;= ~(1&lt;&lt;PC5);<br /> <br />if (!(PIND &amp; (1&lt;&lt;PD0)))  switch_flag = 1; //sprawdzenie wiersza pierwszego<br />if (!(PIND &amp; (1&lt;&lt;PD1)))  switch_flag = 1;       //sprawdzenie wiersza drugiego<br />if (!(PIND &amp; (1&lt;&lt;PD2)))   switch_flag = 1;      //sprawdzenie wiersza trzeciego<br /> <br />PORTC |= (1&lt;&lt;PC5);<br /><br />if(switch_flag == 1)<br />{<br />  PORTB ^= (1&lt;&lt;PB0);<br />  switch_flag = 0;<br />  _delay_ms(500);<br />}<br />}<br />}[/syntax]<br /><br />W przypadku kiedy zechcesz używać każdego przycisku z osobna to kod może wyglądać tak. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />[syntax=c]#include &lt;stdio.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &lt;avr/interrupt.h&gt;<br /> <br /> <br /> <br /> uint8_t switch_flag = 0;<br /> <br />int main(void){<br /> <br /> DDRC |= (1&lt;&lt;PC3) | (1&lt;&lt;PC4) | (1&lt;&lt;PC5) ;          // kolumny wyjścia<br /> <br /> DDRB |= (1&lt;&lt;PB0);<br /> <br /> DDRD &amp;= ~(1&lt;&lt;PD0) &amp; ~(1&lt;&lt;PD1) &amp; ~(1&lt;&lt;PD2);       // wiersze wejścia<br /> <br /> PORTD |= (1&lt;&lt;PD0) | (1&lt;&lt;PD1) | (1&lt;&lt;PD2);<br /> <br /> <br />                 while(1){<br /> <br /> <br /> <br /> <br />PORTC &amp;= ~(1&lt;&lt;PC3);             // zerujemy kolumnę pierwszą<br /> <br />if (!(PIND &amp; (1&lt;&lt;PD0)))    switch_flag = 1;   //sprawdzenie wiersza pierwszego<br />if (!(PIND &amp; (1&lt;&lt;PD1)))  switch_flag = 2;       //sprawdzenie wiersza drugiego<br />if (!(PIND &amp; (1&lt;&lt;PD2)))    switch_flag = 3;     //sprawdzenie wiersza trzeciego<br /> <br />PORTC |= (1&lt;&lt;PC3);<br /> <br /> <br />// sekwencja dla drugiej kolumny<br /> <br />PORTC &amp;= ~(1&lt;&lt;PC4);<br /> <br />if (!(PIND &amp; (1&lt;&lt;PD0))) switch_flag = 4;  //sprawdzenie wiersza pierwszeg<br />if (!(PIND &amp; (1&lt;&lt;PD1)))   switch_flag = 5;      //sprawdzenie wiersza drugiego<br />if (!(PIND &amp; (1&lt;&lt;PD2)))   switch_flag = 6;      //sprawdzenie wiersza trzeciego<br /> <br />PORTC |= (1&lt;&lt;PC4);<br /> <br />// sekwencja dla trzeciej kolumny<br /> <br />PORTC &amp;= ~(1&lt;&lt;PC5);<br /> <br />if (!(PIND &amp; (1&lt;&lt;PD0)))  switch_flag = 7; //sprawdzenie wiersza pierwszego<br />if (!(PIND &amp; (1&lt;&lt;PD1)))  switch_flag = 8;       //sprawdzenie wiersza drugiego<br />if (!(PIND &amp; (1&lt;&lt;PD2)))   switch_flag = 9;      //sprawdzenie wiersza trzeciego<br /> <br />PORTC |= (1&lt;&lt;PC5);<br /><br />if(switch_flag)<br />{<br />  if(switch_flag == 1)<br />  {<br />  }<br />  if(switch_flag == 2)<br />  {<br />  }<br />  if(switch_flag == 3)<br />  {<br />  }<br />  if(switch_flag == 4)<br />  {<br />  }<br />  if(switch_flag == 5)<br />  {<br />  }<br />  if(switch_flag == 6)<br />  {<br />  }<br />  if(switch_flag == 7)<br />  {<br />  }<br />  if(switch_flag == 8)<br />  {<br />  }<br />  if(switch_flag == 9)<br />  {<br />  }<br />  switch_flag = 0;<br />  _delay_ms(500);<br />}<br />}<br />}[/syntax]<br />Ten delay 500ms jest po to aby warunek if nie wykonywał się cały czas dopóki nie póścimy przycisku. Oczywiście są lepsze sposoby na rozwiązanie tego problemu od mojego, ale to jest jeden z prostszych <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=10617">Bartek123</a> — 14 lut 2016, o 10:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2016-02-14T07:59:36+01:00</updated>
<published>2016-02-14T07:59:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153608#p153608</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153608#p153608"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153608#p153608"><![CDATA[
Podłączeniem do PCx bo.tak na stylowe było wygodniej,  schemat robiłem wcześniej a nie zrobiłem juz później zmiany. Jeśli chodzi o delay_ms to miałem tu na myśli drgania styków. Ma ktoś pomysł dlaczego jest brak reakcji na wciśnięcie przycisku?  Sam kod, jest napisany poprawnie jeśli chodzi o koncepcje?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 14 lut 2016, o 07:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-02-13T14:22:52+01:00</updated>
<published>2016-02-13T14:22:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153523#p153523</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153523#p153523"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153523#p153523"><![CDATA[
Na schemacie wyżej jest przypisanie klawiszy do PBx i PDx a w programie sterujesz portem C.<br /><br />Jaki cel mają delay-e między poszczególnymi wierszami w ramach tej samej kolumny?<br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 13 lut 2016, o 14:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2016-02-12T21:42:07+01:00</updated>
<published>2016-02-12T21:42:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153469#p153469</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153469#p153469"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153469#p153469"><![CDATA[
No i zaczeły się problemy :/ o to kod jaki napisałem:<br /><br />[syntax=c]#include &lt;stdio.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br /><br /><br /><br />int main(void){<br /><br /> DDRC |= (1&lt;&lt;PC3) | (1&lt;&lt;PC4) | (1&lt;&lt;PC5) ;   // kolumny wyjścia<br /><br /> DDRB |= (1&lt;&lt;PB0);<br /><br /> DDRD &amp;= ~(1&lt;&lt;PD0) &amp; ~(1&lt;&lt;PD1) &amp; ~(1&lt;&lt;PD2);       // wiersze wejścia<br /><br /> PORTD |= (1&lt;&lt;PD0) | (1&lt;&lt;PD1) | (1&lt;&lt;PD2);<br /><br /><br /> while(1){<br /><br /><br /><br /><br />PORTC &amp;= ~(1&lt;&lt;PC3);             // zerujemy kolumnę pierwszą<br /><br />if (!(PIND &amp; (1&lt;&lt;PD0)))    PORTB ^= (1&lt;&lt;PB0);   //sprawdzenie wiersza pierwszego<br />_delay_ms(50);<br />if (!(PIND &amp; (1&lt;&lt;PD1)))  PORTB ^= (1&lt;&lt;PB0);       //sprawdzenie wiersza drugiego<br />_delay_ms(50);<br />if (!(PIND &amp; (1&lt;&lt;PD2)))    PORTB ^= (1&lt;&lt;PB0);     //sprawdzenie wiersza trzeciego<br />_delay_ms(50);<br /><br />PORTC |= (1&lt;&lt;PC3);<br /><br /><br />// sekwencja dla drugiej kolumny<br /><br />PORTC &amp;= ~(1&lt;&lt;PC4);<br /><br />if (!(PIND &amp; (1&lt;&lt;PD0))) PORTB ^= (1&lt;&lt;PB0);  //sprawdzenie wiersza pierwszego<br />_delay_ms(50);<br />if (!(PIND &amp; (1&lt;&lt;PD1)))   PORTB ^= (1&lt;&lt;PB0);      //sprawdzenie wiersza drugiego<br />_delay_ms(50);<br />if (!(PIND &amp; (1&lt;&lt;PD2)))   PORTB ^= (1&lt;&lt;PB0);      //sprawdzenie wiersza trzeciego<br />_delay_ms(50);<br /><br />PORTC |= (1&lt;&lt;PC4);<br /><br />// sekwencja dla trzeciej kolumny<br /><br />PORTC &amp;= ~(1&lt;&lt;PC5);<br /><br />if (!(PIND &amp; (1&lt;&lt;PD0)))  PORTB ^= (1&lt;&lt;PB0); //sprawdzenie wiersza pierwszego<br />_delay_ms(50);<br />if (!(PIND &amp; (1&lt;&lt;PD1)))  PORTB ^= (1&lt;&lt;PB0);       //sprawdzenie wiersza drugiego<br />_delay_ms(50);<br />if (!(PIND &amp; (1&lt;&lt;PD2)))   PORTB ^= (1&lt;&lt;PB0);      //sprawdzenie wiersza trzeciego<br />_delay_ms(50);<br /><br />PORTC |= (1&lt;&lt;PC5);<br /><br />}<br />}[/syntax]<br /><br /><br /><br />Przesunięcie bitowe jest, sprawdziłem to miernikiem. Natomiast moim zdaniem sprawdzenie jest dość kiepskie. Po naciśnięciu przycisku nic się nie dzieje :/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 12 lut 2016, o 21:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2016-02-12T14:26:31+01:00</updated>
<published>2016-02-12T14:26:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153425#p153425</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153425#p153425"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153425#p153425"><![CDATA[
Ok zmontuje wszystko i dam znać jakie efekty są <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> dzięki <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 12 lut 2016, o 14:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Shavo]]></name></author>
<updated>2016-02-12T14:22:34+01:00</updated>
<published>2016-02-12T14:22:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153423#p153423</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153423#p153423"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153423#p153423"><![CDATA[
Dodałbym jeszcze wystawienie pinów wyjściowych na stan wysoki PORTB |= (1&lt;&lt;PB0) | (1&lt;&lt;PB1) | (1&lt;&lt;PB2) po ustawieniu kierunków wyjściowych bo domyślnie są wszystkie w stanie niskim i będzie wykrywał Ci wszystkie klawisze za pierwszym przejściem a powinien tylko pierwszą kolumnę. Napisz cały kod i zrób testy. Jak będą problemy to pisz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4330">Shavo</a> — 12 lut 2016, o 14:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2016-02-12T13:37:41+01:00</updated>
<published>2016-02-12T13:37:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153419#p153419</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153419#p153419"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153419#p153419"><![CDATA[
No właśnie na tej animacji zrozumiałem zasadę działania klawiatury. Próbowałem jakby zrozumieć kod który jest podany w poradniku ale nie bardzo mi to wyszło. Dlatego zabrałem się za pisanie swojego bardziej prostego, a pokazałem w zasadzie tylko kod odpowiadający jednej kolumnie. Więc w moim przypadku dla klawiatury 3x3 trzeba by użyć dla jeszcze dwóch o podobnej konstrukcji.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 29 minutach ]</span></strong><br /><br />Może wrzucę schemat:<br /><br /><a href="https://obrazkiforum.atnel.pl/6944/359eb232aaac46aa56135992dd586efd.PNG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/6944/359eb232aaac46aa56135992dd586efd.PNG" alt="Obrazek" /></a><br /><br />I całą sekwencję dla trzech kolumn:<br /><br />[syntax=c]// 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 />_delay_ms(5);<br />if (!(PIND &amp; (1&lt;&lt;PD1)))//sprawdzenie wiersza drugiego<br />_delay_ms(5);<br />if (!(PIND &amp; (1&lt;&lt;PD2)))//sprawdzenie wiersza trzeciego<br />_delay_ms(5);<br /><br />PORTB |= (1&lt;&lt;PB0);<br /><br /><br />// sekwencja dla drugiej kolumny<br /><br />PORTB &amp;= ~(1&lt;&lt;PB1);<br /><br />if (!(PIND &amp; (1&lt;&lt;PD0)))   //sprawdzenie wiersza pierwszego<br />_delay_ms(5);<br />if (!(PIND &amp; (1&lt;&lt;PD1)))//sprawdzenie wiersza drugiego<br />_delay_ms(5);<br />if (!(PIND &amp; (1&lt;&lt;PD2)))//sprawdzenie wiersza trzeciego<br />_delay_ms(5);<br /><br />PORTB |= (1&lt;&lt;PB1);<br /><br />// sekwencja dla trzeciej kolumny<br /><br />PORTB &amp;= ~(1&lt;&lt;PB2);<br /><br />if (!(PIND &amp; (1&lt;&lt;PD0)))   //sprawdzenie wiersza pierwszego<br />_delay_ms(5);<br />if (!(PIND &amp; (1&lt;&lt;PD1)))//sprawdzenie wiersza drugiego<br />_delay_ms(5);<br />if (!(PIND &amp; (1&lt;&lt;PD2)))//sprawdzenie wiersza trzeciego<br />_delay_ms(5);<br /><br />PORTB |= (1&lt;&lt;PB2);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 12 lut 2016, o 13:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Shavo]]></name></author>
<updated>2016-02-12T12:54:23+01:00</updated>
<published>2016-02-12T12:54:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153414#p153414</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153414#p153414"/>
<title type="html"><![CDATA[Re: Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153414#p153414"><![CDATA[
Cześć, przejrzyj ten wątek <a href="http://forum.atnel.pl/topic814.html"  class="postlink">http://forum.atnel.pl/topic814.html</a> a szczególnie zobacz sobie gif który wrzucił Mscichu to Ci rozjaśni bardziej koncepcje multipleksowania i sprawdzania klawiszy. W Twoim kodzie nie ma wystawiania kolejnych wyjść portu (przesunięcia bitowego), na wyjściu procesora tylko operujesz na jednym bicie portu zamiast trzech. Warto też abyś miał jakiś wyświetlacz żeby sprawdzać wartość wciśniętego klawisza<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4330">Shavo</a> — 12 lut 2016, o 12:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Ghann]]></name></author>
<updated>2016-02-12T11:34:54+01:00</updated>
<published>2016-02-12T11:34:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153405#p153405</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153405#p153405"/>
<title type="html"><![CDATA[Klawiatura matrycowa]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14504&amp;p=153405#p153405"><![CDATA[
Witam. Chce uruchomić klawiaturę matrycową 5x5 z racji tego że temat dla mnie jako osoby początkującej jest dość kłopotliwy więc postanowiłem zrobić klawiaturkę matrycową 3x3 na stykówce. Czyli 6 wyprowadzeń do procesora. Trochę poczytałem o samej zasadzie działania i samą metodę rozumiem jak sprawdza się który klawisz wciśnięty. Jeśli chodzi o obsługę programową jest już problem. Więc tak, napisałem krótki kod do sprawdzania tylko jednej kolumny. Program jest ten liniowy, każdy krok osobno jest wykonywany. Dokładnie wiem że jest on nie za dobry i nie będzie działał. Chciałbym tylko żeby koledzy nakierowali mnie mniej więcej w którą stronę iść.<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 />    _delay_ms(5);<br />    if (!(PIND &amp; (1&lt;&lt;PD1)))            //sprawdzenie wiersza drugiego<br />    _delay_ms(5);<br />    if (!(PIND &amp; (1&lt;&lt;PD2)))            //sprawdzenie wiersza trzeciego<br />    _delay_ms(5);<br />     <br />    PORTB |= (1&lt;&lt;PB0);        //  ustawiamy stan wysoki dla kolumny pierwszej, i przechodzimy do następnej[/syntax]<br /><br /><br /><br />Proszę Was o naprowadzenie, nie wiem czy sposób w jaki próbuję napisać obsługę klawiatury jest dobry. Za wszelką pomoc z góry dziękuję.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6944">Ghann</a> — 12 lut 2016, o 11:34</p><hr />
]]></content>
</entry>
</feed>