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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-11-09T16:15:53+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=12&amp;t=9046&amp;mode</id>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-11-09T16:15:53+01:00</updated>
<published>2014-11-09T16:15:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=103022#p103022</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=103022#p103022"/>
<title type="html"><![CDATA[Re: Przycisk wielofunkcyjny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=103022#p103022"><![CDATA[
Dla 3-4-ech przycisków można po prostu powielić ten fragment kodu zmieniając tylko zmienną licznikową L_d, bo dla każdego klawisza musi być identyczna i można użyć jednego timera programowego, tzn. ten co jest wyrzucić przed całą sekwencję badania klawiszy i praktycznie na jedno wyjdzie. Można by pokombinować ze zrobieniem funkcji wywoływanej z programu z parametrem badanego przycisku, ale szczerze mówiąc nie chcę już wracać za bardzo do bascoma. Dla więcej jak 4 przyciski (np.8) dużo bardziej opłaca się zrobić tablicowanie zmiennych. Poniżej przykład, tylko zamiast waitms timer programowy jak w powyższym przykładzie trzeba umieścić, aby program był w pełni &quot;przelotowy&quot;. Robiłem komuś kiedyś taki włącznik i w zasadzie uC nic więcej nie robił. To kompletny program. Aha, i warunek to wszystkie przyciski na jednym porcie.<br /><br />[syntax=basic4gl]$regfile &quot;attiny2313.dat&quot;<br />$crystal = 1000000<br />'--<br />Config Portb = Input<br />Portb = &amp;B11111111<br />Config Portd = Output<br />Portd = &amp;B00000000<br />Config Porta.0 = Output<br />Porta.0 = 0<br /><br />Dim Nr As Byte                'licznik przycisków<br />Dim Nrp As Byte               'zmienna dla portu (nie zawsze jest potrzebna)<br />Dim L_d(8) As Byte            'licznik długiego przycisku<br /><br />L_d(1) = 0<br />L_d(2) = 0<br />L_d(3) = 0<br />L_d(4) = 0<br />L_d(5) = 0<br />L_d(6) = 0<br />L_d(7) = 0<br />L_d(8) = 0<br /><br />Nr = 1<br />'----------------------<br />Do<br />'--------<br />Nrp = Nr - 1<br />If Pinb.nrp = 0 Then          'klawisze na porcie &quot;B&quot;<br />   Waitms 3                   '25ms/8przycisków = ok. 3ms (można zastąpić timerem programowym)<br />   If L_d(nr) &lt; 255 Then Incr L_d(nr)<br />   If L_d(nr) = 10 Then<br />      'długi przycisk<br />      Select Case Nr<br />      Case 1 : Reset Portd.0<br />      Case 2 : Reset Portd.1<br />      Case 3 : Reset Portd.2<br />      Case 4 : Reset Portd.3<br />      Case 5 : Reset Portd.4<br />      Case 6 : Reset Portd.5<br />      Case 7 : Reset Portd.6<br />      Case 8 : Reset Porta.0<br />      End Select<br />   End If<br />Else<br />   If L_d(nr) &gt; 1 And L_d(nr) &lt; 10 Then<br />      'krótki przycisk<br />      Select Case Nr<br />      Case 1 : Set Portd.0<br />      Case 2 : Set Portd.1<br />      Case 3 : Set Portd.2<br />      Case 4 : Set Portd.3<br />      Case 5 : Set Portd.4<br />      Case 6 : Set Portd.5<br />      Case 7 : Set Portd.6<br />      Case 8 : Set Porta.0<br />      End Select<br />   End If<br />   L_d(nr) = 0<br />End If<br />Incr Nr<br />If Nr &gt; 8 Then Nr = 1<br />'--------<br />Loop<br />End[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 9 lis 2014, o 16:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[slawek3000]]></name></author>
<updated>2014-11-09T12:54:21+01:00</updated>
<published>2014-11-09T12:54:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=103002#p103002</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=103002#p103002"/>
<title type="html"><![CDATA[Re: Przycisk wielofunkcyjny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=103002#p103002"><![CDATA[
Sylwek a można w prosty sposób uzyskać kilka klawiszy z tą samą zasadą działania , nie komplikując zbytnio kodu ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=988">slawek3000</a> — 9 lis 2014, o 12:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-11-01T19:27:08+01:00</updated>
<published>2014-11-01T19:27:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101848#p101848</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101848#p101848"/>
<title type="html"><![CDATA[Re: Przycisk wielofunkcyjny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101848#p101848"><![CDATA[
Myślę, że z analizą nie będziesz miał problemu, a po drobnych modyfikacjach można tu nieźle zaszaleć w obsłudze jednym klawiszem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />[syntax=basic4gl]$regfile &quot;m8def.dat&quot;<br />$crystal = 8000000<br />'--<br />Config Timer0 = Timer , Prescale = 1024<br />Const Przerwanie = 178        '8000000/1024/78= około 100Hz (10ms), 256-78=178 (wartość dla licznika)<br />Counter0 = Przerwanie<br />On Timer0 Prog<br />Enable Timer0<br /><br />Config Portb.0 = Input<br />Set Portb.0<br />Sel_p Alias Pinb.0            'przycisk P<br /><br />Dim Ti As Byte                'timer programowy<br />Dim L_d As Byte               'licznik przycisku<br />L_d = 0<br /><br /><br />Config Portb.1 = Output       'do testów<br />Led Alias Portb.1             '<br />Reset Led                     '<br /><br />'----------------------<br />Enable Interrupts<br />Do<br />'--------<br />If Sel_p = 0 Then             'klawisz wciśnięty to ...<br />   If Ti = 0 Then<br />      Ti = 3                  '30ms<br />      If L_d &lt; 255 Then Incr L_d<br />      If L_d = 25 Then        'czekaj około 0,7s (30ms x 25=750ms)<br />         'długi przycisk<br />         Reset Led<br />      End If<br />   End If<br />Else<br />   If L_d &gt; 1 And L_d &lt; 25 Then       'tu też sprawdź czy było mniej niż 0,7s i więcej niż 30ms<br />      'krótki przycisk<br />      Set Led<br />   End If<br />   L_d = 0<br />End If<br />'--------<br /><br /><br /><br />Loop<br />'--<br />End<br />'----------------------<br />'----------------------<br />Prog:<br />Counter0 = Counter0 + Przerwanie       'taki zapis jest dokładniejszy<br />If Ti &gt; 0 Then Decr Ti<br />Return<br />'----------------------[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 1 lis 2014, o 19:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[slawek3000]]></name></author>
<updated>2014-11-01T12:18:37+01:00</updated>
<published>2014-11-01T12:18:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101805#p101805</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101805#p101805"/>
<title type="html"><![CDATA[Re: Przycisk wielofunkcyjny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101805#p101805"><![CDATA[
Sylwku ja będzie mógł to kliknij te kilka linii kodu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /> .Dziękuje<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=988">slawek3000</a> — 1 lis 2014, o 12:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-11-01T10:14:53+01:00</updated>
<published>2014-11-01T10:14:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101794#p101794</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101794#p101794"/>
<title type="html"><![CDATA[Re: Przycisk wielofunkcyjny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101794#p101794"><![CDATA[
Czyli wystarczy Ci tylko rozpoznanie krótki/długi, a to można zrobić w kilku liniach bez wielkich kombinacji i oczywiście z aktywnym debounce i z wykorzystaniem dowolnego timera, w którego przerwaniu robi się tylko malutki timer programowy. Prezentowałem tu gdzieś już moje rozwiązanie. Jak nie znajdziesz to Ci później napiszę, bo teraz z tabletu jadę i muszę już kończyć...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 1 lis 2014, o 10:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[slawek3000]]></name></author>
<updated>2014-11-01T09:51:17+01:00</updated>
<published>2014-11-01T09:51:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101791#p101791</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101791#p101791"/>
<title type="html"><![CDATA[Re: Przycisk wielofunkcyjny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101791#p101791"><![CDATA[
ogólnie mam w programie Debounce , podprogramem zapisuje zmienną do eepromu procka zmienna ma index coś takiego<br /><br />[syntax=basic4gl]Memory:<br />'zapis do komórek pamięci-------------------------------------------------------<br />Readeeprom Idx , 254<br />   Incr Idx : Incr Bank_memory<br />   Writeeeprom Idx , 254<br />   Writeeeprom Bank_memory , 250<br />   Lngfreq_memory(idx + 1) = Lngfreq : Lngstep_memory(idx + 1) = Lngstep : Modulacja_memory(idx + 1) = Modulacja<br />   Vfo_memory(idx + 1) = Vfo<br />   Setfont My6_8 : Lcdat 1 , 50 , Idx<br />Return<br />'-------------------------------------------------------------------------------<br />Minus_memory:<br /><br />      If Idx &gt; 1 Then<br />        Idx = Idx - 1<br />         'Stan_idx = 1<br />       End If<br />    Lngfreq = Lngfreq_memory(idx) : Modulacja = Modulacja_memory(idx) : Lngstep = Lngstep_memory(idx) :<br />    Vfo = Vfo_memory(idx) :<br />     Gosub Freq_update : Gosub Wyswietlacz :<br />Return<br />Plus_memory:<br /><br />     If Idx &lt; Bank_memory Then<br />        Idx = Idx + 1<br />         'Stan_idx = 1<br />        End If<br />    Lngfreq = Lngfreq_memory(idx) : Modulacja = Modulacja_memory(idx) : Lngstep = Lngstep_memory(idx) :<br />     Vfo = Vfo_memory(idx) :<br />   Gosub Freq_update : Gosub Wyswietlacz<br />Return[/syntax]<br /><br />za pomocą tego Debounce chce nadpisać zmienną o określonym indeksie ale trzymając dłużej przycisk<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 9 minutach ]</span></strong><br /><br />Kolego JanuszuT a jak mam to zrobić konkretnie ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=988">slawek3000</a> — 1 lis 2014, o 09:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-11-01T09:42:03+01:00</updated>
<published>2014-11-01T09:42:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101790#p101790</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101790#p101790"/>
<title type="html"><![CDATA[Re: Przycisk wielofunkcyjny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101790#p101790"><![CDATA[
A dokładnie, o które funkcje przycisku Ci chodzi, bo może się to w prostszy sposób załatwi. Ten program wdaje mi się trochę przeładowany.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 1 lis 2014, o 09:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JanuszT]]></name></author>
<updated>2014-11-01T09:36:59+01:00</updated>
<published>2014-11-01T09:36:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101789#p101789</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101789#p101789"/>
<title type="html"><![CDATA[Re: Przycisk wielofunkcyjny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101789#p101789"><![CDATA[
Witam<br /><br />W pierwszym kodzie Timer &quot;taktuje&quot; 750ms, a w drugim 10ms. Dodaj zmienną, która będzie powodować to, co w pierwszym kodzie (czyli tylko ustawienie flagi) gdy osiągnie 75 i wtedy ją zeruj, a inkrementuj ją co 10ms (czyli w &quot;takcie&quot; Timera z drugiego kodu).<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4367">JanuszT</a> — 1 lis 2014, o 09:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[slawek3000]]></name></author>
<updated>2014-11-01T08:40:18+01:00</updated>
<published>2014-11-01T08:40:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101785#p101785</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101785#p101785"/>
<title type="html"><![CDATA[Przycisk wielofunkcyjny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9046&amp;p=101785#p101785"><![CDATA[
Witam,<br />znalazłem taki program do obsługi przycisku wielofunkcyjnego<br />[syntax=basic4gl]'*******************************************************************************<br />'SampleCode by Galahat @ Bascom-Forum.de<br />'----------------------------------------<br />' August, 2011<br />' ---------------------------------------<br />'Mehfachausnutzung eines Tasters<br />' Single-, Doubble-, TrippleKlick + Halten<br />'*******************************************************************************<br />$regfile = &quot;m644pdef.dat&quot;                                   ' specify the used micro<br />$crystal = 16000000<br />$baud = 19200                                               ' use baud rate<br />$hwstack = 128                                              ' default use 32 for the hardware stack<br />$swstack = 128                                              ' default use 10 for the SW stack<br />$framesize = 128                                            ' default use 40 for the frame space<br /><br />$lib &quot;glcdKS108.lbx&quot;<br />'First we define that we use a graphic LCD<br />Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portb , Ce = 1 , Ce2 = 0 , Cd = 4 , Rd = 3 , Reset = 2 , Enable = 5<br />'Timerinterval 10ms einrichten , CTC-Mode<br />Config Timer1 = Timer , Prescale = 8 , Clear Timer = 1<br />Compare1a = &amp;H4800<br />On Compare1a Tmr_isr<br />Enable Compare1a<br /><br />Taster Alias Pind.0<br />Config Taster = Input<br />Portd.0 = 1<br /><br />Enable Interrupts<br />'_______________________________________________________________________________<br />'-------------------------------------------------------------------------------<br /><br />Const True = 1 : Const False = 0<br /><br />Dim Counts_pressed As Byte , Counts_released As Byte , Clicks As Byte<br />Dim Key_state As Byte , Old_key_state As Byte , Key_event As Byte<br /><br />   Const Key_not_pressed = 0<br />    Const Key_long_pressed = 1<br />     Const Key_single_klick = 2<br />      Const Key_double_klick = 3<br />       Const Key_tripple_klick = 4<br /><br />Dim Tmr_event_1 As Byte<br />Cls<br />'_______________________________________________________________________________<br />'-------------------------------------------------------------------------------<br /><br />Do<br /><br />   If Tmr_event_1 = True Then<br />      Tmr_event_1 = False<br />      Gosub Key_manager<br />      If Key_event = True Then<br />            Select Case Key_state<br />               'Case Key_not_pressed : Print &quot;Key_not_pressed&quot;<br />               Case Key_long_pressed :<br />               Cls : Setfont My6_8 : Lcdat 1 , 26 , &quot;Key_long_pressed&quot;<br />               Case Key_single_klick :<br />               Cls : Setfont My6_8 : Lcdat 2 , 26 , &quot;Key_single_klick&quot;<br />               Case Key_double_klick :<br />               Cls : Setfont My6_8 : Lcdat 3 , 26 , &quot;Key_double_klick&quot;<br />               Case Key_tripple_klick :<br />               Cls : Setfont My6_8 : Lcdat 4 , 26 , &quot;Key_tripple_klick&quot;<br />            End Select<br />      End If<br />   End If<br /><br />Loop<br /><br />End<br />'_______________________________________________________________________________<br />'-------------------------------------------------------------------------------<br /><br /><br />Key_manager:<br /><br />    'Betätigungsprüfung<br />    If Taster = 0 Then<br />         If Counts_released &lt; 15 Then Incr Clicks           'Wiederholte Betätigung<br />         If Counts_pressed &lt; 100 Then Incr Counts_pressed   'Betätigungsdauer<br />         Counts_released = 20<br />    Else<br />         If Counts_released &lt;&gt; 0 Then Decr Counts_released  'Keine Betätigung mehr<br />         Counts_pressed = 0<br />    End If<br /><br /><br />    'Auswertung<br />    If Counts_pressed = 50 Then                             'langer Tastendruck<br />       Key_state = Key_long_pressed<br />       Clicks = 0<br />       Counts_pressed = 100<br />    End If<br /><br />    If Counts_released = 0 Then<br />       Select Case Clicks<br />            Case 0 : Key_state = Key_not_pressed<br />            Case 1 : Key_state = Key_single_klick<br />            Case 2 : Key_state = Key_double_klick<br />            Case 3 : Key_state = Key_tripple_klick<br />       End Select<br />       Clicks = 0<br />    End If<br /><br />    'Ergebnis<br />    If Old_key_state &lt;&gt; Key_state Then<br />       Old_key_state = Key_state<br />       Key_event = True<br />    Else<br />       Key_event = False<br />    End If<br /><br />Return<br /><br />'_______________________________________________________________________________<br />'-------------------------------------------------------------------------------<br /><br />Tmr_isr:<br />    Tmr_event_1 = True<br />Return<br /><br />$include &quot;my12_16.font&quot;<br />$include &quot;my6_8.font&quot;<br />$include &quot;font16x16.font&quot;[/syntax]<br /><br />ale wykorzystuje Timer1 , który już mam użyty w innym podprogramie czy nie można zamienić lub ustawić by współdziałały razem<br /><br />poniżej konfiguracja Timer1 w podprogramie <br /><br />[syntax=basic4gl]Const 750ms = 42098                                         ' @ 8Mhz<br />Config Timer1 = Timer , Prescale = 256<br />On Timer1 Timer1_int[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=988">slawek3000</a> — 1 lis 2014, o 08:40</p><hr />
]]></content>
</entry>
</feed>