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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-06-29T11:32:55+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=18703&amp;mode</id>
<entry>
<author><name><![CDATA[m_wojcik74]]></name></author>
<updated>2017-06-29T11:32:55+01:00</updated>
<published>2017-06-29T11:32:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191450#p191450</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191450#p191450"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191450#p191450"><![CDATA[
Okej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> teraz rozumiem. Dziękuje <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=863">m_wojcik74</a> — 29 cze 2017, o 11:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2017-06-29T10:10:29+01:00</updated>
<published>2017-06-29T10:10:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191442#p191442</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191442#p191442"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191442#p191442"><![CDATA[
<div class="quotetitle">m_wojcik74 napisał(a):</div><div class="quotecontent"><br />...w jaki sposób się zabezpieczyłeś przed nieoczekiwanymi sytuacjami jak właśnie tą którą opisałem wyżej czyli, gdy zmienią się zbocza z obydwu enkoderów w jednym czasie...<br /></div><br />W ostatnich projektach impulsy lecą z maksymalną częstotliwością 1kHz, przerwania taktuję 10kHz tak więc przynajmniej 10x gęściej niż sygnał...<br /><div class="quotetitle">m_wojcik74 napisał(a):</div><div class="quotecontent"><br />...liczysz na to że te sygnały nigdy siebie wzajemnie nie wpłyną bo częstotliwość próbkowania (czyli sprawdzani stanów enkoderów w przerwaniu) jest na bardzo duża?<br /></div><br />Ja na to nie liczę... ja to wiem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Sygnały z wejść badane są cyklicznie bez zatrzymywania się nawet na chwilkę. Mogę w ten sposób nawet kilka enkoderów sprawdzić/zliczyć/itd. co zajmie najwyżej kilkadziesiąt us w przerwaniach po czym wykonają się tam jeszcze inne ważne rzeczy i zostanie jeszcze czas na funkcję w pętli głównej programu poza przerwaniami. Podstawowa zasada to NIE CZEKAĆ tylko sprawdzać ewentualnie coś szybko wykonać/odhaczyć i lecieć dalej <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=1922">SylwekK</a> — 29 cze 2017, o 10:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[m_wojcik74]]></name></author>
<updated>2017-06-29T05:37:05+01:00</updated>
<published>2017-06-29T05:37:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191434#p191434</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191434#p191434"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191434#p191434"><![CDATA[
<div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br />Jak już wspomniałem ja badam KAŻDĄ zmianę zbocza a nie tylko narastające lub opadające. Prawdę mówiąc takie rozwiązanie nie dość, że jest dla mnie lepsze, bo mam większą rozdzielczość enkodera to na dodatek paradoksalnie sama obsługa jest duuużo prostsza i zajmuje mniej bajtów przez co w przerwaniach śmiga aż miło nie zajmując dużo czasu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Nie podam Ci gotowego rozwiązania, bo to moje autorskie choć pewnie jak to z algorytmami bywa nie tylko ja na takie wpadłem, ale póki co jeszcze nie zauważyłem go w innych programach więc niech tak na razie zostanie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />.<br /></div><br /><br />Jeśli chodzi o gotowe rozwiązanie to jak widzisz, sam próbuje coś rzeźbić, dlatego o nie nie proszę. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Pytałem tylko o pewne szczegóły w jaki sposób się zabezpieczyłeś przed nieoczekiwanymi sytuacjami jak właśnie tą którą opisałem wyżej czyli, gdy zmienią się zbocza z obydwu enkoderów w jednym czasie. Czy mam rozumieć że po prostu wykorzystujesz:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />[...]i zajmuje mniej bajtów przez co w przerwaniach śmiga aż miło nie zajmując dużo czasu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br />I liczysz na to że te sygnały nigdy siebie wzajemnie nie wpłyną bo częstotliwość próbkowania (czyli sprawdzani stanów enkoderów w przerwaniu) jest na bardzo duża?<br />Żeby wykrywać zbocze trzeba przeanalizować fakt czy najpierw był stan niski później wysoki, lub na odwrót. Przy pomocy PINx inaczej się nie da. Czy w Twoim wypadku, pojedyncze przerwanie pozwala na wykrycie CAŁEGO zbocza, czy powiedzmy musi nastąpić kilka przerwań żeby to zbocze wykryć, jeśli silnik kręci się bardzo powoli, a przerwanie od timera ma dużą częstotliwość. To pytanie zadaje też, żeby się upewnić czy w Twoim rozwiązaniu wziąłeś pod uwagę zmienne obroty silnika. Bo nie sztuką jest dobrać częstotliwość timera do silnika który obraca się ciągle z tą samą prędkością.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=863">m_wojcik74</a> — 29 cze 2017, o 05:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2017-06-28T22:27:47+01:00</updated>
<published>2017-06-28T22:27:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191430#p191430</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191430#p191430"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191430#p191430"><![CDATA[
Jak już wspomniałem ja badam KAŻDĄ zmianę zbocza a nie tylko narastające lub opadające. Prawdę mówiąc takie rozwiązanie nie dość, że jest dla mnie lepsze, bo mam większą rozdzielczość enkodera to na dodatek paradoksalnie sama obsługa jest duuużo prostsza i zajmuje mniej bajtów przez co w przerwaniach śmiga aż miło nie zajmując dużo czasu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Nie podam Ci gotowego rozwiązania, bo to moje autorskie choć pewnie jak to z algorytmami bywa nie tylko ja na takie wpadłem, ale póki co jeszcze nie zauważyłem go w innych programach więc niech tak na razie zostanie <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=1922">SylwekK</a> — 28 cze 2017, o 22:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[m_wojcik74]]></name></author>
<updated>2017-06-28T21:26:01+01:00</updated>
<published>2017-06-28T21:26:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191425#p191425</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191425#p191425"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191425#p191425"><![CDATA[
<div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br />Hehe, no to już znasz jeden z powodów dlaczego nie używam do enkoderów przerwań INT <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Ogólnie fragment zliczający powinien znaleźć się w przerwaniach żeby nic nie przeszkodziło w dostawie impulsów ustawionych stosownie do prędkości nadchodzącego sygnału (co najmniej dwa razy większe taktowanie niż max częstotliwość przychodzących impulsów) . Normalnie takie liczenie załatwia się dosłownie kilkoma linijkami kodu, a u ciebie jeszcze spory chaos w programie, ale ćwicz, kombinuj i testuj różne algorytmy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br /><br />Rozumiem że to co u mnie jest w pętli głównej u Ciebie lata w przerwaniu od timera. A wspominałeś też że robisz to dla kilku silników. Jak się uchroniłeś przed tym, że gdy dla jednego enkodera uC czeka na zbocze narastające, w tym momencie przychodzi zbocze opadające od innego enkodera i żeby impuls poprawnie zliczyć? W przerwaniach INT to jest oczywiste, bo każde przerwanie ma swój priorytet a i tak prędzej czy później zostanie wykonane, a za pomocą sprawdzania stanu linii?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=863">m_wojcik74</a> — 28 cze 2017, o 21:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2017-06-28T20:52:17+01:00</updated>
<published>2017-06-28T20:52:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191422#p191422</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191422#p191422"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191422#p191422"><![CDATA[
Hehe, no to już znasz jeden z powodów dlaczego nie używam do enkoderów przerwań INT <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Ogólnie fragment zliczający powinien znaleźć się w przerwaniach żeby nic nie przeszkodziło w dostawie impulsów ustawionych stosownie do prędkości nadchodzącego sygnału (co najmniej dwa razy większe taktowanie niż max częstotliwość przychodzących impulsów) . Normalnie takie liczenie załatwia się dosłownie kilkoma linijkami kodu, a u ciebie jeszcze spory chaos w programie, ale ćwicz, kombinuj i testuj różne algorytmy <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=1922">SylwekK</a> — 28 cze 2017, o 20:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[m_wojcik74]]></name></author>
<updated>2017-06-28T14:01:55+01:00</updated>
<published>2017-06-28T14:01:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191395#p191395</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191395#p191395"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191395#p191395"><![CDATA[
<div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">m_wojcik74 napisał(a):</div><div class="quotecontent">no tak ale przerwanie działa na zbocze, więc to też zmiana stanu<br /></div><br /><br />No nie wiem, może i tak, nawet mi się nie chce teraz nad tym zastanawiać prawdę mówiąc <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Do takich celów jak enkodery nigdy nie używam wejść INT, bo mam wrażenie (w mojej ocenie) że nie mam nad nimi pełnej kontroli, natomiast kiedy robię własną obsługę to wiem, że nie ma mowy o pomyłce w zliczeniach. U ciebie najprawdopodobniej występuje błąd nadmiarowy połączony z badaniem pojedynczego zbocza. Ja kiedy liczę impulsy i zaliczy na minus (bezwładność silnika) to przy ruchu w drugą stronę są one najpierw odliczane i dopiero doliczane to co ma być faktycznie policzone. Być może błędem u Ciebie jest twardy warunek że ma policzyć 50 przez co gdy zrobi się nadmiar bezwładnościowy np. 3-4 impulsy to nie są one już uwzględniane tylko po wyzerowaniu licznika zlicza 50 przez co masz docelowo od tej wartości (czyli nieuwzględnionego, np. &quot;-4&quot; impulsów) tak naprawdę doliczone do 46 mimo, że licznik wskazuje 50. Myślę, że wiesz o co mi chodzi.</div><br /><br /><br />U mnie nie ma mowy o bezwładności silnika, na filmie z pierwszego postu to widać. <br />Zrobiłem tak jak mówisz, zamiast przerwania zewnętrznego naskrobałem na szybko program który ma obsługiwać to tak jak przycisk. I co ciekawe, działa <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Ja rozumiem że to przerwanie zewnętrzne może nie działać z przyciskami bo drgania styków itd, ale tutaj jest sytuacja jednoznaczna więc byłem pewien że to będzie skuteczna metoda... <br /><br />Dziękuję za pomoc, oczywiście leci &quot;pomógł&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Dla potomnych zostawiam kod, musicie wybaczyć styl pisania, chciałem tylko sprawdzić czy to dobra droga dlatego pisałem żeby jak najszybciej to uruchomić. <br />[syntax=c]#include &lt;util/delay.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#define KROKI 4<br /><br /><br /><br /><br /><br /><br /><br />int main(){<br /><br /><br />DDRB = 0xff;<br />PORTB = 0x00;<br /><br />DDRD &amp;= ~(1&lt;&lt;PD2);<br />PORTD |= (1&lt;&lt;PD2);<br /><br />int licznik_prawo=0, flag=1;<br /><br /><br />//petla główna<br />while(1){<br /><br /><br /><br />if(flag==1){ //jesli flaga =1<br /><br />PORTB ^=(1&lt;&lt;PB1); // wlacza prawe obroty<br /><br />while(1){<br /><br />if(!(PIND &amp; (1&lt;&lt;PD2))){   //czeka w petli na zbocze opadajace<br /><br />while(1){<br />if((PIND &amp; (1&lt;&lt;PD2))){//czeka w petli na zbocze narasające<br />licznik_prawo++; //inkrementuje licznik i wychodzi z petli<br />break;<br />}<br />}<br />}<br /><br />if(licznik_prawo==KROKI) { //sprawdza czy został osiagniety prog licznika<br />PORTB ^=(1&lt;&lt;PB1); //jesli tak wylacza silnik, zeruje flage i czeka 300ms<br />_delay_ms(300);<br />flag=0;<br />break;<br />}<br /><br /><br />}<br />}<br /><br />if(flag==0){ //jesli flaga =0<br /><br />PORTB ^=(1&lt;&lt;PB2); // wlacza lewe obroty<br /><br />while(1){<br /><br />if(!(PIND &amp; (1&lt;&lt;PD2))){   //czeka w petli na zbocze opadajace<br /><br />while(1){<br />if((PIND &amp; (1&lt;&lt;PD2))){//czeka w petli na zbocze narasające<br />licznik_prawo--; //dekrementuje licznik i wychodzi z petli<br />break;<br />}<br />}<br />}<br /><br />if(licznik_prawo==0) { //sprawdza czy został wyzerowany licznik<br />PORTB ^=(1&lt;&lt;PB2); //jesli tak wylacza silnik, ustawia flage i czeka 300ms<br />_delay_ms(300);<br />flag=1;<br />break;<br />}<br /><br /><br />}<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=863">m_wojcik74</a> — 28 cze 2017, o 14:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2017-06-28T13:06:22+01:00</updated>
<published>2017-06-28T13:06:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191384#p191384</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191384#p191384"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191384#p191384"><![CDATA[
<div class="quotetitle">m_wojcik74 napisał(a):</div><div class="quotecontent"><br />no tak ale przerwanie działa na zbocze, więc to też zmiana stanu<br /></div><br /><br />No nie wiem, może i tak, nawet mi się nie chce teraz nad tym zastanawiać prawdę mówiąc <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Do takich celów jak enkodery nigdy nie używam wejść INT, bo mam wrażenie (w mojej ocenie) że nie mam nad nimi pełnej kontroli, natomiast kiedy robię własną obsługę to wiem, że nie ma mowy o pomyłce w zliczeniach. U ciebie najprawdopodobniej występuje błąd nadmiarowy połączony z badaniem pojedynczego zbocza. Ja kiedy liczę impulsy i zaliczy na minus (bezwładność silnika) to przy ruchu w drugą stronę są one najpierw odliczane i dopiero doliczane to co ma być faktycznie policzone. Być może błędem u Ciebie jest twardy warunek że ma policzyć 50 przez co gdy zrobi się nadmiar bezwładnościowy np. 3-4 impulsy to nie są one już uwzględniane tylko po wyzerowaniu licznika zlicza 50 przez co masz docelowo od tej wartości (czyli nieuwzględnionego, np. &quot;-4&quot; impulsów) tak naprawdę doliczone do 46 mimo, że licznik wskazuje 50. Myślę, że wiesz o co mi chodzi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 28 cze 2017, o 13:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[m_wojcik74]]></name></author>
<updated>2017-06-28T12:50:22+01:00</updated>
<published>2017-06-28T12:50:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191382#p191382</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191382#p191382"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191382#p191382"><![CDATA[
<div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br />bo jeśli coś da stan wysoki to musi nastąpić też stan niski<br /></div><br /><br />no tak ale przerwanie działa na zbocze, więc to też zmiana stanu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Zrobiłem nowy enkoder, + przebiegi, nadal jest to samo, widać po przebiegach że czasem zliczy dwa impulsy i nastąpi zmiana kierunku a czasem 4. Jeden przebieg jest z fototranzystora a drugi z bramki Schmitta. Wychodzi na to że mikrokontroler dostaje jakieś &quot;lewe&quot; sygnały i je traktuje jak te z enkodera. :/<br /><a href="https://obrazkiforum.atnel.pl/863/da9ebf5e5f9e4f7a03f552e5a0542df7.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/863/da9ebf5e5f9e4f7a03f552e5a0542df7.jpg" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/863/9a42c755937ed045f0ff88217af0a19b.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/863/9a42c755937ed045f0ff88217af0a19b.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=863">m_wojcik74</a> — 28 cze 2017, o 12:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2017-06-28T11:56:00+01:00</updated>
<published>2017-06-28T11:56:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191377#p191377</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191377#p191377"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191377#p191377"><![CDATA[
Największy problem jest z tym pojedynczym okienkiem. Wyrwal całą ćwiartkę tego koła i zobacz czy się nadal będzie mylił. Poza tym liczenie zmian stanu jest bezpieczniejsze i bardziej odporne na zakłócenia, bo jeśli coś da stan wysoki to musi nastąpić też stan niski i łatwiej to skompensować. A najlepiej jak byś normalnie śmigło zrobił np. 4 łopatki i liczył zmiany stanu wtedy nie m mocnych żeby jakaś pomyłka była. Tylko wynik x8 bo 8 zmian będzie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 28 cze 2017, o 11:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[m_wojcik74]]></name></author>
<updated>2017-06-28T11:32:09+01:00</updated>
<published>2017-06-28T11:32:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191376#p191376</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191376#p191376"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191376#p191376"><![CDATA[
Niestety to nie pomogło :/ w dalszym ciągu są błędy. co prawda układ uruchomiłem z 15 min po moim ostatnim poście, aż do teraz błąd wyniósł ok 0,5cm, ale to dość sporo zważywszy że w normalnej pracy układ miał działać ze śrubą o większym skoku więc to będzie znacząca róźnica.<br /><br />Zrobiłem jeszcze film tak żeby układ robił jeden obrót w lewo i jeden w prawo, tutaj widać najlepiej że są błędy :/ na filmie gubi się 3 razy i 3 razy robi po dwa obroty w jedną stronę, zamiast naprzemiennie. <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=863">m_wojcik74</a> — 28 cze 2017, o 11:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2017-06-28T10:25:55+01:00</updated>
<published>2017-06-28T10:25:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191375#p191375</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191375#p191375"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191375#p191375"><![CDATA[
No ciekaw jestem czy coś Ci się poprawi <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />A przy okazji... czy nie bardziej podobał by Ci się poniższy zapis twoich przerwań (robi dokładnie to samo):<br /><br />[syntax=c]ISR(INT0_vect)<br />{<br />  if(flag) licznik_prawo++; else licznik_prawo--;  <br />}[/syntax]<br /><br /><br /><div class="quotetitle">m_wojcik74 napisał(a):</div><div class="quotecontent"><br />Czy dobrze rozumiem, że skoro nie podajesz sygnału na INT to w takim razie używasz zwykłej linii portu i sprawdzasz jej stan przy pomocy PINx? A impulsy zliczasz w przerwaniu?<br /></div><br /><br />Dokładnie tak. Za dużo mam różnych sygnałów do zliczania i rygory czasowe żeby jeszcze inne przerwania przerywały mi to co i tak bez problemu mogę policzyć w zwykły sposób <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Dodatkowo dla zwiększenia rozdzielczości zliczam zawszę zmianę stanu przy liczeniu obrotów dzięki temu mam dwa razy więcej impulsów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 28 cze 2017, o 10:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[m_wojcik74]]></name></author>
<updated>2017-06-28T10:10:35+01:00</updated>
<published>2017-06-28T10:10:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191374#p191374</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191374#p191374"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191374#p191374"><![CDATA[
<div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br />Proponuje podłączyć lcd i wyświetlać stan na bieżąco, tylko zmniejsz trochę prędkość aby widzieć ten stan. Ogólnie mnie się nie podoba twój sposób zliczania. Błędny już z założenia... Ja to robię w swoich projektach bez zerowania licznika głównego (u Ciebie to ten w przerwaniu int). Flagę rozpoznawał bym już w przerwaniu i w zależności od jej stanu następuje zwiększanie lub zmniejszanie licznika. Chodzi o bezwładność, która będzie się nawarstwiać.<br /></div><br /><br />Poprawiłem zgodnie z tym co zrozumiałem. Teraz jest to zgodne z Twoimi założeniami? Puściłem układ w ruch, zobaczę za jakiś czas czy będą błędy. <br />[syntax=c]#include &lt;util/delay.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#define KROKI 50<br /><br /><br /><br />volatile int licznik_prawo=0, flag=1;<br /><br /><br /><br /><br />ISR(INT0_vect)<br />{<br /><br />if(flag==1)<br />{<br />licznik_prawo++;<br />}<br /><br />if(flag==0)<br />{<br />licznik_prawo--;<br />}<br />}<br /><br /><br /><br /><br /><br />int main(){<br /><br /><br />DDRB = 0xff;<br />PORTB = 0x00;<br /><br />GIMSK |= _BV(INT0); // włączenie obsługi przerwań INT0 i INT1<br />MCUCR |= _BV(ISC11)|_BV(ISC10) | _BV(ISC01)|_BV(ISC00);<br />// włącz generowanie przerwań przez narastające zbocze na INT0 i INT1<br /><br />sei(); // włącz globalną obsługę przerwań<br /><br />//petla główna<br />while(1){<br /><br /><br />if(flag==1)<br />{<br /><br />PORTB ^=(1&lt;&lt;PB1);<br /><br />while(1){<br /><br />if(licznik_prawo == KROKI){<br />PORTB ^=(1&lt;&lt;PB1);<br />flag=0;<br /><br />_delay_ms(300);<br /><br />break;<br />}<br />}<br />}<br /><br /><br />if(flag==0){<br /><br />PORTB ^=(1&lt;&lt;PB2);<br /><br />while(1){<br /><br />if(licznik_prawo == 0){<br />PORTB ^=(1&lt;&lt;PB2);<br />flag=1;<br />_delay_ms(300);<br /><br />break;<br />}<br />}<br />}<br /><br />}<br />}[/syntax]<br /><br /><div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br />Aha, i nie wykorzystuje do tego przerwań int tylko zliczam w zwykłych od przepełnienia traktowanych co 100us i to z kilku silników. Zrób to tak jak ci napisałem i zobaczysz różnice.<br /></div><br /><br />Czy dobrze rozumiem, że skoro nie podajesz sygnału na INT to w takim razie używasz zwykłej linii portu i sprawdzasz jej stan przy pomocy PINx? A impulsy zliczasz w przerwaniu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=863">m_wojcik74</a> — 28 cze 2017, o 10:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2017-06-28T09:47:05+01:00</updated>
<published>2017-06-28T09:47:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191373#p191373</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191373#p191373"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191373#p191373"><![CDATA[
<div class="quotetitle">m_wojcik74 napisał(a):</div><div class="quotecontent"><br />Hmm.. czyżby jakieś zakłócenia? Może ktoś ma jakiś pomysł?<br /></div> być może ale to będzie ciężko sprawdzić chyba że podłączysz oscyla na kilka minut i będziesz nagrywał układ wraz z widokiem ekranu oscyla i trzeba by wyczekać na fazę przesuwu w której wystąpiło zgubienie kroków i wtedy całą fazę wstecz trzeba by przeanalizować co się dzieje na oscyloskopie. Dobrze by też wyrzucić z atmegi na jakiś wyświetlacz stan zliczania tak by też było widać na filmie co się dzieje z licznikami...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 28 cze 2017, o 09:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2017-06-28T09:27:25+01:00</updated>
<published>2017-06-28T09:27:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191372#p191372</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191372#p191372"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191372#p191372"><![CDATA[
Proponuje podłączyć lcd i wyświetlać stan na bieżąco, tylko zmniejsz trochę prędkość aby widzieć ten stan. Ogólnie mnie się nie podoba twój sposób zliczania. Błędny już z założenia... Ja to robię w swoich projektach bez zerowania licznika głównego (u Ciebie to ten w przerwaniu int). Flagę rozpoznawał bym już w przerwaniu i w zależności od jej stanu następuje zwiększanie lub zmniejszanie licznika. Chodzi o bezwładność, która będzie się nawarstwiać. U siebie przeważnie zliczam impulsy z prędkością około 60tys/min i nic nie gubi, a robię to w opisany właśnie sposób. Aha, i nie wykorzystuje do tego przerwań int tylko zliczam w zwykłych od przepełnienia traktowanych co 100us i to z kilku silników. Zrób to tak jak ci napisałem i zobaczysz różnice.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 28 cze 2017, o 09:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[m_wojcik74]]></name></author>
<updated>2017-06-28T05:46:18+01:00</updated>
<published>2017-06-28T05:46:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191369#p191369</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191369#p191369"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191369#p191369"><![CDATA[
<div class="quotetitle">xentis napisał(a):</div><div class="quotecontent"><br />Koła zębate wyglądają jakby miały sprzęgło cierne (te sprężyny które są pod kołami - zazwyczaj takie sprężyny stosowano właśnie by docisnąć sprzęgło, sama zębatka była wykonana jakby z dwóch kółek pomiędzy którymi było coś ala filc, a oba kółka były dociskane od spodu sprężyną, tak to sprytnie było zrobione że samego filca nie było widać bo kółko połączone na stałe z osią zagłębiało się we wgłębienie koła na które był przekazywany napęd - patent szeroko stosowany jeszcze za czasów magnetofonów i magnetowidów gdzie koła nawijające taśmę musiały się kręcić szybciej gdy są puste, i dużo wolniej gdy pełne - napęd cały czas był przekazywany ze stałą prędkością a różnica w prędkości samego koła nawijającego była niwelowana właśnie przez poślizg tego sprzęgła co nastręczało problemu w najpóźniej produkowanych tańszych magnetofonach w połączeniu z kasetami dłuższymi niż 60minut - stare kasety 90 były dłuższe i cięższe co skutkowało zatrzymywaniem się napędu właśnie na tym sprzęgle i &quot;wciągnięciem taśmy&quot; ).<br />Jeśli te koła mają takie sprzęgło to w momencie gdy następuje zwrot kierunku obrotu silnika może następować niewielki poślizg na sprzęgle przez co układ się rozjeżdża.<br />Spróbuj dać większe opóźnienie pomiędzy zmianą kierunku silnika - może pomoże... Najlepiej było by jeszcze dać softstart dla silnika by nie szarpał przy ruszaniu.<br /></div><br /><br />Tutaj też było coś typu sprzęgła (chyba, lub jakiś przesuwnik fazy obrotu), wiem że zakleiłem to klejem ale ten napęd wyciągałem z drukarki kilka ładnych lat temu i już nie pamiętam. Dołączam kolejne zdjęcia przekładni żeby pokazać że tam już nie ma możliwości przeskakiwania zębów. Btw. w drukarce to też pracowało z enkoderem, widać jeszcze na zdjęciu pozostałości po transoptorze szczelinowym, tyle że z o wiele więęęęększą rozdzielczością, szczeliny na oryginalnej tarczy enkodera były takie że trzeba było się dobrze przypatrzeć żeby je zobaczyć, myślę że kilka szczelin na każdy milimetr. <br /><a href="https://obrazkiforum.atnel.pl/863/1b700a50869430e926e94f8baffabf52.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/863/1b700a50869430e926e94f8baffabf52.jpg" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/863/9fb5b7e813cda1be75c1a019a24922d6.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/863/9fb5b7e813cda1be75c1a019a24922d6.jpg" alt="Obrazek" /></a><br /><br />Start wydaje się na tyle płynny że też to chyba powinno się zachowywać należycie (film to przedstawia w ok. 12 sekundzie). Z softstartem (PWM'owym) w tym konkretnym układzie może nie być takiego problemu bo silnik malutki, ale w rzeczywistym układzie gdzie będą silniki większej mocy problematyczne będzie sterowanie. Silnik sterowany implusowo w czasie stanu niskiego będzie generował wysokie napięcie które trzeba będzie gdzieś zdławić bo szybko wypalą się styki przekaźników. Najlepiej sterować byłoby tranzystorami przy okazji je kluczować PWMem, ale to jest trochę skomplikowane bo mostek H, musiałby też dławić te niepożądane szpilki napięciowe co znacznie komplikuje sprawę - jeden tranzystor zamknięty a dwa otwierają i zamykają się naprzemiennie - tak się robi w dużych układach elektromechanicznych. A mi zależy na zastosowaniu przekaźników, są o wiele mniej delikatne na warunki w jakich to ma pracować niż tranzystory.<br /><br /><br />Btw. Odchyłka za każdym razem jest tylko w jedną stronę, tak jakby dla flag==0 zliczał coraz więcej implusów (a nie równo 50)<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 42 minutach ]</span></strong><br /><br />Nagrałem 10 minut film z pracy układu, potem przeanalizowałem na komputerze, okazuje się, że czasem układ doliczy 46/47 obrotów i przełącza kierunek... Hmm.. czyżby jakieś zakłócenia? Może ktoś ma jakiś pomysł?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 49 minutach ]</span></strong><br /><br />I jeszcze sygnał który wchodzi na INT0 mikrokontrolera, a wychodzi z bramki Schmitta:<br /><br /><a href="https://obrazkiforum.atnel.pl/863/ac8add0005e114f99e07de73f2c41a32.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/863/ac8add0005e114f99e07de73f2c41a32.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=863">m_wojcik74</a> — 28 cze 2017, o 05:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2017-06-27T20:31:45+01:00</updated>
<published>2017-06-27T20:31:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191350#p191350</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191350#p191350"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191350#p191350"><![CDATA[
Koła zębate wyglądają jakby miały sprzęgło cierne (te sprężyny które są pod kołami - zazwyczaj takie sprężyny stosowano właśnie by docisnąć sprzęgło, sama zębatka była wykonana jakby z dwóch kółek pomiędzy którymi było coś ala filc, a oba kółka były dociskane od spodu sprężyną, tak to sprytnie było zrobione że samego filca nie było widać bo kółko połączone na stałe z osią zagłębiało się we wgłębienie koła na które był przekazywany napęd - patent szeroko stosowany jeszcze za czasów magnetofonów i magnetowidów gdzie koła nawijające taśmę musiały się kręcić szybciej gdy są puste, i dużo wolniej gdy pełne - napęd cały czas był przekazywany ze stałą prędkością a różnica w prędkości samego koła nawijającego była niwelowana właśnie przez poślizg tego sprzęgła co nastręczało problemu w najpóźniej produkowanych tańszych magnetofonach w połączeniu z kasetami dłuższymi niż 60minut - stare kasety 90 były dłuższe i cięższe co skutkowało zatrzymywaniem się napędu właśnie na tym sprzęgle i &quot;wciągnięciem taśmy&quot; ).<br />Jeśli te koła mają takie sprzęgło to w momencie gdy następuje zwrot kierunku obrotu silnika może następować niewielki poślizg na sprzęgle przez co układ się rozjeżdża.<br />Spróbuj dać większe opóźnienie pomiędzy zmianą kierunku silnika - może pomoże... Najlepiej było by jeszcze dać softstart dla silnika by nie szarpał przy ruszaniu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 27 cze 2017, o 20:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[m_wojcik74]]></name></author>
<updated>2017-06-27T11:53:29+01:00</updated>
<published>2017-06-27T11:53:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191318#p191318</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191318#p191318"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191318#p191318"><![CDATA[
<div class="quotetitle">xentis napisał(a):</div><div class="quotecontent"><br />Zakres jest przesunięty, zwężony czy rozciągnięty?<br />Dobrze widzę że kółka przekładni mają sprzęgła cierne? Bo jeśli mają to może być to właśnie powodem efektu rozjechania.<br /></div><br /><br />Zakres jest przesunięty, gdy z jednej strony wychodzi poza skalę to z drugiej nie dochodzi do punktu początkowego.<br />Przekładnia jest z drukarki atramentowej, silnik napędza koło zębate przy pomocy paska (również zębaty) następnie są dwa koła zębate sprzęgnięte ze sobą, nie ma możliwości żeby z powodu przekładni wystąpiły takie błędy, zważywszy na to, też że silnik wkręca nakrętkę 3mm więc pracuje prawie na biegu jałowym.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=863">m_wojcik74</a> — 27 cze 2017, o 11:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2017-06-27T11:45:26+01:00</updated>
<published>2017-06-27T11:45:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191317#p191317</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191317#p191317"/>
<title type="html"><![CDATA[Re: Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191317#p191317"><![CDATA[
Zakres jest przesunięty, zwężony czy rozciągnięty?<br />Dobrze widzę że kółka przekładni mają sprzęgła cierne? Bo jeśli mają to może być to właśnie powodem efektu rozjechania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 27 cze 2017, o 11:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[m_wojcik74]]></name></author>
<updated>2017-06-28T05:47:48+01:00</updated>
<published>2017-06-27T10:45:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191314#p191314</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191314#p191314"/>
<title type="html"><![CDATA[Zliczanie obrotów silnika atmega8, problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18703&amp;p=191314#p191314"><![CDATA[
Witam, <br />Mam problem z układem który ma zliczać ilość obrotów silnika i przełączać kierunek obrotów przeciwną stronę po odliczeniu odpowiedniej ilości. Silnik napędza pręt gwintowany na którym jest nakrętka (uproszczony prototyp siłownika z którym układ będzie pracował w rzeczywistości). <br />Program działa tak, że po odliczeniu 50 obrotów w jedną stronę, przełącza silnik w drugą stronę i to działa w pętli. Zliczanie obrotów odbywa się przez pseudo enkoder zrobiony z tekturki wraz z transoptorem szczelinowym (ITR9606-F) później sygnał trafia na bramke Schmitta (złożoną z LM324) w celu określenia jednoznacznie sygnału (0 lub 1, bez stanów przejściowych) a następnie na INT0 Atmegi8 jako sygnał przerwania zewnętrznego (zbocze narastające). <br />Zaznaczyłem sobie na tekturce zakres ruchu nakrętki na pręcie gwintowanym, po około 20 minutach ciągłej pracy zakres jest przesunięty o ok 1cm (zakładając że cały zakres ruchu nakrętki to 5cm)<br />Schemat:<br /><a href="https://obrazkiforum.atnel.pl/863/1f2d52b5740ebaa7f030bc734875b0d4.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/863/1f2d52b5740ebaa7f030bc734875b0d4.png" alt="Obrazek" /></a><br /><br />Program:<br /><br />[syntax=c]#include &lt;util/delay.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/wdt.h&gt;<br /><br /><br />volatile int licznik_prawo=0, licznik_lewo=0;<br /><br /><br /><br />ISR(INT0_vect)<br />{<br />licznik_prawo++;<br /><br />}<br /><br /><br /><br /><br /><br />int main(){<br /><br /><br />DDRB = 0xff;<br />PORTB = 0x00;<br /><br />int flag=0, a=50;<br /><br />GIMSK |= _BV(INT0); // włączenie obsługi przerwań INT0 i INT1<br />MCUCR |= _BV(ISC11)|_BV(ISC10) | _BV(ISC01)|_BV(ISC00);<br />// włącz generowanie przerwań przez narastające zbocze na INT0 i INT1<br /><br />sei(); // włącz globalną obsługę przerwań<br /><br />//petla główna<br />while(1){<br /><br /><br />if(flag==1)<br />{<br /><br />PORTB ^=(1&lt;&lt;PB1);<br /><br />while(1){<br /><br />if(licznik_prawo == a){<br />PORTB ^=(1&lt;&lt;PB1);<br />flag=0;<br />licznik_prawo=0;<br /><br />_delay_ms(100);<br /><br />break;<br />}<br />}<br />}<br /><br /><br />if(flag==0){<br /><br />PORTB ^=(1&lt;&lt;PB2);<br /><br />while(1){<br /><br />if(licznik_prawo == a){<br />PORTB ^=(1&lt;&lt;PB2);<br />flag=1;<br />licznik_prawo=0;<br /><br />_delay_ms(100);<br /><br />break;<br />}<br />}<br />}<br /><br />}<br />}[/syntax]<br /><br /><a href="https://obrazkiforum.atnel.pl/863/507af28a8292a43b9ea82cfee56fb23b.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/863/507af28a8292a43b9ea82cfee56fb23b.jpg" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/863/baaa1568a272f32288c3dbbba8348f13.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/863/baaa1568a272f32288c3dbbba8348f13.jpg" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/863/0729674ad10edb6fc7871e6c8e457f64.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/863/0729674ad10edb6fc7871e6c8e457f64.jpg" alt="Obrazek" /></a><br /><br /><br />Może ktoś posiada jakiś pomysł dlaczego przemieszczenie się nakrętki na śrubie nie jest zawsze identyczne? Myślałem też że może bezwładność silnika powoduje jakieś przeunięcia, ale nagrywając kamerą z telefonu w trybie slow motion w przypadkowo wybranym momencie czasu, dwa cykle wynoszą dokładnie 100 obrotów. <br />Myślałem o zakłóceniach fototranzystora, ale osłoniłem go, tekturą, w pokoju zrobiłem ciemnie i to również nie pomogło.<br /><br />I jeszcze film jak wygląda to zatrzymywanie się, od 12 sekundy filmu dwa cykle po 50 obrotów. Film jest w slow motion, normalnie kręci się to trochę szybciej.<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=863">m_wojcik74</a> — 27 cze 2017, o 10:45</p><hr />
]]></content>
</entry>
</feed>