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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-05-31T18:51:29+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=7203&amp;mode</id>
<entry>
<author><name><![CDATA[frickle]]></name></author>
<updated>2014-05-31T18:51:29+01:00</updated>
<published>2014-05-31T18:51:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82921#p82921</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82921#p82921"/>
<title type="html"><![CDATA[Re: Impulsator + ATMEGA8 + wyświetlacz 7 segmentowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82921#p82921"><![CDATA[
<div class="quotetitle">Zaba napisał(a):</div><div class="quotecontent"><br />Żeby sprawdzić czy za złe liczenie odpowiedzialne są <br />drgania styków możesz w przerwaniu wprowadzić <br />opóźnienie odczytu drugiego styku przed ifem<br />np. _delay_ms(20).<br /><br />Ale tylko dla pewności nie pozostawiaj tam tej funkcji opóźniającej a<br />jeśli sytuacja Ci się poprawi to wtedy wykorzystaj timer lub inną funkcję nie blokującą<br />do niwelacji tych drgań<br /></div><br /><br />Dzięki - spróbuję.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2566">frickle</a> — 31 maja 2014, o 18:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-05-30T18:10:34+01:00</updated>
<published>2014-05-30T18:10:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82839#p82839</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82839#p82839"/>
<title type="html"><![CDATA[Re: Impulsator + ATMEGA8 + wyświetlacz 7 segmentowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82839#p82839"><![CDATA[
Żeby sprawdzić czy za złe liczenie odpowiedzialne są <br />drgania styków możesz w przerwaniu wprowadzić <br />opóźnienie odczytu drugiego styku przed ifem<br />np. _delay_ms(20).<br /><br />Ale tylko dla pewności nie pozostawiaj tam tej funkcji opóźniającej a<br />jeśli sytuacja Ci się poprawi to wtedy wykorzystaj timer lub inną funkcję nie blokującą<br />do niwelacji tych drgań<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 30 maja 2014, o 18:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[frickle]]></name></author>
<updated>2014-05-30T07:29:09+01:00</updated>
<published>2014-05-30T07:29:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82800#p82800</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82800#p82800"/>
<title type="html"><![CDATA[Re: Impulsator + ATMEGA8 + wyświetlacz 7 segmentowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82800#p82800"><![CDATA[
Dzięki wszystkim za pomoc. Szczególnie przydatne wskazówki od kolegi (a może koleżanki) <strong>no atnel no fun</strong>. Rzeczywiście przekombinowałem z dwoma przerwaniami, jedno zupełnie wystarczy. Sprawa druga, miałem również problem natury sprzętowej w postaci braku rezystora w odpowiednim miejscu. Na chwilę obecną układ działa, ale (no właśnie):<br /><br />Zdarza się że kręcąc delikatnie gałką impulsatora (tak aby kontrolować przeskoki o 1), licznik przeskakuje nie o 1 ale o 2 lub 3.<br />Macie pomysł co może być przyczyną? Może odrobinę większe kondensatory zastosować przy końcówkach impulsatora (mam 100n)? A może po prostu sam model impulsatora jest jakiś trefny i spróbować na innym, jakimś &quot;droższym i lepszym&quot;?<br /><br />a propos, tera program wygląda nastepująco:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />volatile int8_t numer = 5;<br /><br />int main(void){<br /><br />DDRB = 0b11111111;<br />DDRC = 0b00000000;<br />DDRD = 0b00000000;<br />PORTD = 0b00000000;<br /><br />const uint8_t data&#91;&#93; = {<br />0xC0,// 0<br />0xF3,// 1<br />0xA4,// 2<br />0xA1,// 3<br />0x93,// 4<br />0x89,// 5<br />0x88,// 6<br />0xC3,// 7<br />0x80,// 8<br />0x81,// 9<br />};<br /><br />MCUCR |= (1&lt;&lt;ISC01);<br />MCUCR |= (1&lt;&lt;ISC00);<br />GICR |= (1&lt;&lt;INT0);<br /><br />sei();<br /><br />while(1){<br />PORTB = data&#91;numer&#93;;<br />}<br /><br />ISR(INT0_vect){<br />if(!(PINC &amp; (1&lt;&lt;PC0)))<br />{<br />numer++;<br />if(numer&gt;9) numer=0;<br />}<br />else<br />{<br />numer--;<br />if(numer&lt;0) numer=9;<br />}<br />}[/syntax]<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2566">frickle</a> — 30 maja 2014, o 07:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kurnachatka]]></name></author>
<updated>2014-05-28T20:09:22+01:00</updated>
<published>2014-05-28T20:09:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82676#p82676</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82676#p82676"/>
<title type="html"><![CDATA[Re: Impulsator + ATMEGA8 + wyświetlacz 7 segmentowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82676#p82676"><![CDATA[
Zerknij tutaj<br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2013/04/encoder-avr-callbackow-ciag-dalszy-cz2.html" >http://mirekk36.blogspot.com/2013/04/en ... y-cz2.html</a><!-- m --><br />Mirek opracował fajną bibliotekę i poradnik w tym temacie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=930">kurnachatka</a> — 28 maja 2014, o 20:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Mellanogaster]]></name></author>
<updated>2014-05-28T23:23:43+01:00</updated>
<published>2014-05-28T19:41:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82663#p82663</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82663#p82663"/>
<title type="html"><![CDATA[Re: Impulsator + ATMEGA8 + wyświetlacz 7 segmentowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82663#p82663"><![CDATA[
ja sobie coś takiego skleciłem do enkodera<br /><br />[syntax=c]uint8_t enkoder(void)<br />{<br />static uint8_t cnt0 = 0, cnt1 = 0;<br /><br />//counterE = 0;<br /><br />if(!(PIN_E1 &amp; (1&lt;&lt;NUME1)))<br />{<br />++cnt0;<br />if (cnt0 == 1)<br />{<br />if(cnt0 &gt; cnt1)<br />{<br />counterE++;<br />}<br />}<br />if(cnt0 == 0) cnt0 = 2;<br />}<br />else cnt0 = 0;<br /><br />if(!(PIN_E2 &amp; (1&lt;&lt;NUME2)))<br />{<br />++cnt1;<br />if (cnt1 == 1)<br />{<br />if(cnt0 &lt; cnt1)<br />{<br />counterE --;<br />}<br />}<br />if(cnt1 == 0) cnt1 = 2;<br />}<br />else cnt1 = 0;<br /><br />return counterE;<br />}[/syntax]<br /><br />może się przyda <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2911">Mellanogaster</a> — 28 maja 2014, o 19:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[no atnel no fun]]></name></author>
<updated>2014-05-26T22:10:00+01:00</updated>
<published>2014-05-26T22:10:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82492#p82492</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82492#p82492"/>
<title type="html"><![CDATA[Re: Impulsator + ATMEGA8 + wyświetlacz 7 segmentowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82492#p82492"><![CDATA[
do tak prostych celów wystarczy wykorzystać jedno przerwanie, tak jak kolega napisał powyżej.<br />Niech będzie to INT0.<br />INT0-&gt; A<br /><a href="http://forum.atnel.pl/_obrazki/o/3610/232a7606caa3d4de3f4f7a8219f933b1.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/3610/232a7606caa3d4de3f4f7a8219f933b1.png" alt="Obrazek" /></a><br /><br />wtedy próbkujemy stan PD3(INT1) w przerwaniu:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ISR(int0_vect){<br />if(PIND &amp; (1&lt;&lt;PD3)) numer++;<br />else numer--;<br />}<br /></div><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />aha polecam jeszcze poczytać <a href="http://www.leniwiec.org/2014/04/28/enkoder-obrotowy-w-praktyce-prawidlowe-podlaczenie-do-mikrokontrolera-avr/"  class="postlink">http://www.leniwiec.org/2014/04/28/enkoder-obrotowy-w-praktyce-prawidlowe-podlaczenie-do-mikrokontrolera-avr/</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3610">no atnel no fun</a> — 26 maja 2014, o 22:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gumeni]]></name></author>
<updated>2014-05-26T21:32:58+01:00</updated>
<published>2014-05-26T21:32:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82483#p82483</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82483#p82483"/>
<title type="html"><![CDATA[Re: Impulsator + ATMEGA8 + wyświetlacz 7 segmentowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82483#p82483"><![CDATA[
Jeśli impulsator to to samo co enkoder to polecam zaooznać się z tym jak on działa. W skrócie: jeśli obracasz w prawo to sygnał pojawia się najpierw na pinie A a następnie na pinie B, a jeśli kręcisz w prawo to najpierw  pojawia się na B a następnie na A. Zależy także w jakim stanie znajdował się enkoder czy jego piny były zwarte do środkowego pinu czy znajdowały się w stanie wysokiej impedancji. <br />Żeby móc zliczyć wszystkie impulsy musisz znać tak jakby historię enkodera, stan w jakim się znajdował przed przekręceniem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3088">gumeni</a> — 26 maja 2014, o 21:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[vincenzo92]]></name></author>
<updated>2014-05-26T21:32:42+01:00</updated>
<published>2014-05-26T21:32:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82482#p82482</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82482#p82482"/>
<title type="html"><![CDATA[Re: Impulsator + ATMEGA8 + wyświetlacz 7 segmentowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82482#p82482"><![CDATA[
Pierwsze to raczej niepotrzebne są te opóźnienia, po drugie to uprość sobie kod do np pojedynczego przerwania i najprostszego w nim dodawania. <br />Poza tym to nie bardzo ustawiłeś te przerwania na zbocze opadające... a bardziej na zmianę stanu. Dlaczego używasz kodu szesnastkowego do deklaracji kierunku przycisku? nie prościej (1&lt;&lt;PXn)??<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4290">vincenzo92</a> — 26 maja 2014, o 21:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[frickle]]></name></author>
<updated>2014-05-26T20:41:04+01:00</updated>
<published>2014-05-26T20:41:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82473#p82473</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82473#p82473"/>
<title type="html"><![CDATA[Impulsator + ATMEGA8 + wyświetlacz 7 segmentowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7203&amp;p=82473#p82473"><![CDATA[
Zmajstrowałem mały układzik, który ma przy pomocy impulsatora (24 imp/obr) zmieniać cyfrę na wyświetlaczu. Impulsator podpięty pod piny przerwań zewnętrznych INT0 i INT1. Ma reagować na kierunek obrotów, tzn. jak kręcę w jedną stronę licznik rośnie, jak kręcę w drugą maleje. Przy przepełnieniu się resetuje (poniżej 0 =&gt; 9, powyżej 9 =&gt; 0). Schemat zmontowany, zasilanie filtrowane, ale jakoś nie chce działać. Licznik albo stoi w miejscu, albo zapycha jak potłuczony. Może coś poradzicie. Nie wiem czy to kwestia sprzętowa czy programowa.<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 /><br />volatile int8_t numer = 5;<br />volatile int8_t zwieksz = 0;<br /><br />int main(void){<br /><br />DDRB = 0xFF;<br />PORTB = 0b11111111;<br />DDRD = 0x00;<br />PORTD = 0x00;<br /><br />const uint8_t data&#91;&#93; = {<br />0xC0,// 0<br />0xF3,// 1<br />0xA4,// 2<br />0xA1,// 3<br />0x93,// 4<br />0x89,// 5<br />0x88,// 6<br />0xC3,// 7<br />0x80,// 8<br />0x81,// 9<br />};<br /><br /><br /><br />MCUCR |= (0&lt;&lt;ISC01);<br />MCUCR |= (1&lt;&lt;ISC00);<br />MCUCR |= (0&lt;&lt;ISC11);<br />MCUCR |= (1&lt;&lt;ISC10);<br /><br />GICR |= (1&lt;&lt;INT0);<br />GICR |= (1&lt;&lt;INT1);<br /><br />sei();<br /><br />while(1){<br /><br />PORTB = data&#91;numer&#93;;<br />}<br />}<br /><br />ISR(INT0_vect){<br />if(zwieksz == 0){<br />zwieksz = 1;<br />numer += 1;<br />if(numer &gt; 9) numer = 0;<br />} else {<br />zwieksz = 0;<br />_delay_loop_2(1000); //dołożone, żeby sprawdzić co się będzie działo<br />}<br />}<br /><br />ISR(INT1_vect){<br />if(zwieksz == 0){<br />zwieksz = -1;<br />numer -= 1;<br />if(numer &lt; 0) numer = 9;<br />} else {<br />zwieksz = 0;<br />_delay_loop_2(1000); //dołożone, żeby sprawdzić co się będzie działo<br />}<br />}[/syntax]<br /><br />INT0 i INT1 wyzwalane zboczem opadającym (ale przy rosnącym było to samo)<br />Wstawiłem kondensatory przy impulsatorze (oba wyjścia) żeby zapobiec szpilkom, ale może za duże były (47 uF)?<br />Nie zwracajcie uwagi na kolejność cyfr - pomieszałem w podłączeniu i łatwiej było zmienić w kalkulatorze.<br /><br />Będę wdzięczny za sugestie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2566">frickle</a> — 26 maja 2014, o 20:41</p><hr />
]]></content>
</entry>
</feed>