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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-02-28T22:02:38+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=17757&amp;mode</id>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2017-02-28T22:02:38+01:00</updated>
<published>2017-02-28T22:02:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17757&amp;p=183803#p183803</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17757&amp;p=183803#p183803"/>
<title type="html"><![CDATA[Auto repeat w klawiszu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17757&amp;p=183803#p183803"><![CDATA[
Witam<br />Oglądałem ostatnio poradniki odnośnie ADC i klawiatury matrycowej. Zaciekawiła mnie funkcja &quot;auto repeat&quot; w klawiszu <br />Popełniłem taki tam sobie kod z licznymi błędami bo wyświetlam w pętli i na dodatek czyszczę w pewnym momencie LCD ale to tylko próby<br />[syntax=c]#include &lt;avr/io.h&gt;<br />    #include &lt;avr/interrupt.h&gt;<br /><br />    #include &quot;lcd44780.h&quot;<br /><br /><br /><br />#define LED2_ON         PORTD|=(1&lt;&lt;PD7)<br />#define LED2_OFF        PORTD &amp;=~(1&lt;&lt;PD7)<br />#define LED2_TOG        PORTD ^=(1&lt;&lt;PD7)<br />#define LED1_ON         PORTD|=(1&lt;&lt;PD6)<br />#define LED1_OFF        PORTD &amp;=~(1&lt;&lt;PD6)<br />#define LED1_TOG        PORTD ^=(1&lt;&lt;PD6)<br />#define LED3_ON         PORTD|=(1&lt;&lt;PD5)<br />#define LED3_OFF        PORTD &amp;=~(1&lt;&lt;PD5)<br />#define LED3_TOG        PORTD ^=(1&lt;&lt;PD5)<br />#define LCD_ON         PORTC |=(1&lt;&lt;PC7)<br />#define LCD_OFF        PORTC &amp;=~(1&lt;&lt;PC7)<br />#define LCD_TOG        PORTC ^=(1&lt;&lt;PC7)<br /><br />#define START          PINB&amp;(1&lt;&lt;PB4)<br /><br /><br />    volatile uint8_t Timer1, Timer2;       /* timery programowe 100Hz */<br />    volatile uint8_t a, b, counter;<br /><br /><br />    void Timer2_ON(void);<br /><br /><br />    int main(void) {<br /><br /><br />    DDRC |=(1&lt;&lt;PC7);<br /><br />    DDRD |=(1&lt;&lt;PD5);<br />    DDRD |=(1&lt;&lt;PD6);<br />    DDRD |=(1&lt;&lt;PD7);<br /><br />    Timer2_ON();<br />    LCD_ON;<br />    lcd_init();<br />    lcd_cls();<br /><br /><br /><br />            sei();<br /><br />            while(1) {<br /><br />            if(!Timer2){<br />            Timer2=100;<br />            LED2_ON;<br />            }<br />            else if(Timer2==50)LED2_OFF;<br /><br />            lcd_locate(1,12);<br />            lcd_int(b);<br />            lcd_locate(1,2);<br />                            lcd_str(&quot;LICZNIK = &quot;);<br />                                    if(b==0)lcd_cls();<br /><br />               lcd_locate(0,2);<br />               lcd_int(counter);<br /><br />      if(START){<br />      if(!Timer1){<br />      Timer1=50;<br />      counter++;<br />      }<br />      }<br />                    }<br /><br /><br /><br />            }<br /><br /><br /><br /><br />    ISR(TIMER2_COMP_vect)<br />    {<br />            uint8_t n;<br /><br />            n = Timer1;             /* 100Hz Timer1 */<br />            if (n) Timer1 = --n;<br /><br />            n = Timer2;             /* 100Hz Timer1 */<br />            if (n) Timer2 = --n;<br /><br />            a++;<br />            if(a&gt;100){<br />             a=0;<br />             b++;<br />             }<br />    }<br /><br />   void Timer2_ON(void){<br />               TCCR2   |= (1&lt;&lt;WGM21);<br />               TCCR2   |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);<br />               OCR2    = 156;<br />               TIMSK   = (1&lt;&lt;OCIE2);<br />   }[/syntax]<br /><br />w sumie to chciałem zapytać o ten fragment czy koncepcja jest słuszna?<br />Działa mi to tak jak zakładałem czyli krótkie naciśnięcie klawisza zwiększa &quot;counter&quot; o <strong>1</strong> natomiast przytrzymanie klawisza powoduje zwiększenie zmiennej co 0,5sek.<br />[syntax=c]if(START){<br />      if(!Timer1){<br />      Timer1=50;<br />      counter++;<br />      }<br />      }[/syntax]<br />Pytam dlatego, że czasem coś robiłem i w sumie działało ale później okazywało się, że to zupełnie nie trafione rozwiązanie.<br /><br />pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 28 lut 2017, o 22:02</p><hr />
]]></content>
</entry>
</feed>