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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-08-23T23:16:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8146&amp;mode</id>
<entry>
<author><name><![CDATA[QuadMan]]></name></author>
<updated>2014-08-23T23:16:01+01:00</updated>
<published>2014-08-23T23:16:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=92645#p92645</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=92645#p92645"/>
<title type="html"><![CDATA[Re: Obsługa microswitcha(czy wciśnięty 5 sekund)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=92645#p92645"><![CDATA[
Witam,<br /><br />za mało kodu umieściłeś, wygląda, że tu wszystko jest ok. Zmienna Timer3 jest oczywiście volatile ? <br /><br />Pozdrawiam, QuadMan.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5291">QuadMan</a> — 23 sie 2014, o 23:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mat3usz]]></name></author>
<updated>2014-08-23T16:27:52+01:00</updated>
<published>2014-08-23T16:27:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=92583#p92583</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=92583#p92583"/>
<title type="html"><![CDATA[Re: Obsługa microswitcha(czy wciśnięty 5 sekund)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=92583#p92583"><![CDATA[
Mam jeszcze małą zagwozdkę. <br />Chciałbym wykorzystać przerwania(z tego przerwania korzysta funkcja SuperDebounce, przerwanie następuje co 10ms) Timera do odliczania czasu.<br />[syntax=c]Timer3 = 2000;[/syntax]<br /><br />[syntax=c]ISR(TIMER2_COMPA_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 /> n = Timer3;// 100Hz Timer3 <br /> if (n) <br /> {<br />  Timer3 = --n; <br />  if(!n) LED_ON(); //gdy się wyzeruje.<br /><br /> }<br /> }[/syntax]<br />W programie po wciśnięciu przycisku ustawiam Timer3 na 2000(czyli 20 sekund), i po tych 20 sekundach powinna się zapalić dioda za pomocą funkcji LED_ON(), (docelowo będzie inna funkcja). Problem w tym że dioda zapalanie się od razu po wciśnięciu przycisku, a nie po odczekaniu 20 sekund.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2513">mat3usz</a> — 23 sie 2014, o 16:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2014-08-15T22:17:34+01:00</updated>
<published>2014-08-15T22:17:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91658#p91658</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91658#p91658"/>
<title type="html"><![CDATA[Re: Obsługa microswitcha(czy wciśnięty 5 sekund)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91658#p91658"><![CDATA[
Jest oczywiście wiele sposobów, ale można też zastosować tryb pomiaru szerokości impulsu timer'a.<br />Wszystko zależy od uC, ale ten w pełni sprzętowy sposób zwalnia zaangażowanie CPU w cały proces pomiaru.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 15 sie 2014, o 22:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mat3usz]]></name></author>
<updated>2014-08-15T21:07:46+01:00</updated>
<published>2014-08-15T21:07:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91650#p91650</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91650#p91650"/>
<title type="html"><![CDATA[Re: Obsługa microswitcha(czy wciśnięty 5 sekund)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91650#p91650"><![CDATA[
Dzięki wielkie, czegoś takiego szukałem, ale jeszcze do projektów na końcu książki nie dotarłem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2513">mat3usz</a> — 15 sie 2014, o 21:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-08-15T19:22:30+01:00</updated>
<published>2014-08-15T19:22:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91635#p91635</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91635#p91635"/>
<title type="html"><![CDATA[Re: Obsługa microswitcha(czy wciśnięty 5 sekund)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91635#p91635"><![CDATA[
<div class="quotetitle">mat3usz napisał(a):</div><div class="quotecontent"><br />Czy to dobry sposób?<br /></div><br /><br />Polecam zdecydowanie Bluebooka i poczytanie - podpatrzenie na przykład funkcji typu Superdebounce() ... warto<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 sie 2014, o 19:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kaka0204]]></name></author>
<updated>2014-08-15T18:24:09+01:00</updated>
<published>2014-08-15T18:24:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91624#p91624</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91624#p91624"/>
<title type="html"><![CDATA[Re: Obsługa microswitcha(czy wciśnięty 5 sekund)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91624#p91624"><![CDATA[
Ja bym to zrobił tak że gdy przycisk jest wciśnięty to wtedy zaczyna zliczać licznik. W chwili gdy zliczy do wartości cnt==500 to wykonujesz te instrukcje, jednakże jeżeli gdy zostanie puszczony zmienna cnt będzie zerowana. W tym momencie u Ciebie, gdy będziesz trzymał przycisk przez np 2 sek to po ponownym naciśnięciu będziesz czekał nie 5 sek a 3 sek.<br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=889">kaka0204</a> — 15 sie 2014, o 18:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mat3usz]]></name></author>
<updated>2014-08-15T17:23:04+01:00</updated>
<published>2014-08-15T17:23:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91614#p91614</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91614#p91614"/>
<title type="html"><![CDATA[Obsługa microswitcha(czy wciśnięty 5 sekund)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8146&amp;p=91614#p91614"><![CDATA[
Witam,<br />W jednym projekcie, chcę wykonać pewną akcję gdy klawisz jest wciśnięty 5 sekund. Nie mogę wykorzystać  opóźnienia delay w pętli while. Próbuję to zrobić za pomocą przepełnienia Timera, w przerwaniu. Coś takiego mi wyszło i nawet działa, ale chciałbym sie poradzić bardziej doświadczonych ode mnie.<br />[syntax=c]//Ustawienia Timera<br />TCCR1A |= (1&lt;&lt;WGM11);<br />TCCR1B |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10);<br />OCR1A = 350;<br />TIMSK1 |= (1&lt;&lt;OCIE1A);<br />//Przerwanie<br />ISR(TIMER1_COMPA_vect)<br />{<br />static uint8_t cnt = 0;<br />if(++cnt&gt;100)<br />{<br />if(press_button())<br />{<br />sec++;<br />if(sec&gt;5)<br />{<br />ALARM_LED_ON();<br />INT_OFF();<br />s2_flag = 0;<br />flag = 0;<br />}<br />}<br />cnt = 0;<br />}<br />}[/syntax]<br />Przerwanie wykonuje się co 10ms, co 1000 ms, sprawdzamy czy wciśnięty jest klawisz i zwiększamy zmienną sec, jeśli jest większa od  5 , to wywołujemy funkcje.<br />Czy to dobry sposób?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2513">mat3usz</a> — 15 sie 2014, o 17:23</p><hr />
]]></content>
</entry>
</feed>