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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-02-10T16:32:19+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=17585&amp;mode</id>
<entry>
<author><name><![CDATA[Miodzjo]]></name></author>
<updated>2017-02-10T16:32:19+01:00</updated>
<published>2017-02-10T16:32:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182351#p182351</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182351#p182351"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy - SuperDebounce]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182351#p182351"><![CDATA[
<div class="quotetitle">tonygryps napisał(a):</div><div class="quotecontent"><br />chociaż to ty masz coś namieszane w tej funkcji zobacz ten wątek<a href="http://forum.atnel.pl/post6106.html#p6106"  class="postlink">http://forum.atnel.pl/post6106.html#p6106</a><br /></div><br /><br />Dzięki, ta poprawiona wersja SuperDebounce działa bez zarzutu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14849">Miodzjo</a> — 10 lut 2017, o 16:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Miodzjo]]></name></author>
<updated>2017-02-10T00:39:10+01:00</updated>
<published>2017-02-10T00:39:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182296#p182296</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182296#p182296"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy - SuperDebounce]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182296#p182296"><![CDATA[
Też mam wydanie 2 w twardej okładce. Oczywiście mogę spróbować użyć innej wersji SuperDebounce, z tego co zrozumiałem to w BB są dwie różne w zależności od lekcji. Sprawdzę to jutro jak będę w domu.<br /><br />Ale nie rozumiem dlaczego dzieje się tak jak napisałem. Korzystałem już wielokrotnie z tej wersji SuperDebounce i nigdy nie było problemu. Zresztą tak jak napisałem wystarczy zakomentować jeden przycisk i też jest OK, problem pojawia się kiedy są wszystkie 4.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14849">Miodzjo</a> — 10 lut 2017, o 00:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tonygryps]]></name></author>
<updated>2017-02-09T16:19:19+01:00</updated>
<published>2017-02-09T16:19:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182235#p182235</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182235#p182235"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy - SuperDebounce]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182235#p182235"><![CDATA[
to czysty kod z BB lekcja _17SuperDebonce ale to nie istotne może masz inną wersją BB bo były 2 w twardej i miękiej okładce jak mam wydanie 2 w twardej okładce. <br />Jak masz key_state w sirodku to pewnie z specyfikatorem static i to jest najprawdopodobniej przyczyną twoich kłopotów zajrzyj na stronę atnel w wydawnictwo czy nie na uaktualnienia do tej funkcji Mirek tam ma powstawiane parę uaktualnień do swoich kodów.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 13 minutach ]</span></strong><br /><br />a poza tym jaki problem zmienić sobie to jak ci pokazałem nagłówek funkcji wystarczy powołać sobie zmienne globalne dla każdego klawisza i przekazywać je do funkcji w ten sposób<br />[syntax=c]SuperDebounce(&amp;k1, &amp;KL1_PIN, KL1, 20, 500, led1_xor, led1_xor );[/syntax] dla 1 klawisza<br />[syntax=c]SuperDebounce(&amp;k2, &amp;KL2_PIN, KL2, 20, 500, led1_xor, led1_xor );[/syntax] dla 2 klawisza itp..<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 27 minutach ]</span></strong><br /><br />chociaż to ty masz coś namieszane w tej funkcji zobacz ten wątek<a href="http://forum.atnel.pl/post6106.html#p6106"  class="postlink">http://forum.atnel.pl/post6106.html#p6106</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12014">tonygryps</a> — 9 lut 2017, o 16:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Miodzjo]]></name></author>
<updated>2017-02-09T16:04:30+01:00</updated>
<published>2017-02-09T16:04:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182231#p182231</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182231#p182231"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy - SuperDebounce]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182231#p182231"><![CDATA[
Nagłówek który podałeś różni się od tego z BB. W BB key_state jest wewnątrz funkcji. Skąd wziąłeś ten nagłówek?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14849">Miodzjo</a> — 9 lut 2017, o 16:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tonygryps]]></name></author>
<updated>2017-02-09T15:30:40+01:00</updated>
<published>2017-02-09T15:30:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182226#p182226</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182226#p182226"/>
<title type="html"><![CDATA[Re: Obsługa klawiszy - SuperDebounce]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182226#p182226"><![CDATA[
coś namieszałeś w w funkcji SuperDebonce bo masz inny nagłówek funkcji niż orginalny [syntax=c]void SuperDebounce(uint8_t * key_state, volatile uint8_t *KPIN,<br />uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc)(void), void (*rep_proc)(void) );[/syntax]<br />zjadłeś key_state a to ważna zmienna która przetrzymuje wartość danego klawisza dala każdego musi być inna zmienna.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12014">tonygryps</a> — 9 lut 2017, o 15:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Miodzjo]]></name></author>
<updated>2017-02-09T15:01:36+01:00</updated>
<published>2017-02-09T15:01:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182224#p182224</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182224#p182224"/>
<title type="html"><![CDATA[Obsługa klawiszy - SuperDebounce]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17585&amp;p=182224#p182224"><![CDATA[
Mam problem ze zrobieniem obsługi 4 klawiszy z wykorzystaniem SuperDebounce z BB. Dla uproszczenia płytki 4 klawisze są podłączone do 3 różnych portów. Problem polega na tym, że wciskanie klawisza 1 wywołuje funkcję przypisaną dla klawisza 3 i odwrotnie. Ale jak zakomentuję sprawdzanie klawisza 1 to klawisz 3 działa prawidłowo. Zakomentowanie sprawdzania klawisza 3 powoduje prawidłowe działanie klawisza 1. Żeby wyeliminować wpływ innych fragmentów kodu, napisałem krótki program do testów i problem nadal występuje. Poniżej kod:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define KL1 (1&lt;&lt;PD1)       // definicja klawisza 2<br />#define KL1_PIN PIND<br />#define KL1_DDR DDRD<br />#define KL1_PORT PORTD<br /><br />#define KL2 (1&lt;&lt;PB5)       // definicja klawisza 2<br />#define KL2_PIN PINB<br />#define KL2_DDR DDRB<br />#define KL2_PORT PORTB<br /><br />#define KL3 (1&lt;&lt;PC1)       // definicja klawisza 3<br />#define KL3_PIN PINC<br />#define KL3_DDR DDRC<br />#define KL3_PORT PORTC<br /><br />#define KL4 (1&lt;&lt;PB4)       // definicja klawisza 4<br />#define KL4_PIN PINB<br />#define KL4_DDR DDRB<br />#define KL4_PORT PORTB<br /><br />#define LED1 (1&lt;&lt;PC2)// definicja pinu do którego podłączona jest dioda1<br />#define LED1_DDR DDRC//<br />#define LED1_ON PORTC &amp;= ~LED1// makrodefinicja – załączenie diody<br />#define LED1_OFF PORTC |= LED1// makrodefinicja – wyłączenie diody<br />#define LED1_TOG PORTC ^= LED1// makrodefinicja – zmiana stanu diody<br /><br />#define LED2 (1&lt;&lt;PB7)// definicja pinu do którego podłączona jest dioda2<br />#define LED2_DDR DDRB//<br />#define LED2_ON PORTB &amp;= ~LED2// makrodefinicja – załączenie diody<br />#define LED2_OFF PORTB |= LED2// makrodefinicja – wyłączenie diody<br />#define LED2_TOG PORTB ^= LED2// makrodefinicja – zmiana stanu diody<br /><br />#define LED3 (1&lt;&lt;PD7)// definicja pinu do którego podłączona jest dioda3<br />#define LED3_DDR DDRD//<br />#define LED3_ON PORTD &amp;= ~LED3// makrodefinicja – załączenie diody<br />#define LED3_OFF PORTD |= LED3// makrodefinicja – wyłączenie diody<br />#define LED3_TOG PORTD ^= LED3// makrodefinicja – zmiana stanu diody<br /><br />#define LED4 (1&lt;&lt;PD4)// definicja pinu do którego podłączona jest dioda4<br />#define LED4_DDR DDRD//<br />#define LED4_ON PORTD &amp;= ~LED4// makrodefinicja – załączenie diody<br />#define LED4_OFF PORTD |= LED4// makrodefinicja – wyłączenie diody<br />#define LED4_TOG PORTD ^= LED4// makrodefinicja – zmiana stanu diody<br /><br />void SuperDebounce ( volatile uint8_t *KPIN, uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc) (void), void(*rep_proc) (void));<br /><br />void klawisz1_press(void); // funkcja obsugi krotkiego wcisniecia klawisza<br />void klawisz1_rep(void);         // funkcja obslugi dlugiego wcisniecia klawisza<br />void klawisz2_press(void);<br />void klawisz2_rep(void);<br />void klawisz3_press(void);<br />void klawisz3_rep(void);<br />void klawisz4_press(void);<br />void klawisz4_rep(void);<br /><br />volatile uint16_t Timer1;    // timery programowe 1 - superdebounce<br /><br />int main(void){<br /><br />KL1_DDR &amp;= ~KL1;// ustawienie portu jako wejście dla przycisku P2<br />KL1_PORT |= KL1;// Podciąganie portu przycisku P2<br />KL2_DDR &amp;= ~KL2;// ustawienie portu jako wejście dla przycisku P2<br />KL2_PORT |= KL2;// Podciąganie portu przycisku P2<br />KL3_DDR &amp;= ~KL3;// ustawienie portu jako wejście dla przycisku P3<br />KL3_PORT |= KL3;// Podciąganie portu przycisku P3<br />KL4_DDR &amp;= ~KL4;// ustawienie portu jako wejście dla przycisku P4<br />KL4_PORT |= KL4;// Podciąganie portu przycisku P4<br /><br />LED1_DDR |= LED1;<br />LED1_OFF;<br />LED2_DDR |= LED2;<br />LED2_OFF;<br />LED3_DDR |= LED3;<br />LED3_OFF;<br />LED4_DDR |= LED4;<br />LED4_OFF;<br /><br />TCCR2A |= (1&lt;&lt;WGM21);// tryb pracy CTC<br />TCCR2B |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);// preskaler = 1024<br />OCR2A = 77;// przerwanie porównania co 10ms (100Hz)<br />TIMSK2 = (1&lt;&lt;OCIE2A);// Odblokowanie przerwania CompareMatch<br /><br />sei();              // włączenie przerwań<br /><br />while(1){<br />SuperDebounce(&amp;KL1_PIN, KL1, 20, 100, klawisz1_press, klawisz1_rep);<br />SuperDebounce(&amp;KL2_PIN, KL2, 20, 100, klawisz2_press, klawisz2_rep);<br />SuperDebounce(&amp;KL3_PIN, KL3, 20, 100, klawisz3_press, klawisz3_rep);<br />SuperDebounce(&amp;KL4_PIN, KL4, 20, 100, klawisz4_press, klawisz4_rep);<br />}<br />}<br /><br />void SuperDebounce ( volatile uint8_t *KPIN, uint8_t key_mask, uint16_t rep_time, uint16_t rep_wait,<br />void (*push_proc) (void), void(*rep_proc) (void)) {<br /><br />// tutaj jest kod z BB<br /><br />}<br /><br />ISR( TIMER2_COMPA_vect ) {  // timery programowe<br /><br />uint16_t n;<br /><br />n = Timer1;<br />if (n) Timer1 = --n;<br /><br />}<br /><br />void klawisz1_press(void){<br />LED1_TOG;<br />}<br /><br />void klawisz1_rep(void){<br /><br />}<br /><br />void klawisz2_press(void){<br />LED2_TOG;<br /><br />}<br /><br />void klawisz2_rep(void){  // wyswietlenie napięcia przez 1s przy długim wciśnięciu kl2<br /><br />}<br /><br />void klawisz3_press(void){<br />LED3_TOG;<br />}<br /><br />void klawisz3_rep(void){<br /><br />}<br /><br />void klawisz4_press(void){<br />LED4_TOG;<br />}<br /><br />void klawisz4_rep(void){<br /><br />}[/syntax]<br /><br />Co robię źle? Jak rozwiązać ten problem?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14849">Miodzjo</a> — 9 lut 2017, o 15:01</p><hr />
]]></content>
</entry>
</feed>