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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-09-29T16:32:10+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=1607&amp;mode</id>
<entry>
<author><name><![CDATA[Stanley]]></name></author>
<updated>2012-09-29T16:32:10+01:00</updated>
<published>2012-09-29T16:32:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16203#p16203</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16203#p16203"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16203#p16203"><![CDATA[
Dokładnie to było przyczyną! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Teraz działa elegancko! Dziękuję.<br />Chyba już ostatnie pytanie w tym temacie...<br />Chcę żeby dioda mi się zapaliła gdy trzymam wciśnięty przycisk, a nie dopiero gdy puszczę. Jak tutaj skonstruować warunek? Wrzucałem if'a tam gdzie jest sprawdzane, czy stan pinu jest wyzerowany (zwarcie do masy, ale nie chce to działać jak zwykle).<br /><br />[syntax=c]if( !(PINB &amp; KEY2))<br />{<br />_delay_ms(2);<br />if( !(PINB &amp; KEY2) &amp;&amp; !(TCCR1B &amp; ((1&lt;&lt;CS10)|(1&lt;&lt;CS12))))<br />{<br />    TCNT1=0;<br />TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;CS12); //TIMER1 ON - PRESKALER 1024<br />if( TCNT1&gt;7000) <br />{ <br />OCR2=0;<br />}<br />} [/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=305">Stanley</a> — 29 wrz 2012, o 16:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-29T16:14:35+01:00</updated>
<published>2012-09-29T16:14:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16200#p16200</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16200#p16200"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16200#p16200"><![CDATA[
O ile w 90% przypadków debouncing to tylko bajka dla niegrzecznych dzieci - to jednak w tym przypadku - gdy w szalejącej pętli while(1) .... odpalany jest timer z taką szybkością <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> to akurat rzeczywiście debouncing może odgrywać ogromną rolę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 wrz 2012, o 16:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Stanley]]></name></author>
<updated>2012-09-29T16:04:40+01:00</updated>
<published>2012-09-29T16:04:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16197#p16197</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16197#p16197"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16197#p16197"><![CDATA[
[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /> <br /> <br />#define LED (1&lt;&lt;PB3)<br />#define KEY2 (1&lt;&lt;PB0)<br />#define KEY1 (1&lt;&lt;PB1)<br /> <br />int main(void)<br />{<br /> <br />TCCR2 |= (1&lt;&lt;WGM21)|(1&lt;&lt;WGM20)|(1&lt;&lt;CS20)|(1&lt;&lt;COM21); //fast pwm, prescaler=1, set at bottom<br /><br />DDRB |= LED;<br />PORTB |= KEY1|KEY2;<br />DDRB &amp;= ~(KEY1|KEY2);<br />OCR2=255; //LED OFF<br />  <br />while(1)<br />{<br /><br />if( !(PINB &amp; KEY2) &amp;&amp; !(TCCR1B &amp; ((1&lt;&lt;CS10)|(1&lt;&lt;CS12))))<br />{<br />    TCNT1=0;<br />TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;CS12); //TIMER1 ON - PRESKALER 1024<br />} <br /><br />else if( (PINB &amp; KEY2) &amp;&amp; (TCCR1B &amp; ((1&lt;&lt;CS10)|(1&lt;&lt;CS12))))<br />{<br />if( TCNT1&gt;7000) <br />{ <br />OCR2=0;<br />}<br />else<br />{ <br />OCR2=255;<br />}<br />TCCR1B &amp;= ~((1&lt;&lt;CS10)|(1&lt;&lt;CS12)); //TIMER OFF<br />}<br /><br /> <br /><br />}<br />}<br />[/syntax]<br /><br />Dzięki wielkie za dotychczasową pomoc. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Działa to niestabilnie i niedokładnie. Niestabilnie bo raz działa, raz nie. Niedokładnie, bo czas przycisku wciśniętego jest źle liczony. 7000 impulsów to jest 0.9 sekundy, a czasem na zwarcie 2 sekundowe nie ma reakcji, czasem na 3 sekundowe zwarcie dioda tylko mignie. <br />I nie rozumiem drugiego stanu, gdy TCNT1&lt;7000. Zgodnie z warunkiem dioda powinna zgasnąć dopiero po puszczeniu przycisku, a gaśnie przy wciśniętym.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=305">Stanley</a> — 29 wrz 2012, o 16:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Stanley]]></name></author>
<updated>2012-09-29T12:44:10+01:00</updated>
<published>2012-09-29T12:44:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16179#p16179</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16179#p16179"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16179#p16179"><![CDATA[
Ten warunek będzie spełniony jeżeli Timer1 będzie w trybie Normal, ja miałem tryb CTC i wtedy mamy dodatkowy bit, i wtedy iloczyn nie byłby spełniony.<br />Ale nie działa ten kod.. :/ <br />Sam spróbuj: <br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /> <br /> <br />#define LED (1&lt;&lt;PB3)<br />#define KEY2 (1&lt;&lt;PB0)<br />#define KEY1 (1&lt;&lt;PB1)<br /> <br />int main(void)<br />{<br /> <br />TCCR2 |= (1&lt;&lt;WGM21)|(1&lt;&lt;WGM20)|(1&lt;&lt;CS20)|(1&lt;&lt;COM21); //fast pwm, prescaler=1, set at bottom<br /><br />DDRB |= LED;<br />PORTB |= KEY1|KEY2;<br />DDRB &amp;= ~(KEY1|KEY2);<br />OCR2=255; //LED OFF<br />  <br />        while(1)<br />        {<br />if( !(PINB &amp; KEY2) ) {<br />    TCNT1 = 0; // wyzerowanie timera 1<br />    TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;CS12); //TIMER1 ON - PRESKALER 1024<br />} else if ( TCCR1B &amp; ((1&lt;&lt;CS10)|(1&lt;&lt;CS12)) ) { // sprawdzamy, czy timer tyka...<br />    TCCR1B &amp;= ~( (1&lt;&lt;CS10)|(1&lt;&lt;CS11)|(1&lt;&lt;CS12) ); //TIMER1 OFF<br />    if( TCNT1&lt;15625 ) { OCR2=0;<br />        // akcja dla krótkiego przytrzymania<br />    } else {OCR2=255;<br />        // akcja dla długiego przytrzymania<br />    }<br />}<br />                               <br /> <br /> <br />                       <br /> <br />        }<br /> <br /> <br />}<br /> <br /> [/syntax]<br /><br />Działa tylko jedna opcja, jak u mnie działało na długie przyciśnięcie, tak tutaj działa na krótkie przyciśnięcie. <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Już mi głowa dymi bo co wymyślę to źle, źle i źle. <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Myślałem żeby nawet po prostu licznik był ciągle włączony ale zerować go podczas wciśnięcia klawisza i sprawdzać ile impulsów już zostało zliczone:<br /><br />[syntax=c]<br />if( !(PINB &amp; KEY2) ) {<br />    TCNT1 = 0; // wyzerowanie timera 1<br />    TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;CS12); //TIMER1 ON - PRESKALER 1024<br />    if(TCNT1&gt;15000) OCR2=0; //zwarcie&gt;2s<br />    if(TCNT1&lt;15000) OCR2=255; //zwarcie&lt;2s<br />}<br /><br />[/syntax]<br /><br />Ale też źle i nie wiem dlaczego to nie działa, mnie się wydaje, że to na moją logikę powinno działać.. Nie umiem myśleć w sposób działający dla procesora.. :/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=305">Stanley</a> — 29 wrz 2012, o 12:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-29T12:09:45+01:00</updated>
<published>2012-09-29T12:09:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16174#p16174</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16174#p16174"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16174#p16174"><![CDATA[
Może i ty masz rację - każdy ma inne podejście do tego jak komuś można pomóc.<br /><br />Ja się nie wzbraniam przed pomocą i bardzo dobrze zdaję sobie sprawę że kolega totalnie początkuje, dlatego piszę o błędach w warunkach. <br /><br />Zatem jeszcze raz powiem - owszem potrenować warunki IF można - ale nadal ja będę się upierał że takie zastosowanie timera nawet 8-bitowego to zbrodnia <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... (ale to jest oczywiście moje zdanie i nikomu go nie narzucam .... każdy zrobi jak zechce ... ja tylko podpowiadam że tak się nie powinno robić)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 wrz 2012, o 12:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-29T10:34:14+01:00</updated>
<published>2012-09-29T10:34:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16169#p16169</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16169#p16169"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16169#p16169"><![CDATA[
Gwyn, czasem lepiej kogoś odwieść od złego pomysłu, niż próbować iść tokiem złego rozumowania - bo zabrniesz w kozi róg .... zresztą sam widzisz. Toż tym sposobem żeby obsłużyć 4 klawisze to musiałbym wziąć ATmega128 która ma 4 timery sprzętowe a gdybym zechciał 7-8 klawiszy ??? to co? musiałbym chyba sięgnąć po jakiś ARM, który ma z 15 timerów prawda ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 wrz 2012, o 10:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Stanley]]></name></author>
<updated>2012-09-29T10:27:20+01:00</updated>
<published>2012-09-29T10:27:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16168#p16168</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16168#p16168"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16168#p16168"><![CDATA[
Ja zrobię to na 8-bitowym timerze, tylko chciałem w końcu to uruchomić według tej koncepcji. <br />Gwyn, coś nie działa ten kod. Przeanalizowałem go:<br />[syntax=c]else if ( TCCR1B &amp; ((1&lt;&lt;CS10)|(1&lt;&lt;CS12)) )[/syntax] <br />ten warunek jest fałszywy, spójrz jeszcze na bit od CTC.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=305">Stanley</a> — 29 wrz 2012, o 10:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-29T10:12:37+01:00</updated>
<published>2012-09-29T10:12:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16165#p16165</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16165#p16165"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16165#p16165"><![CDATA[
Posłuchaj - najwększą hmm wręcz gigantyczną wadą tego rozwiązania (tak dużą jak wieża Eiflfa) .... to fakt że używasz hmmm tracisz / marnujesz 16-bitowy timer sprzętowy na 1 , podkreślam jeden malutki klawisz (tzn sam pomysł już jest nietrafiony i to tragicznie) <br /><br />toż gdybyś sobie poczytał o podstawach timerów programowych to już dawno dawno byś swój cel osiągnął nie marnując timer1 a wykorzystując jakiś timer 8-bitowy jako podstawę czasu do kilku timerów programowych. <br /><br />wracając jednak do twojej analizy to pomyśl sobie nad tym jak działają warunki IF bo widzę że nie ogarniasz tego niestety <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />toż gdy w pierwszym warunku wyłączysz timer zerując bity preskalera, to on się zakończy i zacznie się sprawdzanie kolejnego warunku  a ponieważ klawisz nadal wciśnięty to znowu preksaler ruszy - no nie widzisz tego ? Dlatego mówię że to masło maślane i nie po to żeby cię urazić czy coś - tylko jak najszybciej odwieść cię od takiego pomysłu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 wrz 2012, o 10:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Stanley]]></name></author>
<updated>2012-09-29T09:32:41+01:00</updated>
<published>2012-09-29T09:32:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16156#p16156</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16156#p16156"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16156#p16156"><![CDATA[
Nie wiem dlaczego uważasz, że to masło maślane.. <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />Wytłumaczę kod po kolei.<br />[syntax=c]while(1)<br />        {<br />                if( !(PINB &amp; KEY2) )<br />                {<br />                TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;CS12); //TIMER1 ON - PRESKALER 1024<br />                if( !(PINB &amp; KEY2) &amp;&amp; TCNT1&lt;15625) OCR2=255; //Jeżeli przycisk jest zwarty do masy KROCEJ niż 2s - LED OFF<br />                                if( OCR2==255) TCCR1B &amp;= ~( (1&lt;&lt;CS10)|(1&lt;&lt;CS11)|(1&lt;&lt;CS12) ); //TIMER1 OFF<br />                }<br />                               <br />                               <br />                               <br />                if( !(PINB &amp; KEY2) )<br />                {<br />                TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;CS12); //TIMER1 ON - PRESKALER 1024<br />                if( !(PINB &amp; KEY2) &amp;&amp; TCNT1&gt;15625) OCR2=0; //Jeżeli przycisk jest zwarty do masy DLUZEJ niż 2s - LED ON<br />                                if( OCR2==0) TCCR1B &amp;= ~( (1&lt;&lt;CS10)|(1&lt;&lt;CS11)|(1&lt;&lt;CS12) ); //TIMER1 OFF<br />                }<br />                               <br /> <br /> <br />                       <br /> <br />        }[/syntax]<br /><br />Timer1 jest <strong>wyłączony</strong> (nie zlicza impulsów), gdy przycisk KEY2 jest <strong>niewciśnięty</strong> zgadza się?<br />W chwili, gdy przycisk KEY2 zostaje <strong>wciśnięty</strong>, Timer1 zostaje <strong>załączony</strong> i zaczyna sobie zliczać impulsy zgadza się?<br />W związku z tym, że Timer1 zlicza impulsy, ja to wykorzystuję w kolejnym warunku i zawczasu obliczyłem, że przy preskalerze 1024 i F_CPU=8MHz otrzymuję ostatecznie sygnał o częstotliwości 78125,5Hz, zgadza się? <br />Teraz powstaje pytanie ile impulsów musi zliczyć Timer1 aby trwało to 2s, bo taką zwłokę akurat chcę mieć przy długim wciśnięciu klawisza.<br /><strong>2 * 7812,5 = 15625</strong> zgadza się? <br />I tą wartość wykorzystuję w kolejnym warunku: Jeżeli przycisk KEY2 jest wciśnięty i Timer1 zliczył <strong>mniej</strong> niż 15625 impulsów, czyli w sumie czas trwania wduszonego przycisku wynosi mniej niż 2 sekundy, to wtedy WYŁĄCZ LED zgadza się?<br />Ostatni warunek: Jeżeli LED WYŁĄCZONY ---&gt; WYŁĄCZ Timer1 zgadza się?<br /><br />Druga część w pętli głównej to jest wszystko to samo z dwoma różnicami:<br />Jeżeli przycisk KEY2 jest wciśnięty i Timer1 zliczył <strong>więcej</strong> niż 15625 impulsów, czyli w sumie czas trwania wduszonego przycisku wynosi więcej niż 2 sekundy, to wtedy ZAŁĄCZ LED zgadza się?<br />Ostatni warunek: Jeżeli LED ZAŁĄCZONY ---&gt; WYŁĄCZ Timer1 zgadza się?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=305">Stanley</a> — 29 wrz 2012, o 09:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-29T01:11:05+01:00</updated>
<published>2012-09-29T01:11:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16146#p16146</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16146#p16146"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16146#p16146"><![CDATA[
Powiem krótko - to jest bardzo zła droga - nie jestem w stanie tego analizować <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />zwróć tylko uwagę że wszystkie warunki są praktycznie takie same - totalne masło maślane <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 wrz 2012, o 01:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Stanley]]></name></author>
<updated>2012-09-29T00:41:34+01:00</updated>
<published>2012-09-29T00:41:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16145#p16145</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16145#p16145"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16145#p16145"><![CDATA[
Właśnie trafiłeś co nie tak! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Ale jeszcze nie chodzi tak jak należy: <br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /> <br /> <br />#define LED (1&lt;&lt;PB3)<br />#define KEY2 (1&lt;&lt;PB0)<br />#define KEY1 (1&lt;&lt;PB1)<br /> <br />int main(void)<br />{<br /> <br />TCCR2 |= (1&lt;&lt;WGM21)|(1&lt;&lt;WGM20)|(1&lt;&lt;CS20)|(1&lt;&lt;COM21); //fast pwm, prescaler=1, set at bottom<br /> <br />TCCR1B |= (1&lt;&lt;WGM12); //TRYB CTC<br />TCCR1B &amp;= ~( (1&lt;&lt;CS10)|(1&lt;&lt;CS11)|(1&lt;&lt;CS12) ); //TIMER OFF<br />OCR1A = 65535; //clear at compare match<br /> <br /> <br />DDRB |= LED;<br />PORTB |= KEY1|KEY2;<br />DDRB &amp;= ~(KEY1|KEY2);<br />OCR2=255; //LED OFF<br /> <br /> <br />        while(1)<br />        {<br />                if( !(PINB &amp; KEY2) )<br />                {<br />                TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;CS12); //TIMER1 ON - PRESKALER 1024<br />                if( !(PINB &amp; KEY2) &amp;&amp; TCNT1&lt;15625) OCR2=255; //Jeżeli przycisk jest zwarty do masy KROCEJ niż 2s - LED OFF<br />if( OCR2==255) TCCR1B &amp;= ~( (1&lt;&lt;CS10)|(1&lt;&lt;CS11)|(1&lt;&lt;CS12) ); //TIMER1 OFF<br />                }<br /><br /><br /><br />if( !(PINB &amp; KEY2) )<br />                {<br />                TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;CS12); //TIMER1 ON - PRESKALER 1024<br />                if( !(PINB &amp; KEY2) &amp;&amp; TCNT1&gt;15625) OCR2=0; //Jeżeli przycisk jest zwarty do masy DLUZEJ niż 2s - LED ON <br />if( OCR2==0) TCCR1B &amp;= ~( (1&lt;&lt;CS10)|(1&lt;&lt;CS11)|(1&lt;&lt;CS12) ); //TIMER1 OFF<br />                }<br /><br /><br /><br /><br /> <br />        }<br /> <br /> <br />}<br />[/syntax]<br /><br />Pomysł nadaje się Twoim zdaniem? <br />Działa tylko jedna opcja na długie przyciśnięcie klawisza. Na krótkie przyciśnięcie nie działa. Nie rozumiem dlaczego akurat na dłuższe przyciśnięcie działa, a na krótsze już nie skoro warunki są niemalże identyczne tylko ze zmienionymi wartościami impulsów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=305">Stanley</a> — 29 wrz 2012, o 00:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-29T00:15:13+01:00</updated>
<published>2012-09-29T00:15:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16144#p16144</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16144#p16144"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16144#p16144"><![CDATA[
if( !(PINB &amp; KEY2) &amp;&amp; OCR1A&lt;15625) OCR2=0;<br /><br />ale to to raczej jest tylko twoje pobożne życzenie a nie warunek, dokładniej mówiąc to zadziała tak:<br /><br />jeśli klawisz wciśnięty i rejestr OCR1A (który nawiasem mówiąc nie ma NIC WSPÓLNEGO z tykającym rejestrem TCNT1 timera1) jest mniejszy niż 15625 - a pewnie jest - to warunek zawsze jest spełniony gdy tylko wciśniesz klawisz.<br /><br />Ale żeby ci zaraz nie przyszedł inny pomysł do głowy np:<br /><br />if( !(PINB &amp; KEY2) &amp;&amp; TCNT1&lt;15625) OCR2=0;<br /><br />bo tuż po wystartowaniu timera i tak zwykle TCNT1 będzie mniejsze niż 15625 - więc znowu zawsze warunek będzie spełniony gdy tylko klawisz będzie wciśnięty - od razu<br /><br />nie wiem nawet tzn nie potrafię sobie odwzorować w głowie co ty chcesz tą drugą częścią warunku osiągnąć ??? pomyśl dokładnie jak to działa<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 wrz 2012, o 00:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Stanley]]></name></author>
<updated>2012-09-28T23:11:49+01:00</updated>
<published>2012-09-28T23:11:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16142#p16142</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16142#p16142"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16142#p16142"><![CDATA[
Timer1 jest normalnie wyłączony. Załącza go wciśnięcie przycisku KEY2 i w następnym warunku: jeżeli przycisk nadal jest wciśnięty i podczas tego wciśnięcia (zwarcia KEY2 do masy) licznik zliczy mniej niż 15625 impulsów czyli czas trzymania przycisku wciśniętego trwa ogółem nie dłużej niż 2 sekundy - LED powinien zostać zapalony.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=305">Stanley</a> — 28 wrz 2012, o 23:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Stanley]]></name></author>
<updated>2012-09-28T18:33:37+01:00</updated>
<published>2012-09-28T18:33:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16116#p16116</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16116#p16116"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16116#p16116"><![CDATA[
Ok dodałem wpis w tamtym temacie, dzięki. Ale też chciałbym wiedzieć dlaczego to rozwiązanie nie działa, co tutaj podałem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=305">Stanley</a> — 28 wrz 2012, o 18:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-28T17:45:34+01:00</updated>
<published>2012-09-28T17:45:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16111#p16111</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16111#p16111"/>
<title type="html"><![CDATA[Re: PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16111#p16111"><![CDATA[
Spróbuj poczytać to w całości<br /><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/post16079.html#p16079" >post16079.html#p16079</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 28 wrz 2012, o 17:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Stanley]]></name></author>
<updated>2012-09-28T16:57:52+01:00</updated>
<published>2012-09-28T16:57:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16106#p16106</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16106#p16106"/>
<title type="html"><![CDATA[PRZYCISKI TIMER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1607&amp;p=16106#p16106"><![CDATA[
Chcę zrobić 2 opcje na jednym przycisku, gdzie czas zwarcia przycisku do masy jest zliczany przez timer1.<br />Napisałem wstępnie coś takiego: <br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />#define LED (1&lt;&lt;PB3)<br />#define KEY2 (1&lt;&lt;PB0)<br />#define KEY1 (1&lt;&lt;PB1)<br /><br />int main(void)<br />{<br /><br />TCCR2 |= (1&lt;&lt;WGM21)|(1&lt;&lt;WGM20)|(1&lt;&lt;CS20)|(1&lt;&lt;COM21); //fast pwm, prescaler=1, set at bottom<br /><br />TCCR1B |= (1&lt;&lt;WGM12); //TRYB CTC<br />TCCR1B &amp;= ~( (1&lt;&lt;CS10)|(1&lt;&lt;CS11)|(1&lt;&lt;CS12) ); //TIMER OFF<br />OCR1A = 65535; //clear at compare match<br /><br /><br />DDRB |= LED;<br />PORTB |= KEY1|KEY2;<br />DDRB &amp;= ~(KEY1|KEY2);<br />OCR2=255; //LED OFF<br /><br /><br />while(1)<br />{<br />if( !(PINB &amp; KEY2) )<br />{<br />TCCR1B |= (1&lt;&lt;CS10)|(1&lt;&lt;CS12); //TIMER ON - PRESKALER 1024<br />if( !(PINB &amp; KEY2) &amp;&amp; OCR1A&lt;15625) OCR2=0; //Jeżeli przycisk jest zwarty do masy krócej niż 2s - LED ON<br />}<br /><br />}<br /><br /><br />}[/syntax]<br /><br />Dlaczego to nie działa? Coś nie tak robię z Timerem1, ponieważ gdy usunę z ostatniego warunku <strong>OCR1A&lt;15625</strong> - to dioda normalnie reaguje na przycisk sterowany przez PWM.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=305">Stanley</a> — 28 wrz 2012, o 16:57</p><hr />
]]></content>
</entry>
</feed>