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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-02-14T23:10:11+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=812&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-14T23:10:11+01:00</updated>
<published>2012-02-14T23:10:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2931#p2931</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2931#p2931"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2931#p2931"><![CDATA[
<div class="quotetitle">DidekxD napisał(a):</div><div class="quotecontent"><br />W książce zobacz taki rozdział jak &quot;8.4 Wstęp do systemów czasu rzeczywistego&quot;<br />.<br /></div><br /><br />Bardzo dobra i cenna podpowiedź tym bardziej, że kolega DidekxD już stosuje te mechanizmy w swoich kodach z powodzeniem, a co więcej widać to w kodach w jego postach więc można także podpatrzeć jak inni to robią.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 lut 2012, o 23:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DidekxD]]></name></author>
<updated>2012-02-14T23:02:59+01:00</updated>
<published>2012-02-14T23:02:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2929#p2929</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2929#p2929"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2929#p2929"><![CDATA[
W książce zobacz taki rozdział jak &quot;8.4 Wstęp do systemów czasu rzeczywistego&quot;<br />I zwróć uwagę na timery programowe.<br /><br />Będziesz mógł przy ich wykorzystaniu cały czas przez te cztery sekundy sprawdzać czy nie został wciśnięty któryś z guzików po czym odpali się twoja funkcja.<br />Zapomnij o liniowym pisaniu i o funkcji _delay warto korzystać z tych timerów. Dużo problemów odchodzi w niepamięć(albo dylematów).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=146">DidekxD</a> — 14 lut 2012, o 23:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kris]]></name></author>
<updated>2012-02-14T22:51:51+01:00</updated>
<published>2012-02-14T22:51:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2928#p2928</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2928#p2928"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2928#p2928"><![CDATA[
Funkcja temp() po 4 sekundach się uruchamia ale nie mam pomysłu w jaki sposób stworzyć coś, może funkcję która rozpozna że nic się w danej chwili nie dzieje np. nie został wciśnięty żaden klawisz przez 4 sekundy i dopiero powinno nastąpić wywołanie funkcji temp(). Nie proszę o gotowy kod tylko o jakieś wskazówki w jaki sposób mogę ten problem rozwiązać <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=202">kris</a> — 14 lut 2012, o 22:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-14T19:41:32+01:00</updated>
<published>2012-02-14T19:41:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2920#p2920</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2920#p2920"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2920#p2920"><![CDATA[
No teraz lepiej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Ale po pierwsze w takim przypadku pomijając na razie to że nie wykonuje się funkcja temp, to praktycznie ciężko będzie ci w ogóle wywołać któryś klawisz chyba że przy starcie programu będziesz jakiś trzymał wciąż wciśnięty.<br /><br />A druga sprawa - skoro nie wywołuje ci się funkcja temp to znaczy że masz ją źle napisaną bo to niemożliwe żeby się nie wywołała.<br /><br />Po trzecie to nigdy nie warto tak pisać programu a szczególnie MENU, że pisze się po kawałku doklecając co chwilę jakąś nową dziwną możliwość. Najpierw to trzeba sobie na kartce papieru rozrysować całe MENU - jak ma działać, co po kolei i skąd wywoływane itd..... czyli prościej mówiąc przygotować sobie algorytm - a potem łatwiej to oprogramować. Tymczasem tak? to wychodzą niestety potworki <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />ale jak mówię - to nie ma nic wspólnego z tym że ci się rzekomo temp() nie wykonuje bo to jakieś nieporozumienie to co napisałeś.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 lut 2012, o 19:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kris]]></name></author>
<updated>2012-02-14T18:53:47+01:00</updated>
<published>2012-02-14T18:53:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2919#p2919</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2919#p2919"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2919#p2919"><![CDATA[
[syntax=c]int back(void){<br /><br />lcd_cls();<br />lcd_locate(0,10);<br />lcd_str(&quot;Menu&quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot;&lt;&quot;);<br />lcd_locate(1,23);<br />lcd_str(&quot;&gt;&quot;);<br />lcd_locate(1,8);<br />lcd_str(&quot;1&quot;);<br /><br />while(1) {<br /><br />uint8_t k1,k2,k3;<br /><br />        SuperDebounce(&amp;k1, &amp;PINB, KL1, 0, 0, menu_down, 0 );<br />    SuperDebounce(&amp;k2, &amp;PINB, KL2, 0, 0, menu_up, 0 );<br />    SuperDebounce(&amp;k3, &amp;PINB, KL3, 0, 0, set, 0 );<br />                _delay_ms(4000);<br />                temp();<br />}<br />return 0;<br />}[/syntax]Jeśli nie wcisne żadnego przycisku to powinno odczekać i wywołać funkcję temp(), a w moim przypadku po 4 sekundach przechodzi do funkcji temp().<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=202">kris</a> — 14 lut 2012, o 18:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-14T18:46:15+01:00</updated>
<published>2012-02-14T18:46:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2918#p2918</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2918#p2918"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2918#p2918"><![CDATA[
Oj przepraszam ale na takie pytanie w ogóle nie odpowiem. To jest wręcz prośba o napisanie programu. Panie kolego, proszę zaprezentować jakiś konkretny problem, spróbować pokazać swoje rozwiązanie i opisać co w nim konkretnie sprawia kłopot....<br /><br /><br />a nie zadawać pytania typu - życzenia: &quot;chciałbym żeby w programie było to i to - jak to zrobić?&quot;<br /><br />sorki ale to dla mnie nie jest pytanie - OK ? (bez urazy proszę - ale pytania też trzeba umieć zadawać)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 lut 2012, o 18:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kris]]></name></author>
<updated>2012-02-14T18:05:01+01:00</updated>
<published>2012-02-14T18:05:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2917#p2917</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2917#p2917"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2917#p2917"><![CDATA[
Mam problem z tym kawałkiem kodu [syntax=c]int back(void){<br /><br />lcd_cls();<br />lcd_locate(0,10);<br />lcd_str(&quot;Menu&quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot;&lt;&quot;);<br />lcd_locate(1,23);<br />lcd_str(&quot;&gt;&quot;);<br />lcd_locate(1,8);<br />lcd_str(&quot;1&quot;);<br /><br />while(1) {<br /><br />uint8_t k1,k2,k3;<br /><br />SuperDebounce(&amp;k1, &amp;PINB, KL1, 0, 0, menu_down, 0 );<br />SuperDebounce(&amp;k2, &amp;PINB, KL2, 0, 0, menu_up, 0 );<br />SuperDebounce(&amp;k3, &amp;PINB, KL3, 0, 0, set, 0 );<br />}<br />return 0;<br />}[/syntax]<br /><br />Chciałbym zastosować w nim przejście do funkcji np. temp() jeśli nie zostanie wciśnięty żaden przycisk przez 4 s. W jaki sposób mogę to zrobić?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=202">kris</a> — 14 lut 2012, o 18:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kris]]></name></author>
<updated>2012-02-13T11:38:56+01:00</updated>
<published>2012-02-13T11:38:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2867#p2867</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2867#p2867"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2867#p2867"><![CDATA[
Menu działa na pojedynczym przycisku, dzięki za pomoc <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=202">kris</a> — 13 lut 2012, o 11:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-05T15:26:09+01:00</updated>
<published>2012-02-05T15:26:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2331#p2331</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2331#p2331"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2331#p2331"><![CDATA[
A po co ci ta cała funkcja zmiana? po pierwsze.<br /><br />A po drugie przeanalizuj sobie jak ona działa. Definiujesz w niej zmienną i tworzoną automatycznie przy wejściu i jest ustawiana zawsze na 2 ... to w ogóle niezrozumiały kod tej funkcji <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />utwórz sobie zmienną lokalną ale statyczną zmiana, ale w funkcji menu, i zwiększaj ją po każdym wejściu o 1, sprawdzając jednocześnie czy jest większa niż 2 i wtedy znowu 0.<br /><br />[syntax=c]void menu(void){<br /><br />       static uint8_t zmiana;<br /><br />//        lcd_init(); -----------&gt; panie kolego WYKASUJ to stąd ! czy do ciebie nie dociera że to się robi tylko RAZ przy inicjalizacji całego programu <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> ????<br /><br /><br />        if(zmiana()==0){<br />                lcd_locate(0,0);<br />                lcd_str(&quot;1&quot;);<br />        }if(zmiana()==1){<br />                lcd_locate(0,0);<br />                lcd_str(&quot;2&quot;);<br />        }if(zmiana()==2){<br />                lcd_locate(0,0);<br />                lcd_str(&quot;3&quot;);<br />        }<br /><br />        if( ++zmiana &gt; 2 ) zmiana = 0;<br /><br />}[/syntax]<br /><br />I na prawdę - proszę mnie zrozumieć i się nie gniewać - ale jeśli dalej w kolejnych kodach kolega będzie wciąż robił inicjalizację LCD w tak dziwnych miejscach programu - to ja się poddaję i przestanę podpowiadać. <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Przecież pisałem o tym koledze już wcześniej w tym temacie nie mówiąc o tym, że książce wyłożyłem temat wyraźnie na jakie sekcje dzielimy główną funkcję main() i że tam na jej początku dokonujemy inicjalizacji wszystkich modułów. A kolega z uporem godnym podziwu wciąż wkleja w dowolne miejsca kodu tę inicjalizację LCD <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Zajrzyj do swojego kodu powyżej - pokazałem ci tam wyraźnie jeszcze raz gdzie ma być sekcja inicjalizacji - może teraz kolega zapamięta na zawsze ? <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> — 5 lut 2012, o 15:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kris]]></name></author>
<updated>2012-02-05T13:10:20+01:00</updated>
<published>2012-02-05T13:10:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2317#p2317</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2317#p2317"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2317#p2317"><![CDATA[
Stworzyłem coś takiego tylko nie działa, co może być nie tak?<br />[syntax=c]<br />#define KEY_DOWN !(PINB &amp; KL1)<br />int zmiana(void){<br />uint8_t i;<br /><br />if(KEY_DOWN)i=0;<br />if(KEY_DOWN)i=1;<br />if(KEY_DOWN)i=2;<br />return i;<br />}<br /><br />void menu(void){<br />lcd_init();<br />if(zmiana()==0){<br />lcd_locate(0,0);<br />lcd_str(&quot;1&quot;);<br />}if(zmiana()==1){<br />lcd_locate(0,0);<br />lcd_str(&quot;2&quot;);<br />}if(zmiana()==2){<br />lcd_locate(0,0);<br />lcd_str(&quot;3&quot;);<br />}<br />}<br />int main(void) {<br /><br />// ****************   S E K C J A   I N I C J A L I Z A C J I  *************************<br />PORTB |= KL1;<br /><br />/* Timer2 – inicjalizacja przerwania co 10ms */<br />TCCR2 = (1&lt;&lt;WGM21);// tryb pracy CTC<br />TCCR2 = (1&lt;&lt;CS22)|(1&lt;&lt;CS20);// preskaler = 1024<br />OCR2 = 108;// przerwanie porównania co 10ms (100Hz)<br />TIMSK = (1&lt;&lt;OCIE2);// Odblokowanie przerwania CompareMatch<br /><br />        lcd_init(); // -------&gt;  TU MA BYĆ INICJALIZACJA LCD - TYLKO RAZ<br /><br />// ****************  koniec   S E K C J I   I N I C J A L I Z A C J I  *************************<br /><br />sei();<br /><br /><br />while(1) {<br /><br />uint8_t k1;<br /><br />SuperDebounce(&amp;k1, &amp;PINB, KL1, 0, 0, menu, 0 );<br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=202">kris</a> — 5 lut 2012, o 13:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-03T16:13:40+01:00</updated>
<published>2012-02-03T16:13:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2285#p2285</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2285#p2285"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2285#p2285"><![CDATA[
eeeh nie - skucha całkiem źle - ty wywołujesz je z tym samym klawiszem KEY1_PIN <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> ... to trzeba całkiem inaczej...<br /><br />wprowadzasz sobie jakąś zmienną, która będzie ci wskazywała poziom menu<br /><br />i wywołujesz tylko raz funkcję SUperDebounce, a funkcja którą wywołujesz będzie jedynie zwiększała wartość tej zmiennej sprawdzając czy nie przekroczyła wartości 2 a jeśli tak to znowu 0<br /><br />i w tej funkcji dopiero w zależności od tej zmiennej wywołujesz odpowiednią funkcję z pozycją twojego MENU<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 lut 2012, o 16:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-03T16:11:28+01:00</updated>
<published>2012-02-03T16:11:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2284#p2284</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2284#p2284"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2284#p2284"><![CDATA[
Już tłumaczę, w pierwszym przypadku użyłeś jednej zmiennej k1 dla każdej z funkcji, tymczasem one muszą mieć całkiem oddzielne zmienne.<br /><br />zdefiniuj sobie więc trzy:<br /><br />uint8_t k1, k2, k3;<br /><br />i użyj każdą do oddzielnego wywołania SuperDebounce<br /><br />bez żadnego robienia dodatkowej pętli for() <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  .... czyli:<br /><br /><br />[syntax=c]                                while(1){<br />                                        uint8_t k1;<br />                                                SuperDebounce(&amp;k1, &amp;PINB, KEY1_PIN, 0, 0, testa, 0);<br />                                                SuperDebounce(&amp;k2, &amp;PINB, KEY1_PIN, 0, 0, testb, 0);<br />                                                SuperDebounce(&amp;k3, &amp;PINB, KEY1_PIN, 0, 0, testc, 0);<br />                                }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 lut 2012, o 16:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kris]]></name></author>
<updated>2012-02-03T15:37:12+01:00</updated>
<published>2012-02-03T15:37:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2280#p2280</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2280#p2280"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2280#p2280"><![CDATA[
A jeśli tak by wyglądał kod? [syntax=c]while(1){<br />uint8_t k1,i;<br />for(i=0;i&lt;3;i++){<br />if(i==0){<br />SuperDebounce(&amp;k1, &amp;PINB, KEY1_PIN, 0, 0, testa, 0);<br />}<br />if(i==1){<br />SuperDebounce(&amp;k1, &amp;PINB, KEY1_PIN, 0, 0, testb, 0);<br />}<br />if(i==2){<br />SuperDebounce(&amp;k1, &amp;PINB, KEY1_PIN, 0, 0, testc, 0);<br />}<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=202">kris</a> — 3 lut 2012, o 15:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-02-03T15:29:55+01:00</updated>
<published>2012-02-03T15:29:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2277#p2277</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2277#p2277"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2277#p2277"><![CDATA[
wiesz do tej pory uważałem ze do takiego celu jest wygodniejszy encoder  ,  i zwykle to rozwiązanie stosuję<br />a co do powyższego , wcale mnie to nie dziwi ze wybiera przypadkowo przecież ja tu widzę 3 elementy na jednym przycisku <br />uruchamiane w pętli jedno po drugim wiec na co trafisz to masz <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=58">SunRiver</a> — 3 lut 2012, o 15:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kris]]></name></author>
<updated>2012-02-03T15:06:14+01:00</updated>
<published>2012-02-03T15:06:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2275#p2275</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2275#p2275"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2275#p2275"><![CDATA[
Może jest jakiś błąd w pętli którą zdefiniowałem? Bo po wciśnięciu przycisku wywołana zostaje dowolna funkcja, a interesuje mnie kolejno przeskakiwanie z jednej na drugą jednym przyciskiem. [syntax=c]while(1){<br />uint8_t k1;<br />SuperDebounce(&amp;k1, &amp;PINB, KEY1_PIN, 0, 0, testa, 0);<br />SuperDebounce(&amp;k2, &amp;PINB, KEY1_PIN, 0, 0, testb, 0);<br />SuperDebounce(&amp;k3, &amp;PINB, KEY1_PIN, 0, 0, testc, 0);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=202">kris</a> — 3 lut 2012, o 15:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-03T12:27:29+01:00</updated>
<published>2012-02-03T12:27:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2273#p2273</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2273#p2273"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2273#p2273"><![CDATA[
Pierwsza uwaga, proszę nie zamieszczać na forach kodów źródłowych z bibliotek z książki. Swój własny można - ale prośba - nie kody z książki OK ? ..... teraz nie mam czasu analizować - kodu ale później wrócę i sprawdzę - może coś mi się nasunie to dam znać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 lut 2012, o 12:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kris]]></name></author>
<updated>2012-02-03T11:41:33+01:00</updated>
<published>2012-02-03T11:41:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2272#p2272</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2272#p2272"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2272#p2272"><![CDATA[
Stworzyłem coś takiego tylko nie wiem czemu nie działa prawidłowo. Chciałbym aby jednym przyciskiem po kolei poruszać się miedzy test1, test2, test3, proszę o wskazówki  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2010-03-31<br /> *       Autor: Krystian Cieśla<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />#define KEY1_PIN (1&lt;&lt;PB0)<br /><br />volatile uint16_t Timer1, Timer2;<br /><br /><br />/************** funkcja SuperDebounce do obsługi pojedynczych klawiszy ***************/<br />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) );<br /><br />void testa(void) {<br />lcd_init();<br />lcd_str(&quot;Test1&quot;);<br />}<br /><br />void testb(void) {<br />lcd_init();<br />lcd_str(&quot;Test2&quot;);<br />}<br /><br />void testc(void) {<br />lcd_init();<br />lcd_str(&quot;Test3&quot;);<br />}<br /><br />int main(void){<br /><br /> lcd_init();  //inicjalizacja wyświetlacza<br /> DDRB &amp;= ~KEY1_PIN;<br /> PORTB |= KEY1_PIN;<br /><br /> /* Timer2 – inicjalizacja przerwania co 10ms */<br /> TCCR2 = (1&lt;&lt;WGM21);// tryb pracy CTC<br /> TCCR2 = (1&lt;&lt;CS22)|(1&lt;&lt;CS20);// preskaler = 1024<br /> OCR2 = 108;// przerwanie porównania co 10ms (100Hz)<br /> TIMSK = (1&lt;&lt;OCIE2);// Odblokowanie przerwania CompareMatch<br /><br /> sei();<br /><br /><br />while(1){<br />uint8_t k1;<br />SuperDebounce(&amp;k1, &amp;PINB, KEY1_PIN, 0, 0, testa, 0);<br />SuperDebounce(&amp;k1, &amp;PINB, KEY1_PIN, 0, 0, testb, 0);<br />SuperDebounce(&amp;k1, &amp;PINB, KEY1_PIN, 0, 0, testc, 0);<br />}<br />}<br /><br /><br /><br />/************** funkcja SuperDebounce do obsługi pojedynczych klawiszy ***************<br /> * AUTOR: Mirosław Kardaś<br /> * ZALETY:<br /> * - nie wprowadza najmniejszego spowalnienia<br /> * - posiada funkcję REPEAT (powtarzanie akcji dla dłużej wciśniętego przycisku)<br /> * - można przydzielić różne akcje dla trybu REPEAT i pojedynczego kliknięcia<br /> * - można przydzielić tylko jedną akcję wtedy w miejsce drugiej przekazujemy 0 (NULL)<br /> *<br /> * Wymagania:<br /> * Timer programowy utworzony w oparciu o Timer sprzętowy (przerwanie 100Hz)<br /> *<br /> * Parametry wejściowe:<br /> * *key_state - wskaźnik na zmienną w pamięci RAM (1 bajt)<br /> *  *KPIN - nazwa PINx portu na którym umieszczony jest klawisz, np: PINB<br /> *  key_mask - maska klawisza np: (1&lt;&lt;PB3)<br /> *  rep_time - czas powtarzania funkcji rep_proc w trybie REPEAT<br /> *  rep_wait - czas oczekiwania do przejścia do trybu REPEAT<br /> *  push_proc - wskaźnik do własnej funkcji wywoływanej raz po zwolenieniu przycisku<br /> *  rep_proc - wskaźnik do własnej funkcji wykonywanej w trybie REPEAT<br /> **************************************************************************************/<br />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) ) {<br /><br />// ..... reszta kodu funkcji w książce<br />}<br /><br /><br /><br />ISR(TIMER2_COMP_vect)<br />{<br />uint16_t n;<br /><br />n = Timer1;/* 100Hz Timer1 */<br />if (n) Timer1 = --n;<br />n = Timer2;/* 100Hz Timer2 */<br />if (n) Timer2 = --n;<br />}<br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=202">kris</a> — 3 lut 2012, o 11:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kris]]></name></author>
<updated>2012-02-02T15:09:29+01:00</updated>
<published>2012-02-02T15:09:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2231#p2231</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2231#p2231"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2231#p2231"><![CDATA[
dzięki za wskazówki  <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=202">kris</a> — 2 lut 2012, o 15:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-02T15:06:55+01:00</updated>
<published>2012-02-02T15:06:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2230#p2230</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2230#p2230"/>
<title type="html"><![CDATA[Re: proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2230#p2230"><![CDATA[
<div class="quotetitle">kris napisał(a):</div><div class="quotecontent"><br />Co zrobić aby ta operacja była płynna?<br /></div><br /><br />Przeczytać do końca książkę, zrozumieć zasadę działania z przyciskami z rozdziału, który temu zagadnieniu poświęciłem w szczegółach, zobaczyć i zrozumieć opisaną tam funkcję SuperDebounce a także przeczytać rozdział:<br /><br />&quot;Wstęp do systemów czasu rzeczywistego&quot;<br /><br />A wszystko stanie się jasne jak drut i przejrzyste jak słońce. Jednocześnie opisane problemy skończą się jak toporem uciął <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> — 2 lut 2012, o 15:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kris]]></name></author>
<updated>2012-02-02T14:49:42+01:00</updated>
<published>2012-02-02T14:49:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2224#p2224</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2224#p2224"/>
<title type="html"><![CDATA[proste menu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=812&amp;p=2224#p2224"><![CDATA[
Stworzyłem proste menu które pozwala jednym przyciskiem przeskakiwać pomiędzy trzema wyrażeniami, a mój problem polega na tym że gdy wciskam przycisk to czasami wskakuje na wyrażenie 2 po dłuższym wciśnięciu na wyrażenie 3. Co zrobić aby ta operacja była płynna?<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2010-03-27<br /> *       Autor: Krystian Cieśla<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />// klawisz K1<br />#define KEY_PIN (1&lt;&lt;PB1)<br />#define KEY_DOWN !(PINB &amp; KEY_PIN)<br /><br />uint8_t klawisz_wcisniety(void);<br /><br /><br />int main(void)<br />{<br />// ****** inicjalizacja *********<br />    lcd_init();<br />DDRB &amp;= ~KEY_PIN;// kierunek pinu PB1 - wejściowy<br />PORTB |= KEY_PIN;// podciągnięcie pinu do VCC<br /><br />// ****** pętla główna programu  *********<br />while(1)<br />{<br />if(  klawisz_wcisniety()  )<br />{<br />lcd_cls();<br />lcd_locate(0,0);<br />lcd_str(&quot;Test1&quot;);<br />_delay_ms(200);<br />}if (klawisz_wcisniety()){<br />lcd_cls();<br />lcd_locate(0,0);<br />lcd_str(&quot;Test2&quot;);<br />_delay_ms(200);<br />}if (klawisz_wcisniety()){<br />lcd_cls();<br />lcd_locate(0,0);<br />lcd_str(&quot;Test3&quot;);<br />_delay_ms(200);<br />}<br />}<br />}<br />//******************************************************** koniec main()<br /><br />// definicja funkcji<br />uint8_t klawisz_wcisniety(void)<br />{<br />if( KEY_DOWN )<br />{<br />_delay_ms(80);<br />if( KEY_DOWN ) return 1;<br />}<br /><br />return 0;<br />}<br /><br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=202">kris</a> — 2 lut 2012, o 14:49</p><hr />
]]></content>
</entry>
</feed>