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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-02-27T17:37:35+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=22780&amp;mode</id>
<entry>
<author><name><![CDATA[Wójcik Robert]]></name></author>
<updated>2020-02-27T17:37:35+01:00</updated>
<published>2020-02-27T17:37:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=225106#p225106</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=225106#p225106"/>
<title type="html"><![CDATA[Re: Proszę o pomoc - pierwszy przykład z książki... :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=225106#p225106"><![CDATA[
temu tu jestem i zadaje pytania...<br /><br />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=1099">Wójcik Robert</a> — 27 lut 2020, o 17:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-02-26T21:45:09+01:00</updated>
<published>2020-02-26T21:45:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=225091#p225091</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=225091#p225091"/>
<title type="html"><![CDATA[Re: Proszę o pomoc - pierwszy przykład z książki... :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=225091#p225091"><![CDATA[
Robert - nie zatrzymuj się na tym - to jest tylko BARDZO ale to BARDZO POGLĄDOWY przykład - aby zrozumieć w ogóle jak i o co chodzi z przyciskami - czytaj dalej książkę bo tam będą dużo lepsze i bardziej zaawansowane przykłady - np funkcja SuperDebounce(). Ale z kolei gdyby ta była za trudna - to sięgaj też do mojego bloga i przed nią ZAPOZNAJ się DOKŁADNIE z tym artykułem:<br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html" >http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html</a><!-- m --><br /><br />i oglądaj moje poradniki wideo uzupełniające do książek na kanale youtube mirekk36 <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=54">mirekk36</a> — 26 lut 2020, o 21:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wójcik Robert]]></name></author>
<updated>2020-02-26T21:33:32+01:00</updated>
<published>2020-02-26T21:33:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=225090#p225090</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=225090#p225090"/>
<title type="html"><![CDATA[Re: Proszę o pomoc - pierwszy przykład z książki... :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=225090#p225090"><![CDATA[
Serdecznie dziękuję za pomoc <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Jakby co kod działa, jest poniżej<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />//definicje dla preprocesora<br /><br />#define LED_PIN (1&lt;&lt;PC7)// definicja pinu do którego podłączona jest dioda<br />#define LED_ON PORTC&amp;= ~LED_PIN// makrodefinicja - załączenie diody<br />#define LED_OFF PORTC |= LED_PIN// makrodefinicja - wyłączenie diody<br />#define LED_TOG PORTC ^= LED_PIN// makrodefinicja zmiana stanu diody<br /><br />// klawisze<br />#define KEY1_PIN (1&lt;&lt;PC5)// definicja pinu do którego podłączony jest klawisz K1<br />#define KEY2_PIN (1&lt;&lt;PC0)// definicja pinu do którego podłączony jest klawisz K2<br />#define KEY3_PIN (1&lt;&lt;PD7)// definicja pinu do którego podłączony jest klawisz K3<br /><br /><br />uint8_t klawisz_wcisniety(uint8_t klawisz, volatile uint8_t *KEY_PIN);// deklaracja funkcji<br /><br />int main(void)<br />{<br />// inicjalizacja<br />DDRC |= LED_PIN;// kierunek pinu PC7 wyjściowy<br />PORTC |= LED_PIN;// wyłączenie diody LED<br />// piny klawiszy jako WEJŚCIA<br />DDRC &amp;= ~(KEY1_PIN | KEY2_PIN);// kierunek portu PC5 wejściowy<br />DDRD &amp;= ~(KEY3_PIN);// kierunek portu PC5 wejściowy<br />//podciągnięcie pinu do VCC (poprzez wewnętrzny rezystor)<br />PORTC |= (KEY1_PIN | KEY2_PIN);<br />PORTD |= (KEY3_PIN);<br /><br />// poętla główna programu<br />while(1)<br />{<br />if (klawisz_wcisniety(KEY1_PIN, &amp;PINC)) LED_ON;// jeżeli klawisz wciśnięty<br />if (klawisz_wcisniety(KEY2_PIN, &amp;PINC)) LED_OFF; // jeżeli klawisz wciśnięty<br />if (klawisz_wcisniety(KEY3_PIN, &amp;PIND)) LED_TOG; // jeżeli klawisz wciśnięty<br />}<br />}<br />// definicja funkcji<br />// funkcja nie posiada argumentów, zwraca wynik 0 lub 1<br />uint8_t klawisz_wcisniety (uint8_t klawisz,  volatile uint8_t *KEY_PIN)<br />{<br />if (!(*KEY_PIN&amp;klawisz))// klawisz wciśnięty?<br />{<br />_delay_ms(80);// czas drgania styków<br />if (!(*KEY_PIN&amp;klawisz))// klawisz wciśnięty?<br />return 1;// jeśli wciśnięty, zakończ funkcję, rezultat = 1<br />}<br />return 0;// jeśli nie wciśnięty klawisz, zakończ funkcję, rezultat = 0<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1099">Wójcik Robert</a> — 26 lut 2020, o 21:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Adam12]]></name></author>
<updated>2020-01-09T00:19:56+01:00</updated>
<published>2020-01-09T00:19:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=224070#p224070</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=224070#p224070"/>
<title type="html"><![CDATA[Re: Proszę o pomoc - pierwszy przykład z książki... :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=224070#p224070"><![CDATA[
To nie taki banalny problem jakby się na pierwszy rzut oka zdawało. Przyznam się, że chwilę musiałem pomyśleć czemu to nie działa. <br /><br />Problem jest w tym, że sprawdzasz stan portu D używając maski klawisza (zmienna &quot;klawisz&quot;) z portu C i na odwrót. Tak nie można robić bo jeśli chcesz sprawdzić stan klawisza K3 to tak naprawdę sprawdzasz też stan pinu PC6. Jeśli na tym pinie jest stan niski (a tak jest w tym wypadku) to tak jakby klawisz był cały czas wciśnięty. Możesz to sprawdzić podciągając piny do VCC:<br />[syntax=c]PORTC |= KEY_PIN3;<br />PORTD |= (KEY_PIN1 | KEY_PIN2);[/syntax]<br /><br />Problem można rozwiązać badając stan danego portu używając masek dotyczących tylko tego portu. Można na przykład dodać do funkcji &quot;klawisz_wcisniety&quot; drugi argument, podając na którym porcie sprawdzamy klawisz.<br /><br />Na przykład:<br />[syntax=c]#define PORT_C1<br />#define PORT_D2<br /><br />uint8_t klawisz_wcisniety (uint8_t klawisz, uint8_t port);  // deklaracja funkcji<br /><br />        <br />while(1)<br />        {<br />                if (klawisz_wcisniety(KEY_PIN1,PORT_C)) LED_ON; // jeżeli klawisz K1 wciśnięty załącz dioodę<br />                if (klawisz_wcisniety(KEY_PIN2,PORT_C)) LED_OFF;// jeżeli klawisz K2 wciśnięty wyłącz dioodę<br />                if (klawisz_wcisniety(KEY_PIN3,PORT_D)) LED_TOG;// jeżeli klawisz K3 wciśnięty przełącz dioodę<br />        }<br /><br />uint8_t klawisz_wcisniety (uint8_t klawisz, uint8_t port)<br />{<br />if (port == PORT_C)<br />if (! (PINC&amp;klawisz) )                                  // klawisz wciśnięty?<br /><br />{<br />_delay_ms(80);                          // czas drgania styków<br /><br />return 1;                                       // jeśli wciśnięty, zakończ funkcję, rezultat = 1<br />}<br /><br />if (port == PORT_D)<br />if (!(PIND&amp;klawisz))<br />{<br />_delay_ms(150);                          // czas drgania styków<br /><br />return 1;                                       // jeśli wciśnięty, zakończ funkcję, rezultat = 1<br />}<br /><br />return 0;                                              // jeśli nie wciśnięty klawisz, zakończ funkcję, rezultat = 0<br />}[/syntax]<br /><br />Można też w sposób bardziej zaawansowany, przekazując jako drugi argument adres odpowiedniego portu (identycznie jak w funkcji SuperDebounce z BB):<br /><br />[syntax=c]uint8_t klawisz_wcisniety(uint8_t klawisz,  volatile uint8_t *KEY_PIN);     // deklaracja funkcji<br /><br />        while(1)<br />        {<br />                if (klawisz_wcisniety(KEY_PIN1, &amp;PINC)) LED_ON; // jeżeli klawisz K1 wciśnięty załącz dioodę<br />                if (klawisz_wcisniety(KEY_PIN2, &amp;PINC)) LED_OFF;// jeżeli klawisz K2 wciśnięty wyłącz dioodę<br />                if (klawisz_wcisniety(KEY_PIN3, &amp;PIND)) LED_TOG;// jeżeli klawisz K3 wciśnięty przełącz dioodę<br />        }<br /><br />// definicja funkcji<br />uint8_t klawisz_wcisniety (uint8_t klawisz,  volatile uint8_t *KEY_PIN)<br />{<br />        if (! (*KEY_PIN&amp;klawisz) )                                  // klawisz wciśnięty?<br /><br />        {<br />                _delay_ms(150);                          // czas drgania styków<br /><br />        return 1;                                       // jeśli wciśnięty, zakończ funkcję, rezultat = 1<br />    }<br /> return 0;                                              // jeśli nie wciśnięty klawisz, zakończ funkcję, rezultat = 0<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16417">Adam12</a> — 9 sty 2020, o 00:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wójcik Robert]]></name></author>
<updated>2020-01-08T21:24:42+01:00</updated>
<published>2020-01-08T21:24:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=224068#p224068</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=224068#p224068"/>
<title type="html"><![CDATA[Proszę o pomoc - pierwszy przykład z książki... :)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22780&amp;p=224068#p224068"><![CDATA[
Jak widać jestem całkowicie początkujący, ale zapytam.<br /><br />Pierwszy przykład z książki, przerabiam go sobie i chce zrobić klawisze pod różnymi portami.<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />//definicje dla preprocesora<br /><br />#define LED_PIN (1&lt;&lt;PC7)// definicja pinu do którego podłączona jest dioda<br />#define LED_ON PORTC&amp;= ~LED_PIN// makrodefinicja - załączenie diody<br />#define LED_OFF PORTC |= LED_PIN// makrodefinicja - wyłączenie diody<br />#define LED_TOG PORTC ^= LED_PIN// makrodefinicja zmiana stanu diody<br /><br />// klawisze<br />#define KEY_PIN1 (1&lt;&lt;PC5)// definicja pinu do którego podłączony jest klawisz K1<br />#define KEY_PIN2 (1&lt;&lt;PC0)// definicja pinu do którego podłączony jest klawisz K2<br />#define KEY_PIN3 (1&lt;&lt;PD6)// definicja pinu do którego podłączony jest klawisz K3<br /><br />uint8_t klawisz_wcisniety(uint8_t klawisz);// deklaracja funkcji<br />int main(void)<br />{<br />// inicjalizacja<br />DDRC |= LED_PIN;// kierunek pinu PC7 wyjściowy<br />PORTC |= LED_PIN;// wyłączenie diody LED<br />DDRC &amp;= ~(KEY_PIN1 | KEY_PIN2);// kierunek portu PC5, PC0 wejściowy<br />PORTC |= (KEY_PIN1 | KEY_PIN2);// podciągnięcie pinu do VCC (poprzez wewnętrzny rezystor)<br /><br />DDRD &amp;= ~(KEY_PIN3);// kierunek portu PC5, PC0 wejściowy<br />PORTD |= (KEY_PIN3);// podciągnięcie pinu do VCC (poprzez wewnętrzny rezystor)<br /><br />// pętla główna programu<br />while(1)<br />{<br />if (klawisz_wcisniety(KEY_PIN1)) LED_ON; // jeżeli klawisz K1 wciśnięty załącz dioodę<br />if (klawisz_wcisniety(KEY_PIN2)) LED_OFF;// jeżeli klawisz K2 wciśnięty wyłącz dioodę<br />if (klawisz_wcisniety(KEY_PIN3)) LED_TOG;// jeżeli klawisz K3 wciśnięty przełącz dioodę<br />_delay_ms(200);// pauza 200ms<br />}<br />}<br />// definicja funkcji<br />// funkcja posiada argument, zwraca wynik 0 lub 1<br />uint8_t klawisz_wcisniety (uint8_t klawisz)<br />{<br />if (! (PINC&amp;klawisz) )// klawisz wciśnięty?<br /><br />{<br />_delay_ms(80);// czas drgania styków<br /><br />return 1;// jeśli wciśnięty, zakończ funkcję, rezultat = 1<br />    }<br />if (!(PIND&amp;klawisz))<br />{<br />_delay_ms(80);// czas drgania styków<br /><br />return 1;// jeśli wciśnięty, zakończ funkcję, rezultat = 1<br />}<br /><br /> return 0;// jeśli nie wciśnięty klawisz, zakończ funkcję, rezultat = 0<br />}[/syntax]<br /><br />Próbowałem zmieniać <br />if (! (PINC&amp;klawisz) ) na if (! ((PINC|PIND)&amp;klawisz) ) i zero odzewu, wrażenia jakby cały czas był sygnał na PD6. Robiłem już kilkanaście przeróbek których nie przytaczam, ale bez efektu.<br /><br />Sorki, ale jestem chyba tępy lub leniwy, chociaż spędziłem nad tym już trochę czasu.<br /><br />Jakieś sugestie?<br /><br />Z góry dziękuje.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1099">Wójcik Robert</a> — 8 sty 2020, o 21:24</p><hr />
]]></content>
</entry>
</feed>