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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-04-21T21:50:10+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9607&amp;mode</id>
<entry>
<author><name><![CDATA[amilo_pa]]></name></author>
<updated>2015-04-21T21:50:10+01:00</updated>
<published>2015-04-21T21:50:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9607&amp;p=127117#p127117</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9607&amp;p=127117#p127117"/>
<title type="html"><![CDATA[Re: modyfikacja - &quot;Obsługa klawiszy - zwłoka czasowa CD...3&quot;]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9607&amp;p=127117#p127117"><![CDATA[
Witam. <br />Rozdzieliłm kod z poradnika <a href="http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-zwoka-czasowa-cd3.html"  class="postlink">http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-zwoka-czasowa-cd3.html</a> na trzy pliki: <br />- main.c<br />- klawisz.c <br />- klawisz.h.<br />Dodatkowo udało mi się zaimplemontować możliwość obsługi drugiego klawisza. Wiem, że to nie jest wielki wyczyn, ale troche się z tym borykałem a i może się to kiedyś komuś przydać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Jeżeli są jakieś błędy to prosze o korekte <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Plik main.c<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 />#include &quot;klawisz.h&quot;<br /><br />#define LED1 (1&lt;&lt;PD4)<br />#define LED2 (1&lt;&lt;PD5)<br />#define LED3 (1&lt;&lt;PD6)<br />#define LED4 (1&lt;&lt;PD7)<br />#define KEY1 (1&lt;&lt;PC7)<br />#define KEY2 (1&lt;&lt;PC6)<br /><br />void button_init1(TBUTTON *butt);   //deklaracja funkcji klawisza 1<br />void button_init2(TBUTTON *butt);   //deklaracja funkcji klawisza 2<br />// własne funkcje użytkownika<br />void change_led1(void);//deklaracja funkcji zmiany stanu diody LED1<br />void change_led2(void);//deklaracja funkcji zmiany stanu diody LED2<br />void change_led3 (void);//deklaracja funkcji zmiany stanu diody LED3<br /><br />//------------------------------------------------------------------<br />int main(void)<br />{<br />// ****** definicja funkcji inicjalizującej pracę z klawiszy i diod LED_<br /><br />PORTC |= KEY1|KEY2; // podciągamy linie klawiszy do VCC<br />DDRD |= LED1|LED2|LED3|LED4; // piny LED jako WYjścia<br /><br />        TBUTTON button1, button2;                 //definicja KLAWISZA 1<br /><br />        button_init1(&amp;button1);          //wywołanie funkcji obsługującej klawisz<br />        button_init2(&amp;button2);          //wywołanie funkcji obsługującej klawisz<br /><br />        d_timer2_init (); //zezwolenie na działanie Timera2<br /><br />        sei();<br />        _delay_ms(10);<br />        while(1)<br />        {<br />        key_press( &amp;button1 );<br />        key_press( &amp;button2 );<br />        <br />        // przykładowy niezależny i nieblokujący proces<br />        if( !Timer2 )<br />        {<br />        Timer2=50;<br />        PORTD ^= LED4;<br />        }<br />        }<br />}<br /><br />void button_init1 (TBUTTON *butt)<br />{<br />butt-&gt;KPIN = &amp;PINC;<br />    butt-&gt;key_mask = KEY1;<br />    butt-&gt;wait_time_s = 2;<br />    butt-&gt;kfun1 = change_led1;<br />    //butt-&gt;kfun2 = change_led2;<br />}<br /><br />void button_init2 (TBUTTON *butt)<br />{<br />butt-&gt;KPIN = &amp;PINC;<br />    butt-&gt;key_mask = KEY2;<br />    butt-&gt;wait_time_s = 2;<br />    butt-&gt;kfun1 = change_led2;<br />    butt-&gt;kfun2 = change_led3;<br />}<br /><br />// własne funkcje użytkownika<br />void change_led1(void){<br />PORTD ^= LED1;<br />}<br />void change_led2(void){<br />PORTD ^= LED2;<br />}<br /><br />void change_led3 (void){<br />PORTD^=LED3;<br />}[/syntax]<br /><br />Plik klawisz.h<br />[syntax=c]#ifndef KLAWISZ_H_<br />#define KLAWISZ_H_<br /><br />typedef struct {<br />volatile uint8_t *KPIN;<br />uint8_t key_mask;<br />uint8_t wait_time_s;<br />void (*kfun1)(void);<br />void (*kfun2)(void);<br />uint8_t klock;<br />uint8_t flag;<br />} TBUTTON;<br /><br />// timery programowe<br />volatile uint16_t Timer1, Timer2;<br /><br />// deklaracja funkcji obsługi pojedynczych klawiszy<br />void key_press( TBUTTON * btn );<br /><br />//deklaracja funkcji inicjalizującej pracę Timera2<br />void d_timer2_init (void);<br /><br /><br />#endif /* KLAWISZ_H_ */[/syntax]<br /><br />Plik klawisz.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;klawisz.h&quot;<br /><br />//------------------------------------------------------------------------<br />// ****** definicja funkcji inicjalizującej pracę Timera2<br />void d_timer2_init (void) {<br /><br />/* Timer2 – konfigurcajca silnika timerów programowych */<br />TCCR2|= (1&lt;&lt;WGM21);// tryb pracy CTC<br />TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(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 /><br />//------------------------------------------------------------<br />//definicja funkcji key_pres - obsługa wciniętego klawisza<br />void key_press( TBUTTON * btn ) {<br /><br />register uint8_t key_press = (*btn-&gt;KPIN &amp; btn-&gt;key_mask);//wykonanie maski na danym klawiszy - sprawdzenie czy został wcinięty<br /><br />if( !btn-&gt;klock &amp;&amp; !key_press ) {//jeżeli klawisz wcinięty (key_press=0) oraz ustały drgania styków (klock=0) to wykonaj:<br />btn-&gt;klock=1;//zainicjalizuj zmienną klock wartocią 1<br /><br />// reakcja na PRESS krótkie wcinięcie klawisza<br />if(btn-&gt;kfun1) btn-&gt;kfun1();//sprawdź czy pierwsza funkcja nie jest pusta, jeli nie jest to ją wykonaj<br />btn-&gt;flag=1;//ustaw flage<br />Timer1 = (btn-&gt;wait_time_s*1000)/10;//zainicjalizuj Timer1 wartocią zapisaną w wait_time_s<br /><br />}<br />else if( btn-&gt;klock &amp;&amp; key_press ) {//dalsze trzymanie klawisza (key_press=1) oraz klock=1 spowoduje zwiększanie sie klock<br />(btn-&gt;klock)++;//do wartosci 255 po czym zmieni się na 0 - ma to wyeliminować ewentualne drganie styków<br />if( !btn-&gt;klock ) {//po wyzerowaniu zmiennej klock (przekręceniu się z 255 na 0) wyzeruj Timer1 i flage<br />Timer1=0;<br />btn-&gt;flag=0;<br />}<br />}<br />else if( btn-&gt;flag &amp;&amp; !Timer1 ) {//długotrwałe wcinięcie klawisza spowoduje wykonanie kfun2<br />// reakcja na dłuższe wcinięcie klawisza<br />if(btn-&gt;kfun2) btn-&gt;kfun2();//sprawdza czy kfun2 nie jest pusta, jeli nie jest to ją wykona<br />btn-&gt;flag=0;//zerowanie flagi<br />}<br />}<br /><br />//------------------------------------------------------------------------<br /><br />//*** przerwanie Timer2 CompareM<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 />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3824">amilo_pa</a> — 21 kwi 2015, o 21:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-12-12T19:36:28+01:00</updated>
<published>2014-12-12T19:36:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9607&amp;p=108417#p108417</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9607&amp;p=108417#p108417"/>
<title type="html"><![CDATA[Re: modyfikacja - &quot;Obsługa klawiszy - zwłoka czasowa CD...3&quot;]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9607&amp;p=108417#p108417"><![CDATA[
W odniesieniu do:<br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-zwoka-czasowa-cd3.html" >http://mirekk36.blogspot.com/2012/10/ob ... a-cd3.html</a><!-- m --><br />1. Dodajesz kolejne LEDy i przycisk<br />2. Nic nie zmieniasz<br />3. Nic nie zmieniasz<br />4. Dodajesz kolejne funkcje<br />5. Nic nie zmieniasz<br />6. Dodajesz kolejną zmienną TBUTTON i teraz masz 2:<br />[syntax=c]TBUTTON button, nowy_przycisk;[/syntax]<br />7. Konfigurujesz dodane LEDy i przycisk zgodnie z punktem 1<br />8. Nic nie zmieniasz<br />9. Przypisujesz wartości dla poszczególnych pól dla drugiego przycisku:<br />[syntax=c]nowy_przycisk.KPIN = &amp;PINC;<br />nowy_przycisk.key_mask = KEY2;<br />nowy_przycisk.wait_time_s = 3;<br />nowy_przycisk.kfun1 = change_led3;<br />nowy_przycisk.kfun2 = change_led4;[/syntax]<br />10. Umieszczasz dodatkowe wywołanie:<br />[syntax=c]key_press(&amp;nowy_przycisk);[/syntax]<br />11, 12, 13. Nic nie zmieniasz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 12 gru 2014, o 19:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[art-i]]></name></author>
<updated>2014-12-09T19:55:28+01:00</updated>
<published>2014-12-09T19:55:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9607&amp;p=107972#p107972</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9607&amp;p=107972#p107972"/>
<title type="html"><![CDATA[modyfikacja - &quot;Obsługa klawiszy - zwłoka czasowa CD...3&quot;]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9607&amp;p=107972#p107972"><![CDATA[
Witam wszystkich, jestem początkujący i dopiero zaczynam moją przygodę z micro-kontrolerami i językiem C.<br /><br />Zainteresował mnie artykuł z kącika porad na blogu Mirka, &quot;Obsługa klawiszy - zwłoka czasowa CD...3&quot; i chciał bym do kodu umieszczonego w tym artykule dodać jeszcze jeden przycisk do obsługi dwóch kolejnych LED-ów jednak nie wiem jak się za to zabrać. <br /><br />Jak zaznaczyłem wyżej dopiero zaczynam i w zasadzie testuje różne kody i próbuje je modyfikować z Bluebook-iem w ręku.<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1739">art-i</a> — 9 gru 2014, o 19:55</p><hr />
]]></content>
</entry>
</feed>