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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-05-25T17:28:00+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=20774&amp;mode</id>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2018-05-25T17:28:00+01:00</updated>
<published>2018-05-25T17:28:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208239#p208239</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208239#p208239"/>
<title type="html"><![CDATA[Re: eliminacja drgań styków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208239#p208239"><![CDATA[
estetyka to chyba dość indywidualne podejście , zaś inną sprawą że jest tle rozwiązań ilu programistów <br />widzisz np ja nigdy się nie przejmowałem bounce czy debouce  czy belonce <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  bo uważam że pisanie w tym celu <br />softu to strata zasobów i niepotrzebne kombinacje na rozwiązanie czegoś co wszyscy udawadniają że istnieje , <br />ja problem rozwiązuję sprzętowo i zawsze jest ok:) <br /><br /><!-- m --><a class="postlink" href="https://www.sunduino.pl/albo-bounce-albo-debounce/" >https://www.sunduino.pl/albo-bounce-albo-debounce/</a><!-- m -->  tak ...<br /><br />ale to moje podejście zaś tu wykazałeś się myśleniem i szukaniem rozwiązania co na pewno cię czegoś nauczyło <br />choć np z mojego punktu widzenia bez urazy oczywiście zmarnowałeś sporo czasu i powietrza na coś co można rozwiązać prościej <br />i szybciej <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> — 25 maja 2018, o 17:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mateusz19955]]></name></author>
<updated>2018-05-24T14:04:34+01:00</updated>
<published>2018-05-24T14:04:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208201#p208201</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208201#p208201"/>
<title type="html"><![CDATA[Re: eliminacja drgań styków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208201#p208201"><![CDATA[
Dobra, pokombinowałem trochę i wyszło mi coś takiego:'<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;lcd44780.h&quot;<br /><br />#define Timer_ONTCCR1B |= (1&lt;&lt;CS12) | (1&lt;&lt;CS10);<br />#define Timer_OFFTCCR1B &amp;= ~((1&lt;&lt;CS12) | (1&lt;&lt;CS10));<br /><br />#define Klawisz_1!(PIND &amp; (1&lt;&lt;PD2))<br />#define Klawisz_2!(PIND &amp; (1&lt;&lt;PD1))<br />#define Klawisz_3!(PIND &amp; (1&lt;&lt;PD0))<br /><br />volatile uint8_t flaga_200ms = 0;<br />uint8_t zmienna, zmienna1, zmienna2;<br /><br />int main(void) {<br />DDRB = 0xFF;<br />DDRD = 0x00;<br /><br />PORTB = 0xFF;<br />PORTD = 0xFF;<br /><br />TCCR1B |= (1&lt;&lt;WGM12);<br />TCCR1B |= (1&lt;&lt;CS12) | (1&lt;&lt;CS10);<br />OCR1A = 2600;//przerwanie co 300ms<br />TIMSK |= (1&lt;&lt;OCIE1A);<br /><br />sei();<br /><br />lcd_init();<br />lcd_cls();<br /><br /><br />while (1) {<br /> if ( Klawisz_1 ) {<br />Timer_ON;//załącz timer<br />if ( flaga_200ms == 1 ) {<br />flaga_200ms = 0;<br />zmienna++;<br />lcd_locate(0,0);<br />lcd_int(zmienna);<br />//PORTB ^= (1&lt;&lt;PB2);<br />}<br />}<br /><br />if ( Klawisz_2 ) {<br />Timer_ON;//załącz timer<br />if ( flaga_200ms == 1 ) {<br />flaga_200ms = 0;<br />zmienna1++;<br />lcd_locate(5,0);<br />lcd_int(zmienna1);<br />//PORTB ^= (1&lt;&lt;PB1);<br />}<br />}<br /><br />if ( Klawisz_3 ) {<br />Timer_ON;//załącz timer<br />if ( flaga_200ms == 1 ) {<br />flaga_200ms = 0;<br />zmienna2++;<br />lcd_locate(9,0);<br />lcd_int(zmienna2);<br />//PORTB ^= (1&lt;&lt;PB0);<br />}<br />}<br /><br />PORTB ^= (1&lt;&lt;PB3);<br /><br />}<br />}<br /><br />ISR (TIMER1_COMPA_vect) {<br />Timer_OFF;//wyłącz timer<br />flaga_200ms = 1;<br />}[/syntax]<br /><br />Program działa bez żadnych problemów.<br />Mam tylko pytanie, czy w ten sposób można pisać programy?<br />Czy to jest dobrze napisane? Chodzi mi o to wyłączanie i włączanie timera.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3621">mateusz19955</a> — 24 maja 2018, o 14:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Alef2]]></name></author>
<updated>2018-05-23T11:29:30+01:00</updated>
<published>2018-05-23T11:29:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208147#p208147</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208147#p208147"/>
<title type="html"><![CDATA[Re: eliminacja drgań styków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208147#p208147"><![CDATA[
Pomysł dobry, ale realizacja już nie koniecznie.<br />Zauważ, ze zmienna licznik jest zwiększana za każdym wywołaniem przerwania. Oznacza to, że stan: przyciśnięty przycisk i licznik równy 2, będzie nieprawdopodobne. Zerowanie tego licznika też będzie dziełem przypadku.<br />Licznik powinien zacząć liczyć od momentu przyciśnięcia przycisku.<br />Zmienna &quot;sprawdzana w programie&quot; powinna być modyfikowana natychmiast po przyciśnięciu przycisku, a nie po 200ms.<br />I kod funkcji klawisze jest na tyle krótki, ze przynajmniej ja nie tworzyłbym funkcji, a kod umieściłbym w obsłudze przerwania<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14998">Alef2</a> — 23 maja 2018, o 11:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sredni]]></name></author>
<updated>2018-05-23T10:09:50+01:00</updated>
<published>2018-05-23T10:09:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208145#p208145</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208145#p208145"/>
<title type="html"><![CDATA[Re: eliminacja drgań styków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208145#p208145"><![CDATA[
Zerknij na to <br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.co.uk/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html?m=1" >http://mirekk36.blogspot.co.uk/2012/10/ ... 2.html?m=1</a><!-- m --><br />Najlepiej przeczytaj od początku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3346">sredni</a> — 23 maja 2018, o 10:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mateusz19955]]></name></author>
<updated>2018-05-23T09:07:16+01:00</updated>
<published>2018-05-23T09:07:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208142#p208142</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208142#p208142"/>
<title type="html"><![CDATA[eliminacja drgań styków]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20774&amp;p=208142#p208142"><![CDATA[
Witam, mam problem z eliminacją drgań styków w switch.<br />Próbuję to wykonać za pomącą przerwań, i nawet napisałem jakiś program.<br />Tylko nie wiem czy to będzie tak działało jak bym chciał.<br />Czas trwania eliminacji drgań ma wynosić 200ms.<br /><br />[syntax=c]void init_timer(void) {<br />TCCR1B |= (1&lt;&lt;WGM12);<br />TCCR1B |= (1&lt;&lt;CS12) | (1&lt;&lt;CS10);<br />OCR1A = 781;//przepełnienie co 100ms<br />TIMSK |= (1&lt;&lt;OCIE1A);<br />}<br /><br />void klawisze(void) {<br />static uint8_t licznik;<br />licznik++;<br /><br />if ( S_PLUS ) {    //klawisz który mam zdefiniowany na początku programu<br />if ( licznik == 2 ) {<br />licznik = 0;<br />//tu ustawiam jakąś zmienną ktrórą potem sprawdzam w programie i ją zeruje<br />}<br />}<br />}<br /><br />ISR (TIMER1_COMPA_vect) {<br />klawisze();<br />}[/syntax] <br /><br />Ten program na pewno będzie odczekiwał jakiś czas po wciśnięciu klawisza S_PLUS, tylko wydaję mi się że nie zawsze 200ms.<br />Jeżeli nacisnę przycisk w momencie gdy zmienna licznik już ma wartość 1 to opóźnienie może trwać 100ms albo nawet krócej bo np. za 20ms nastąpi przerwanie i ustawi mi licznik na wartość 2.<br /><br />Czy moje przemyślenia są prawidłowe?<br />Jeżeli tak to w jaki sposób mogę pozbyć się tych drgań przy użyciu przerwań?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3621">mateusz19955</a> — 23 maja 2018, o 09:07</p><hr />
]]></content>
</entry>
</feed>