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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=23&amp;t=3241&amp;mode</id>
<entry>
<author><name><![CDATA[Tomek1955]]></name></author>
<updated>2017-01-02T21:35:15+01:00</updated>
<published>2017-01-02T21:35:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=178884#p178884</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=178884#p178884"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=178884#p178884"><![CDATA[
Albo zostawić w pliku enco.h, a zmienić w funkcji inicjalizacji enkodera enco_init w pliku enco.c<br />[syntax=c]PCICR |= (1&lt;&lt;PCICR_BIT);[/syntax]<br />Oczywiście,tak myślałem, że gdzieś strzeliłem durnego babola, tylko nie mogę go znaleźć. Serdeczne podziękowania dla kolegi anshar. Wreszcie mogę dalej walczyć z projektem. Niby bez PCINTów też mogło być, ale strasznie denerwują mnie takie problemy. Jak coś ma działać, to ma i już! Jeszcze raz dzięki za szybką pomoc!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11980">Tomek1955</a> — 2 sty 2017, o 21:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-01-02T20:51:30+01:00</updated>
<published>2017-01-02T20:51:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=178879#p178879</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=178879#p178879"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=178879#p178879"><![CDATA[
W pliku enco.h powinno być:<br />[syntax=c]#define PCICR_BIT       (1&lt;&lt;PCIE2)[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 2 sty 2017, o 20:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tomek1955]]></name></author>
<updated>2017-01-02T22:11:42+01:00</updated>
<published>2017-01-02T20:06:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=178876#p178876</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=178876#p178876"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=178876#p178876"><![CDATA[
Na początek życzenia wszelkiej pomyślności w Nowym Roku dla wszystkich forumowiczów.<br />Jestem mocno początkującym adeptem programowania AVRów, może rzucam się na zbyt głęboką wodę, ale lubię ambitniejsze zadania.<br /><span style="color: #40FF00">WAŻNA UWAGA!!!</span><br />Dzięki pomocy kolegi anshar błąd w bibliotece został wykryty! Wobec tego pozwolę sobie poprawić go w zamieszczonym poniżej kodzie. Jeśli ktoś zechciałby skorzystać z tej biblioteki, to stwierdzam, że została ona sprawdzona i w tej chwili już działa w pełnym, założonym zakresie i nie zawiera błędów!<br /><br />A teraz przechodzę do problemu. Do projektów, które mam zamiar zrealizować bardzo przyda się enkoder. Próbowałem obsługiwać go na różne sposoby, ale ilość przekłamań była nie do przyjęcia. Nie pomagały też różne metody układowej filtracji zakłóceń. Zabrałem się więc do porządnego przygotowania jego obsługi. Obejrzałem wszystkie 9 odcinków poradników Pana Mirka i częściowo ściągając z ekranu napisałem bibliotekę. Jest nieco mniej uniwersalna od tej z poradnika, świadomie zrezygnowałem z niektórych opcji, np. obsługi enkodera półkrokowego, pracy w poolingu. Ma pracować na przerwaniach INT0, INT1 lub na PCINT. Na tych pierwszych śmiga jak szalona. Z pośpiechu podłączyłem byle jaki, kupiony za 2,50 zł enkoder bez żadnych układów filtrujących, tak &quot;na żywca&quot; i przekłamań jest bardzo niewiele. Ale z PCINT zaczyna się kłopot. Po prostu nie działają wcale. Umieściłem na próbę w procedurze przerwania włączenie diody i dioda się nie zaświeciła, czyli wygląda, że przerwanie nie następuje. Tylko dlaczego? Napisałem prościutki programik do migania diodą z PCINTa wg 3 części wykładu P. Mirka o przerwaniach dla początkujących (czyli akurat dla mnie) i wszystko działa, jak trzeba. Załączam teraz pliki enco.h i enco.c mojej biblioteki:<br />[syntax=c]/*<br /> * enco.h<br /> *<br /> *  Created on: 30 gru 2016<br /> *      Author: Tomek1955<br /> */<br /><br />#ifndef ENCO_H_<br />#define ENCO_H_<br /><br /> //0 włącza przerwania INT0, INT1, 1 włącza przerwania PCINT<br />#define PCINT_USE 1<br /><br />//piny AiB enkodera<br />#define ENC_A      (1&lt;&lt;PD2)<br />#define ENC_B      (1&lt;&lt;PD3)<br />#define ENC_AB_PIN  PIND<br />#define ENC_AB_PORT PORTD<br /><br />//przycisk<br />#define ENC_SW      (1&lt;&lt;PB2)<br />#define ENC_SW_PIN  PINB<br />#define ENC_SW_PORT PORTB<br />#define ENC_SW_ON   (ENC_SW_PIN &amp; ENC_SW)<br /><br />//kierunek obrotu enkodera<br />#define ENC_LEFT  0x10<br />#define ENC_RIGHT 0x20<br /><br />//wybór rejestrów i wektora dla PCINT<br />#if PCINT_USE==1<br />#define PCINT_IRQ_VECT  PCINT2_vect<br />#define PCICR_BIT       1&lt;&lt; PCIE2<br />#define PCMSK_REG       PCMSK2<br />#define PCINT_A         1&lt;&lt;PCINT18<br />#define PCINT_B         1&lt;&lt;PCINT19<br />#endif<br /><br />extern volatile uint8_t enco_dir;<br /><br />void enco_init(void);<br />void ENCO_EVENT(void);<br /><br />void register_enco_event_sw_callback(void (*callback)(void));<br />void register_enco_event_callback(void (*callback)(void));<br /><br />void encoder_proc(void);<br />int get_encoder(void);<br />void set_encoder(int val);<br /><br />#endif /* ENCO_H_ */[/syntax]<br /><br /><br />[syntax=c]/*<br /> * enco.c<br /> *<br /> *  Created on: 30 gru 2016<br /> *      Author: Tomek1955<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;enco.h&quot;<br /><br />volatile int enco_cnt;<br />volatile uint8_t enco_dir;<br />volatile uint8_t enco_flag;<br /><br />static void (*enco_event_sw_callback)(void);<br /><br />void register_enco_event_sw_callback(void(*callback)(void)){<br />enco_event_sw_callback = callback;<br />}<br /><br />static void (*enco_event_callback)(void);<br /><br />void register_enco_event_callback(void(*callback)(void)){<br />enco_event_callback = callback;<br />}<br />//tabica dla enkodera pełnokrokowego<br />const uint8_t enc_tab&#91;7&#93;&#91;4&#93;PROGMEM = {<br />{0x0, 0x2, 0x4, 0x0},{0x3, 0x0, 0x1, 0x10},<br />{0x3, 0x2, 0x0, 0x0},{0x3, 0x2, 0x1,  0x0},<br />{0x6, 0x0, 0x4, 0x0},{0x6, 0x5, 0x0, 0x20},<br />{0x6, 0x5, 0x4, 0x0}<br />};<br />//odczyt licznika enkodera<br />int get_encoder(void){<br />uint8_t sreg = SREG;<br />cli();<br />int res = enco_cnt;<br />SREG = sreg;<br />return res;<br />}<br />//ustawianie licznika enkodera na wartośc val<br />void set_encoder(int val){<br />uint8_t sreg = SREG;<br />cli();<br />enco_cnt = val;<br />SREG = sreg;<br />}<br /><br />//odczyt stanu enkodera<br />void encoder_proc(void){<br />static uint8_t enc_stat;<br />register uint8_t pin = ENC_AB_PIN;<br />register uint8_t ABstate = ((pin&amp;ENC_B)?2:0)|((pin&amp;ENC_A)?1:0);<br />enc_stat = pgm_read_byte(&amp;enc_tab&#91;enc_stat &amp; 0xf&#93;&#91;ABstate&#93;);<br />ABstate = (enc_stat&amp;0x30);<br />if(ABstate){<br />enco_dir = ABstate;<br />if(ABstate==ENC_RIGHT)enco_cnt++;<br />else enco_cnt--;<br />enco_flag = 1;<br />}<br />}<br /><br />//inicjalizacja enkodera<br />void enco_init(void){<br /><br />ENC_SW_PORT |= ENC_SW;<br />ENC_AB_PORT |= ENC_A | ENC_B;<br /> encoder_proc();<br /><br />#if PCINT_USE==1<br /> PCICR |= PCICR_BIT;<br /> PCMSK_REG |= PCINT_A|PCINT_B;<br />#else<br />EIMSK |= (1&lt;&lt;INT0) | (1&lt;&lt;INT1);<br />EICRA |= (1&lt;&lt;ISC00) | (1&lt;&lt;ISC10);<br />#endif<br />}<br /><br />//obsługa zdarzenia enkodera<br />void ENCO_EVENT(void){;<br />if(enco_flag){<br />if(enco_event_callback)enco_event_callback();<br />enco_flag=0;<br />}<br />static uint8_t enc_key_lock;<br />if(!enc_key_lock&amp;&amp;!ENC_SW_ON){<br />enc_key_lock=150;<br />if(enco_event_sw_callback)enco_event_sw_callback();<br />}<br />else if(enc_key_lock&amp;&amp;ENC_SW_ON)enc_key_lock++;<br />}<br /><br />//obsługa przerwania PCINT<br />#if PCINT_USE==1 <br /><br />ISR(PCINT_IRQ_VECT){<br />encoder_proc();<br />}<br /><br />//obsługa przerwań INT0,INT1<br />#else<br />ISR(INT0_vect){<br />encoder_proc();<br />}<br />ISR(INT1_vect){<br />encoder_proc();<br />}<br />#endif[/syntax]<br /><br />A teraz testowy program obsługi enkodera z wykorzystaniem tej biblioteki:<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2 sty 2017<br /> *      Author: Tomek1955<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;LCD44780/lcd44780.h&quot;<br />#include &quot;ENCODER/enco.h&quot;<br /><br />void enco_disp(void);<br />void enco_res(void);<br /><br />int main(void){<br /><br />lcd_init();<br />enco_init();<br /><br />lcd_str_P(PSTR(&quot;ENCO_TEST&quot;));<br />if(PCINT_USE==1)<br />lcd_str_P(PSTR(&quot; PCINT&quot;));<br />else <br />lcd_str_P(PSTR(&quot; INT0,1&quot;));<br /><br />register_enco_event_sw_callback(enco_res);<br />register_enco_event_callback(enco_disp);<br /><br />sei();<br /><br />while(1){<br /><br />ENCO_EVENT();<br />}<br />}<br /><br />//wyświetlanie licznika i kierunku obrotu enkodera<br />void enco_disp(void){<br />lcd_locate(1,0);<br />lcd_str_P(PSTR(&quot;licznik  &quot;));<br />lcd_int(get_encoder());<br />lcd_str_P(PSTR(&quot;   &quot;));<br />lcd_locate(2,0);<br />lcd_str_P(PSTR(&quot;kierunek &quot;));<br />if(enco_dir==ENC_LEFT)<br />lcd_str_P(PSTR(&quot;Lewo &quot;));<br />else<br />lcd_str_P(PSTR(&quot;Prawo&quot;));<br />}<br /><br />//obsługa przycisku - kasowanie licznika enkodera<br />void enco_res(void){<br />set_encoder(0);<br />enco_disp();<br />}[/syntax]<br /><br />Biblioteka obsługi LCD wzięta została z Bluebooka.<br />Wszystko razem chodzi na Atmedze 88PA taktowanej 8Mhz z wewnętrznego generatora.Enkoder i przycisk podłączone, jak widać w pliku enco.h.<br /><br />Błagam mądrzejszych kolegów o pomoc. Przesiedziałem już prawie 2 noce (w tym część sylwestrowej) gapiąc się w kod, jak sroka w gnat i błędu nie widzę. Wydaje mi się, że i inicjalizacja przerwań w funkcji enco_init, i funkcja obsługi przerwania są OK. Więc dlaczego nie działa???<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11980">Tomek1955</a> — 2 sty 2017, o 20:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ryba84]]></name></author>
<updated>2016-08-31T21:40:49+01:00</updated>
<published>2016-08-31T21:40:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167685#p167685</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167685#p167685"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167685#p167685"><![CDATA[
<div class="quotetitle">maxus napisał(a):</div><div class="quotecontent"><br />Widziałem już te poradniki, ale z tego co pamiętam nie było tam gotowej biblioteki do pobrania. Oglądać jeszcze raz to wszystko to z <br />5 godzin chyba. Zamysł tych poradników był taki, żeby każdy sobie taką bibliotekę sam napisał?<br /></div><br />Masz na forum inne biblioteki: <a href="http://forum.atnel.pl/topic11570.html"  class="postlink">http://forum.atnel.pl/topic11570.html</a><br /><a href="http://forum.atnel.pl/topic13864.html"  class="postlink">http://forum.atnel.pl/topic13864.html</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3170">ryba84</a> — 31 sie 2016, o 21:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-08-30T20:30:56+01:00</updated>
<published>2016-08-30T20:30:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167594#p167594</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167594#p167594"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167594#p167594"><![CDATA[
<div class="quotetitle">maxus napisał(a):</div><div class="quotecontent"><br />Oglądać jeszcze raz to wszystko to z <br />5 godzin chyba.<br /></div><br />A rzeczywiście - to przepraszam nie było sugestii <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> w takim razie doradzę inaczej - nawet ich nie oglądaj bo mogą okazać się szkodliwe.<br /><br /><div class="quotetitle">maxus napisał(a):</div><div class="quotecontent"><br />Zamysł tych poradników był taki, żeby każdy sobie taką bibliotekę sam napisał?<br /></div><br />Nie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> bzdury piszesz - zamysł był aby pobudzić do myślenia, zainspirować ... Ci którzy poświęcili czas teraz gdy potrzebują na szybko to dosłownie w kilku linijkach kodu napiszą najprostszą obsługę enkodera - bo zrozumieli zasadę działania, a inni pokuszą się o napisanie sobie biblioteki własnej na podstawie poradnika <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... A jeszcze inni spędzą grubo więcej niż 5 godzin na szukaniu po necie po czym i tak się poddadzą <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i dobrze. Każdy robi to co lubi <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=54">mirekk36</a> — 30 sie 2016, o 20:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2016-08-30T20:09:43+01:00</updated>
<published>2016-08-30T20:09:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167592#p167592</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167592#p167592"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167592#p167592"><![CDATA[
<div class="quotetitle">maxus napisał(a):</div><div class="quotecontent"><br />żeby każdy sobie taką bibliotekę sam napisał?<br /></div><br /><br />w ten sposób ... wiele się uczy i nie potrzebuje potem takich skasowanych szukać <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> — 30 sie 2016, o 20:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[maxus]]></name></author>
<updated>2016-08-30T20:07:52+01:00</updated>
<published>2016-08-30T20:07:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167591#p167591</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167591#p167591"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167591#p167591"><![CDATA[
Widziałem już te poradniki, ale z tego co pamiętam nie było tam gotowej biblioteki do pobrania. Oglądać jeszcze raz to wszystko to z <br />5 godzin chyba. Zamysł tych poradników był taki, żeby każdy sobie taką bibliotekę sam napisał?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8161">maxus</a> — 30 sie 2016, o 20:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-08-30T19:56:27+01:00</updated>
<published>2016-08-30T19:56:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167590#p167590</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167590#p167590"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167590#p167590"><![CDATA[
<div class="quotetitle">maxus napisał(a):</div><div class="quotecontent"><br />Czy tylko u mnie ten wątek zaczyna się od posta @wielkiego ?<br />Gdzie sie podziała ta biblioteka?<br /></div><br />Dokładnie jak pisze SunRiver wyżej - a ja podpowiem - pobierz sobie zupełnie darmowy program AVPlayer<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/atnel-video-player.html" >http://atnel.pl/atnel-video-player.html</a><!-- m --><br /><br />wpisz w niego enkoder i obejrzyj te poradniki:<br /><br /><img src="https://obrazkiforum.atnel.pl/54/025de604f17d86fc0dd8f93defaa6dee.jpg" alt="Obrazek" /><br /><br />to będziesz miał komplet informacji bez łaski tych co to chodzili i kasowali swoje posty na naszym forum<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 30 sie 2016, o 19:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2016-08-30T19:39:25+01:00</updated>
<published>2016-08-30T19:39:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167587#p167587</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167587#p167587"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167587#p167587"><![CDATA[
<div class="quotetitle">maxus napisał(a):</div><div class="quotecontent"><br />Czy tylko u mnie ten wątek zaczyna się od posta @wielkiego ?<br />Gdzie sie podziała ta biblioteka?<br /></div><br /><br />dlatego Że  szanowny kolega postanowił skasować swoje posty ...  <br />i ma pretensje że został za robienie śmietnika odpowiednio potraktowany ...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 30 sie 2016, o 19:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[maxus]]></name></author>
<updated>2016-08-30T19:33:30+01:00</updated>
<published>2016-08-30T19:33:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167586#p167586</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167586#p167586"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=167586#p167586"><![CDATA[
Czy tylko u mnie ten wątek zaczyna się od posta @wielkiego ?<br />Gdzie sie podziała ta biblioteka?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8161">maxus</a> — 30 sie 2016, o 19:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zoom]]></name></author>
<updated>2016-02-23T10:54:54+01:00</updated>
<published>2016-02-23T10:54:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=154480#p154480</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=154480#p154480"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=154480#p154480"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />wkrótce ukaże się dość spory poradnik, w którym rozprawimy się z różnymi typami enkoderów tak aby obsługiwać je wszystkie tą samą funkcją i w różnych konfiguracjach. Opowiem też o tak ważnym zagadnieniu jak połączenia elektryczne<br /></div><br />No to czekam z niecierpliwością, bo akurat chcę zrobić prosty projekt z encoderem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Niby temat oklepany i prosty, ale każda informacja, czy ciekawe rozwiązanie się przyda.<br />A znając Pańską pomysłowość, to może to nieźle urozmaicić i uprościć pracę (zabawę <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=685">zoom</a> — 23 lut 2016, o 10:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-02-21T20:43:01+01:00</updated>
<published>2016-02-21T20:43:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=154338#p154338</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=154338#p154338"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=154338#p154338"><![CDATA[
Już wkrótce ... kończę zaraz jeden duży rozdział i na małą chwilę wrócę do poradników (no może do poradnika) bo do tego aż mnie ciągnie - a pisanie książki to taaaak mozolna praca że szok <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=54">mirekk36</a> — 21 lut 2016, o 20:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-02-21T20:33:54+01:00</updated>
<published>2016-02-21T20:33:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=154331#p154331</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=154331#p154331"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=154331#p154331"><![CDATA[
<div class="quotetitle">electro napisał(a):</div><div class="quotecontent"><br />Witam<br />Mam pewien problem. Kod działa bez problemu lecz przy kręceniu encoderem to zlicza co 2 tyknięcia - raz nie ma reakcji a przy następnym dopiero zlicza o 1, i znowu bez reakcji i.t.d. Może to wina enkodera ale porównywałem charakterystyki i sa identyczne nie wiem gdzie może leżeć problem.<br /><br /><br />Pozdrawiam<br />Konrad<br /></div><br /><br />Trzeba wiedzieć, że są różne typy enkoderów. Czyli są tzw z pół-krokiem i z pełnym krokiem. Są enkodery które mają różne ilości skoków na pełen obrót np 24 albo 30 albo jeszcze inne ... W różnych przypadkach trzeba nieco różnie podejść do obsługi enkodera jeśli chodzi o te pół- albo pełne kroki<br /><br />istotny też jest sposób podłączenia - ale wkrótce ukaże się dość spory poradnik, w którym rozprawimy się z różnymi typami enkoderów tak aby obsługiwać je wszystkie tą samą funkcją i w różnych konfiguracjach. Opowiem też o tak ważnym zagadnieniu jak połączenia elektryczne bo wcześniej sam sobie z tego sprawy nie zdawałem a musiałem w końcu tematem zająć się od PODSTAW<br /><br />w mojej aplikacji enkoder po prostu nie mógł gubić kroków na ileś tam obrotów ... <br /><br />myślę, że ten poradnik zainteresuje wiele osób - polecam chwilę poczekać <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=54">mirekk36</a> — 21 lut 2016, o 20:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[electro]]></name></author>
<updated>2016-02-21T19:35:40+01:00</updated>
<published>2016-02-21T19:35:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=154323#p154323</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=154323#p154323"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=154323#p154323"><![CDATA[
Witam<br />Mam pewien problem. Kod działa bez problemu lecz przy kręceniu encoderem to zlicza co 2 tyknięcia - raz nie ma reakcji a przy następnym dopiero zlicza o 1, i znowu bez reakcji i.t.d. Może to wina enkodera ale porównywałem charakterystyki i sa identyczne nie wiem gdzie może leżeć problem.<br /><br /><br />Pozdrawiam<br />Konrad<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13011">electro</a> — 21 lut 2016, o 19:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[maniocek]]></name></author>
<updated>2015-12-18T21:41:05+01:00</updated>
<published>2015-12-18T21:41:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=148400#p148400</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=148400#p148400"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=148400#p148400"><![CDATA[
Dobry wieczór,<br /><br />Szukam biblioteki, która pomoże mi obsłużyć mój enkoder, może ktoś już testował dla tak dużych wartości i podpowie, czy może poleci inną bibliotekę.<br /><br />Mam silnik:<br /><!-- m --><a class="postlink" href="https://www.pololu.com/product/2288" >https://www.pololu.com/product/2288</a><!-- m --><br />Który na wyjściu, przez jeden obrót wału daje aż 8246 impulsów.<br /><br />Na wyjściu wału mam rolkę fi 31 mm co daje nam prędkość około 54mm/s <br />Daje nam to około 1 i 2/3 obrotu rolki przez sekundę, czyli jakieś 13743 impulsów na sekundę.<br />Dotychczas co znalazłem, to przerwania realizowane są co 1ms, czyli o 14 razy za rzadko...<br /><br />Macie może jakieś rady/propozycję?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8503">maniocek</a> — 18 gru 2015, o 21:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jumar000]]></name></author>
<updated>2015-08-18T22:09:33+01:00</updated>
<published>2015-08-18T22:09:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=137803#p137803</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=137803#p137803"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=137803#p137803"><![CDATA[
Problem rozwiązany, dodałem dwa rezystory <br />[img]<br /><a href="https://obrazkiforum.atnel.pl/5414/01e25d9d823fe0dbf000710451be3984.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/5414/01e25d9d823fe0dbf000710451be3984.jpg" alt="Obrazek" /></a><br />[/img]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5414">jumar000</a> — 18 sie 2015, o 22:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jumar000]]></name></author>
<updated>2015-08-17T20:58:43+01:00</updated>
<published>2015-08-17T20:58:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=137678#p137678</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=137678#p137678"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=137678#p137678"><![CDATA[
[img]<br /><a href="https://obrazkiforum.atnel.pl/5414/2a1bd1031008c10a968830c713304ed2.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/5414/2a1bd1031008c10a968830c713304ed2.png" alt="Obrazek" /></a><br />[/img]<br /><br />Encoder jest podłączony do atmegi644.<br />Jako sam encoder działa rewelacyjnie.<br />Problem zaczyna się jak włączę klawisz na sąsiednim pinie.<br /><br /><br />[syntax=c]/*<br /> * encoder.h<br /> *<br /> *  Created on: 20 mar 2015<br /> *      Author: User<br /> */<br /><br />#ifndef ENCODER_ENCODER_H_<br />#define ENCODER_ENCODER_H_<br /><br /><br />#define ENCODER_DIR DDRB<br />#define ENCODER_PORT PORTB<br />#define ENCODER_PIN PINB<br />#define ENCODER_OUT1 (1&lt;&lt;PB1)<br />#define ENCODER_OUT2 (1&lt;&lt;PB2)<br /><br />#define OK (1&lt;&lt;PB0)<br />#define Esc (1&lt;&lt;PC7)<br /><br /><br />//************************  buzer  ********************************<br />#define BUZER (1&lt;&lt;PD6)<br />#define BUZER_ON PORTD |= BUZER<br />#define BUZER_OFF PORTD  &amp;= ~BUZER<br />#define BUZER_MRUG PORTD ^= BUZER<br /><br /><br /><br />extern volatile uint8_t encoder_left_flag, encoder_right_flag ;<br />extern uint8_t  ok_flag , esc_flag;<br />void encoder_init(void);<br />void encoder_event(void);<br />void register_encoder_left_callback(void *callback_fun);<br />void register_encoder_right_callback(void *callback_fun);<br />void register_ok_callback(void *callback_fun);<br />void register_esc_callback(void *callback_fun);[/syntax]<br />[syntax=c]/*<br /> * encoder.c<br /> *<br /> *  Created on: 20 mar 2015<br /> *      Author: User<br /> */<br />#include&lt;avr/io.h&gt;<br />#include&lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />#include&quot;encoder.h&quot;<br />#include&quot;../PROGRAM/program.h&quot;<br /><br />uint8_t  ok_flag , esc_flag;<br />volatile uint8_t encoder_left_flag, encoder_right_flag ;<br /><br />void (*encoder_left_callback)(void);//wskazniki na callbacki<br />void (*encoder_right_callback)(void);<br />void (*ok_callback)(void);<br />void (*esc_callback)(void);<br /><br /><br />void encoder_init(void)<br />{<br />        //GPIO<br /><br /> ENCODER_DIR &amp;= ~(ENCODER_OUT1|ENCODER_OUT2);//in<br /> ENCODER_PORT |= (ENCODER_OUT1|ENCODER_OUT2);//pu<br /><br />// DDRB &amp;= ~(1&lt;&lt;PB0);<br />// DDRC &amp;= ~(1&lt;&lt;PC7);<br /><br /> PORTB |= OK;<br /> PORTC |= Esc;<br /><br />        //INT2<br /><br />        EICRA =  _BV(ISC21);          //external interrupt on falling edge<br />        EIFR = _BV(INTF2);           //clear the interrupt flag (setting ISCnn can cause an interrupt)<br />        EIMSK = _BV(INT2);           //enable external interrupt<br /><br />        DDRA |= BUZER;<br />        BUZER_OFF;<br />        _delay_ms(10);<br />}<br /><br />void encoder_event(void)<br />{<br />        if(encoder_left_flag)<br />        {<br />                if(encoder_left_callback) encoder_left_callback();<br />                encoder_left_flag = 0;<br />        }<br />        if(encoder_right_flag)<br />        {<br />                if(encoder_right_callback) encoder_right_callback();<br />                encoder_right_flag = 0;<br />        }<br />        if( !ok_flag &amp;&amp; !(PINB &amp; OK ))<br />        {<br />        ok_flag=1;<br />        if(ok_callback) ok_callback();<br /><br />        }else if( ok_flag &amp;&amp; (PINB &amp; OK ) ) ok_flag++;<br /><br />        if( !esc_flag &amp;&amp; !(PINC &amp; Esc ))<br />        {<br />        esc_flag=1;<br />        if(esc_callback) esc_callback();<br /><br />        }else if( esc_flag &amp;&amp; (PINC &amp; Esc ) ) esc_flag++;<br /><br />}<br /><br />void register_encoder_left_callback(void *callback_fun)//parametrem jest adres mojego cb<br />{<br />        encoder_left_callback = callback_fun;//przekazuje adres funkcji<br />}<br /><br />void register_encoder_right_callback(void *callback_fun)//parametrem jest adres mojego cb<br />{<br />        encoder_right_callback = callback_fun;//przekazuje adres funkcji<br />}<br /><br />void register_ok_callback(void *callback_fun)//parametrem jest adres mojego cb<br />{<br />        ok_callback = callback_fun;//przekazuje adres funkcji<br />}<br /><br />void register_esc_callback(void *callback_fun)//parametrem jest adres mojego cb<br />{<br />        esc_callback = callback_fun;//przekazuje adres funkcji<br />}<br /><br /><br />ISR(INT2_vect)<br />{<br /> if(!(ENCODER_PIN&amp;ENCODER_OUT1)) encoder_right_flag = 1;<br /> else encoder_left_flag = 1;<br />}[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 4 minutach ]</span></strong><br /><br />[img]<br /><a href="https://obrazkiforum.atnel.pl/5414/2a1bd1031008c10a968830c713304ed2.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/5414/2a1bd1031008c10a968830c713304ed2.png" alt="Obrazek" /></a><br />[/img]<br /><br />Encoder jest podłączony do atmegi644.<br />Jako sam encoder działa rewelacyjnie.<br />Problem zaczyna się jak włączę klawisz na sąsiednim pinie.<br /><br /><br />[syntax=c]/*<br /> * encoder.h<br /> *<br /> *  Created on: 20 mar 2015<br /> *      Author: User<br /> */<br /><br />#ifndef ENCODER_ENCODER_H_<br />#define ENCODER_ENCODER_H_<br /><br /><br />#define ENCODER_DIR DDRB<br />#define ENCODER_PORT PORTB<br />#define ENCODER_PIN PINB<br />#define ENCODER_OUT1 (1&lt;&lt;PB1)<br />#define ENCODER_OUT2 (1&lt;&lt;PB2)<br /><br />#define OK (1&lt;&lt;PB0)<br />#define Esc (1&lt;&lt;PC7)<br /><br /><br />//************************  buzer  ********************************<br />#define BUZER (1&lt;&lt;PD6)<br />#define BUZER_ON PORTD |= BUZER<br />#define BUZER_OFF PORTD  &amp;= ~BUZER<br />#define BUZER_MRUG PORTD ^= BUZER<br /><br /><br /><br />extern volatile uint8_t encoder_left_flag, encoder_right_flag ;<br />extern uint8_t  ok_flag , esc_flag;<br />void encoder_init(void);<br />void encoder_event(void);<br />void register_encoder_left_callback(void *callback_fun);<br />void register_encoder_right_callback(void *callback_fun);<br />void register_ok_callback(void *callback_fun);<br />void register_esc_callback(void *callback_fun);[/syntax]<br />[syntax=c]/*<br /> * encoder.c<br /> *<br /> *  Created on: 20 mar 2015<br /> *      Author: User<br /> */<br />#include&lt;avr/io.h&gt;<br />#include&lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />#include&quot;encoder.h&quot;<br />#include&quot;../PROGRAM/program.h&quot;<br /><br />uint8_t  ok_flag , esc_flag;<br />volatile uint8_t encoder_left_flag, encoder_right_flag ;<br /><br />void (*encoder_left_callback)(void);//wskazniki na callbacki<br />void (*encoder_right_callback)(void);<br />void (*ok_callback)(void);<br />void (*esc_callback)(void);<br /><br /><br />void encoder_init(void)<br />{<br />        //GPIO<br /><br /> ENCODER_DIR &amp;= ~(ENCODER_OUT1|ENCODER_OUT2);//in<br /> ENCODER_PORT |= (ENCODER_OUT1|ENCODER_OUT2);//pu<br /><br />// DDRB &amp;= ~(1&lt;&lt;PB0);<br />// DDRC &amp;= ~(1&lt;&lt;PC7);<br /><br /> PORTB |= OK;<br /> PORTC |= Esc;<br /><br />        //INT2<br /><br />        EICRA =  _BV(ISC21);          //external interrupt on falling edge<br />        EIFR = _BV(INTF2);           //clear the interrupt flag (setting ISCnn can cause an interrupt)<br />        EIMSK = _BV(INT2);           //enable external interrupt<br /><br />        DDRA |= BUZER;<br />        BUZER_OFF;<br />        _delay_ms(10);<br />}<br /><br />void encoder_event(void)<br />{<br />        if(encoder_left_flag)<br />        {<br />                if(encoder_left_callback) encoder_left_callback();<br />                encoder_left_flag = 0;<br />        }<br />        if(encoder_right_flag)<br />        {<br />                if(encoder_right_callback) encoder_right_callback();<br />                encoder_right_flag = 0;<br />        }<br />        if( !ok_flag &amp;&amp; !(PINB &amp; OK ))<br />        {<br />        ok_flag=1;<br />        if(ok_callback) ok_callback();<br /><br />        }else if( ok_flag &amp;&amp; (PINB &amp; OK ) ) ok_flag++;<br /><br />        if( !esc_flag &amp;&amp; !(PINC &amp; Esc ))<br />        {<br />        esc_flag=1;<br />        if(esc_callback) esc_callback();<br /><br />        }else if( esc_flag &amp;&amp; (PINC &amp; Esc ) ) esc_flag++;<br /><br />}<br /><br />void register_encoder_left_callback(void *callback_fun)//parametrem jest adres mojego cb<br />{<br />        encoder_left_callback = callback_fun;//przekazuje adres funkcji<br />}<br /><br />void register_encoder_right_callback(void *callback_fun)//parametrem jest adres mojego cb<br />{<br />        encoder_right_callback = callback_fun;//przekazuje adres funkcji<br />}<br /><br />void register_ok_callback(void *callback_fun)//parametrem jest adres mojego cb<br />{<br />        ok_callback = callback_fun;//przekazuje adres funkcji<br />}<br /><br />void register_esc_callback(void *callback_fun)//parametrem jest adres mojego cb<br />{<br />        esc_callback = callback_fun;//przekazuje adres funkcji<br />}<br /><br /><br />ISR(INT2_vect)<br />{<br /> if(!(ENCODER_PIN&amp;ENCODER_OUT1)) encoder_right_flag = 1;<br /> else encoder_left_flag = 1;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5414">jumar000</a> — 17 sie 2015, o 20:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-08-17T20:23:40+01:00</updated>
<published>2015-08-17T20:23:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=137663#p137663</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=137663#p137663"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=137663#p137663"><![CDATA[
<div class="quotetitle">jumar000 napisał(a):</div><div class="quotecontent"><br />Witam! Mam mały problem z  encoderem, mam podłączonego tak jak na schemacie plus klawisz na PINB0, jak przekręcam encoderem to wtedy uruchamia mi funkcje klawisza. Na PINB3 to samo, dopiero na PINB4 niema tego zjawiska, z góry dziękuje za pomoc.<br /></div><br />No to coś źle podłączasz - czyli nie masz tak jak na schemacie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 17 sie 2015, o 20:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jumar000]]></name></author>
<updated>2015-08-17T20:20:29+01:00</updated>
<published>2015-08-17T20:20:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=137661#p137661</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=137661#p137661"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=137661#p137661"><![CDATA[
Witam! Mam mały problem z  encoderem, mam podłączonego tak jak na schemacie plus klawisz na PINB0, jak przekręcam encoderem to wtedy uruchamia mi funkcje klawisza. Na PINB3 to samo, dopiero na PINB4 niema tego zjawiska, z góry dziękuje za pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5414">jumar000</a> — 17 sie 2015, o 20:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ursmar]]></name></author>
<updated>2014-01-20T20:20:31+01:00</updated>
<published>2014-01-20T20:20:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=65880#p65880</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=65880#p65880"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=65880#p65880"><![CDATA[
Ad 1.<br />Pomogła zmiana w w funkcji bliblioteki LCD odpowiedzialnej za wyświetlanie liczby dziesiętnej z słowa itoa na ltoa<br />[syntax=c]void lcd_int(int32_t val)// zmiana na int32_t !!!!!!!!!!!!!!<br />{<br />char bufor&#91;17&#93;;<br />//lcd_str( itoa(val, bufor, 10) );<br />lcd_str( ltoa(val, bufor, 10) );// zmiana na ltoa !!!!!!!!!!!!!<br />}[/syntax]<br /> <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Ad 2.<br />dalej nie wiem...  <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />  wiec na razie dzialam bez tych kondensatorków 100 nF<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=716">ursmar</a> — 20 sty 2014, o 20:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ursmar]]></name></author>
<updated>2014-01-19T04:21:11+01:00</updated>
<published>2014-01-19T04:21:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=65565#p65565</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=65565#p65565"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=65565#p65565"><![CDATA[
Witam,<br /><br />mam takie pytania,<br />1) która zmienna odpowiada za wyświetlanie wartości impulsów na ekranie LCD?<br />Mój enkoder musi zliczyć ponad 33000 impulsów i niestety wartości przeskakują po 32276 na -32768.<br />Próbowałem zmieniać typ zmiennych w plikach enkodera i nic to nie zmieniało zawsze po przejściu 32276 przeskok na -32768.<br />Być może jest to kwestia funkcji wyświetlania na LCD?<br />[syntax=c]void lcd_int(int val);[/syntax]<br />ale tutaj też próbowałem zmieniać na int32_t i dalej to samo z zakresem kończącym się na 32276.<br /><br />w main.c jest lcd_event()<br />[syntax=c]void lcd_event(void)<br />{<br />        if(!lcd_flag)<br />        {<br />                LCD_locate(0,0);<br />                LCD_string(&quot;Volume: &quot;);<br />                LCD_int(volume);//testowa prezentacja zmiennej<br />                LCD_string(&quot;  &quot;);<br />                lcd_flag = 10;<br />        }<br />}[/syntax]<br /><br />jedyne co mi przychodzi do głowy to tylko:<br />volume,<br />i funkcja lcd_int.<br /><br />Niestety nie wiem czemu się tak dzieje, dlatego proszę o wskazanie, której zmiennej typ ogranicza tą wyświetlaną wartość na LCD 2x16?<br /><br /><br />2) Niepojęta dla mnie sytuacja :0<br />dlaczego gdy dołożę te dwa kondensatory jak na schemacie enkoder zachowuje się tak jakby nie rozpoznawał kierunku. tzn. w obie strony zlicza impulsy np. zwiększając wartości, albo w obie zmniejszając. Gdy wyciągnę jeden kondensator, a drugi pozostawię wsadzony jest ok, kierunki są rozpoznane i zlicza zwiększając wartości w jedną ze stron, a w drugą przeciwnie tzn. zmniejszając.<br />Bez obu kondensatorów, też jest poprawnie wykonywana operacja zliczania ale chyba jedynie pod względem kierunku, bo dokładniej jest z tymi kondensatorami. Tylko co to za zjawisko, że kondensator taką zmianę wprowadza?<br /><br />--------------------------<br />Sam enkoder to taki model:<br /><strong>MOZ 30 500 5 BZ K</strong><br /><a href="http://www.einformatyka.pl/wobitcompl/download/pdf/przetworniki/moz30de.pdf"  class="postlink">Nota 1. PL</a><br /><a href="http://www.p3america.com/pp/pdfs/moz30.PDF"  class="postlink">Nota 2. ENG</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=716">ursmar</a> — 19 sty 2014, o 04:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[aaadamw]]></name></author>
<updated>2013-07-10T14:41:11+01:00</updated>
<published>2013-07-10T14:41:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=41289#p41289</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=41289#p41289"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=41289#p41289"><![CDATA[
Działa to bardzo fajnie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=360">aaadamw</a> — 10 lip 2013, o 14:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-07-04T15:21:14+01:00</updated>
<published>2013-07-04T15:21:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=40823#p40823</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=40823#p40823"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=40823#p40823"><![CDATA[
<div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />Sam sie dziwię, że to działa, bo na logike nie powinno.<br /></div><br /><br />Powinno powinno <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />Tzn. powinno działać poprawnie w jedną stronę.<br /></div><br /><br />Nie nie - na pewno w dwie strony.<br /><br /><div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />Mirku, Może po prostu przetestuj to u siebie w wolnej chwili na dowolnym encoderze i z proponowaną przeze mnie aplikacją.<br /></div><br /><br />Właśnie przetestowałem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />Czy mechanizm flag zastosowany jest słusznie?<br /></div><br /><br />pewnie, że tak - korzystanie z callbacków jest proste jak drut a takie przykłady pomagają ludziom to zrozumieć - potem nikt nie będzie się ich bał jak jeża. Pewnie że można bez nich .... ale co z tego ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... można i w ogóle bez mikrokontrolera jak się uprzeć gdyby iść tym tropem<br /><br />a teraz wyjaśnienie - bo bo moja uwaga oczywiście była niesłuszna a wniosek wyciągnięty tylko po rzuceniu okiem :<br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Tutaj o ile się nie mylę wszystko zależy od:<br /></div><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />czyli od jednego wyjścia ??? ... albo coś za szybko rzuciłem okiem albo to może okazać się zawodne w wielu sytuacjach<br /></div><br /><br />oczywiście, że nie zależy od jednego wyjścia enkodera <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> bez DWÓCH się nie obędzie i nie mogłoby to działać. Po prostu jedno zgłasza przerwanie a w przerwaniu badamy stan drugiego i jeśli jest 1 to kerunek X a jeśli jest 0 to kierunek Y<br /><br />najprostsza z możliwych implementacji i sam choć zapomniałem - to jak zaczynałem walkę z enkoderem też ją przeszedłem no ale przeskakiwały wartości okrutnie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... tylko że wtedy zapomniałem kondensatorów dać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ..... <br /><br />Tymczasem ta metoda którą kiedyś jako pierwszy podał nasz Sun a ja potem jeszcze troszkę ją pozmieniałem i zaprezentowałem jako że uwzględnia kodowanie greya to może się obejść nawet bez kondków i działa precyzyjnie - choć jest coś za coś - tracimy jeden timer niestety.<br /><br />Reasumując po dodaniu kondków rzeczywiście tą metodę można spokojnie wykorzystywać - tylko skoro już jesteśmy przy zdarzeniach , callbackach itp to warto zwrócić uwagę na fakt że jeśli w przerwaniu mielibyśmy TYLKO ustawiać jakąś jedną flagę i nic innego nie robić albo tak jak w przerwaniu INT2 tylko badać stan jednego pinu to jednak kod można ZNACZNIE uprościć tak aby był bez przerwań tzn tfuuu bez procedur obsługi przerwań no bo przecież można korzystać ze sprzętowych flag przerwania. Tak więc np to co jest w INT2 przenieść wprost do ENCODER_EVENT() <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... zrezygnować z flag opatrzonych volatile <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... zresztą proszę jak niżej ... ta uproszczona wersja kodu choć nadal zawiera pełną funkcjonalność callbacków to jednak zabiera mniej i RAM i FLASH <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... warto to podejrzeć ... i dokładnie na takiej samej zasadzie zmodyfikować sobie twój LCD_EVENT() ... identycznie:<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/486/4eea3ca23d1eb2d78f1f17f790b14d68.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/486/4eea3ca23d1eb2d78f1f17f790b14d68.png" alt="Obrazek" /></a><br />[syntax=c]/*<br /> * encoder.c<br /> *<br /> *  Created on: 01-06-2013<br /> *      Author: Arek<br /> */<br />#include&lt;avr/io.h&gt;<br />#include&lt;avr/interrupt.h&gt;<br />#include&quot;encoder.h&quot;<br /><br />//volatile uint8_t encoder_left_flag, encoder_right_flag;<br /><br />void (*encoder_left_callback)(void);//wskazniki na callbacki<br />void (*encoder_right_callback)(void);<br /><br />void hard_init(void);<br />void encoder_event(void);<br /><br />void register_encoder_left_callback(void *callback_fun);<br />void register_encoder_right_callback(void *callback_fun);<br /><br />void hard_init(void)<br />{<br />        //GPIO<br />        ENCODER_DIR &amp;= ~(ENCODER_OUT1|ENCODER_OUT2);//in<br />        ENCODER_PORT |= (ENCODER_OUT1|ENCODER_OUT2);//pu<br />        //INT2<br />        MCUCSR &amp;= ~(1&lt;&lt;ISC2);//falling<br />//        GICR |= (1&lt;&lt;INT2);<br />}<br /><br />void encoder_event(void)<br />{<br />        //*********** MODYFIKACJA - mirekk36 **********************      <br />if( GIFR &amp; (1&lt;&lt;INTF2) ) {<br />if(!(ENCODER_PIN&amp;ENCODER_OUT1)) encoder_right_callback();<br />else encoder_left_callback();<br />GIFR = (1&lt;&lt;INTF2);<br />}<br />}<br /><br />void register_encoder_left_callback(void *callback_fun)//parametrem jest adres mojego cb<br />{<br />        encoder_left_callback = callback_fun;//przekazuje adres funkcji<br />}<br /><br />void register_encoder_right_callback(void *callback_fun)//parametrem jest adres mojego cb<br />{<br />        encoder_right_callback = callback_fun;//przekazuje adres funkcji<br />}<br /><br />//ISR(INT2_vect)<br />//{<br />//        if(!(ENCODER_PIN&amp;ENCODER_OUT1)) encoder_right_flag = 1;<br />//        else encoder_left_flag = 1;<br />//}[/syntax]<br /><br />specjalnie zakomentowałem to co zostało uproszczone i wywalone z kodu.<br /><br />REASUMUJĄC - w zależności od potrzeb projektu i potrzebnej precyzji a tym bardziej gdy mamy leżące odłogiem timery można korzystać z tej metody z kodem greya i timerem<br /><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 /><br />a w innych przypadkach - chyba nawet w większości przypadków, można korzystać z tej metody - opisanej w tym wątku <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Myślę że tym sposobem wyjaśniliśmy na naszym forum chyba WSZYSTKIE ważne aspekty obsługi popularnych enkoderków.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 lip 2013, o 15:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Paul Dirac]]></name></author>
<updated>2013-07-03T18:49:39+01:00</updated>
<published>2013-07-03T18:49:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=40761#p40761</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=40761#p40761"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=40761#p40761"><![CDATA[
No anty fajny program. Mi udało się dziś zasymulować cos na wzór list dwukierunkowych włąsnie z wykorzystaiem enkodera i lcd 4x16.<br /><br />Szybko łapiesz to co przekazuje mirek - szacun. Ja tam zawsze musze przespać sie atakując coś nowego.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1035">Paul Dirac</a> — 3 lip 2013, o 18:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sonix]]></name></author>
<updated>2013-06-01T21:16:17+01:00</updated>
<published>2013-06-01T21:16:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=38303#p38303</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=38303#p38303"/>
<title type="html"><![CDATA[Re: Prosty sposób na encoder]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3241&amp;p=38303#p38303"><![CDATA[
<div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />Umiejętności z czasem nadejdą. Na razie usiłuję raczkować <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br /><br />Anty... jeżeli Ty raczkujesz to mnie jeszcze w planach nie ma.....  <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=127">Sonix</a> — 1 cze 2013, o 21:16</p><hr />
]]></content>
</entry>
</feed>