<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=4786&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-11-15T03:13:58+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=4786&amp;mode</id>
<entry>
<author><name><![CDATA[Intre]]></name></author>
<updated>2013-11-15T03:13:58+01:00</updated>
<published>2013-11-15T03:13:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56924#p56924</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56924#p56924"/>
<title type="html"><![CDATA[Re: Spowolnienie inkrementacji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56924#p56924"><![CDATA[
No więc za namową SunRiver zrobiłem coś prostego, mianowicie można by to nazwać free running mode i lock, czyli po prostu za pomocą guzika wyłączam pomiar ADC nie zadawała mnie to tak do końca no ale może być.<br /><br /><br /><br /> [syntax=c]//obsługa Joystika przez ADC<br />                                                 if (flaga==0) {<br />//os X<br />wynik1 = (pomiar(4));<br />OCR1A = 170 + wynik1*400UL/1023;<br />//os Y<br />wynik2 = (pomiar(5));<br />OCR1B = 170 + wynik2*400UL/1023;<br />}<br />                        else { }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1356">Intre</a> — 15 lis 2013, o 03:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[charsz]]></name></author>
<updated>2013-11-14T21:26:42+01:00</updated>
<published>2013-11-14T21:26:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56897#p56897</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56897#p56897"/>
<title type="html"><![CDATA[Re: Spowolnienie inkrementacji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56897#p56897"><![CDATA[
A moze by tak: jesli wartosc rosnie od 500 (lub maleje) to wychylac serwo w jedna ze stron. A jak maleje od max do 500 to nic nie robic. Tak samo nic nie robic jak bedzie roslo od 0 do 500. Zakladam ze joystick dziala tak ze w neutralnym polozeniu ma wartosc 500 a w skrajnych 0 i 1000.<br /><br />Wysłane z mojego GT-I9300 przy użyciu Tapatalka<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=926">charsz</a> — 14 lis 2013, o 21:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Intre]]></name></author>
<updated>2013-11-14T20:58:21+01:00</updated>
<published>2013-11-14T20:58:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56892#p56892</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56892#p56892"/>
<title type="html"><![CDATA[Re: Spowolnienie inkrementacji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56892#p56892"><![CDATA[
Uwaga mały przełom!!<br /><br />Po rozmowie z kolegą Krauser, który spostrzegł że wartość wg. mojego wzoru przekracza zakres liczby uint16_t i jego zaleceniach został zmodyfikowany lekko mój kod o UL<br /><br />[syntax=c]OCR1A = 170 + wynik1*400UL/1023;[/syntax]<br /><br />No i teraz pięknie się serwo obraca zgodnie z kierunkami Joysticka, ba nawet jest jakby zależność o jakiej marzyłem czyli szybciej i wolniej w lewo prawo no ale niestety....<br />życie to nie bajka i pojawił się nowy problem, potencjometr Joysticka w pozycji środkowej ma wartość 500 i za każdym razem jak wraca do pozycji to tak ustawia serwo.<br /><br />No więc pytanie jak to obejść? Bo nawet jak bym &quot;oifował&quot; że ma nie brać wartości 500 pod uwagę to i tak będzie się ustawiało wg. ostatniej pozycji do powrotu. <br /><br />Przy takim zwykłym potencjometrze działa wszystko ok wręcz elegancko.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1356">Intre</a> — 14 lis 2013, o 20:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Intre]]></name></author>
<updated>2013-11-14T19:52:30+01:00</updated>
<published>2013-11-14T19:52:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56873#p56873</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56873#p56873"/>
<title type="html"><![CDATA[Re: Spowolnienie inkrementacji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56873#p56873"><![CDATA[
GwynBleidD no nie mam zużyłem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />1. Timer 0 - obsługa enkoderów<br />2. Timer 1 - Fast PWM dla serwa MG995 - bo się telepie na programowym, potwierdzone w rozmowie z SunRiver że ten typ tak ma<br />3. Timer 2 - pozostałe serwa sterowane programowo firmy DGS.<br /><br />Po różnych rozmowach i przemyśleniach miałem dziś pomysł żeby przepisywać wartość z potencjometru bezpośrednio do rejestru OCRA<br />dokonując jakby w locie konwersji za pomocą wzoru. Wymyśliłem coś takiego ale to nie działa:<br /><br />[syntax=c]wynik1 = (pomiar(4));<br />OCR1A = 170 + wynik1*400/1023;[/syntax]<br /><br />Owszem wartości są zmieniane ale trzeba wziąć pod uwagę że potencjometr joystick`a ma w stanie środkowym wartość 500 i tak naprawdę serwo drga, oglądając przebieg to lekko się wychyla w prawo i wraca, wartość rejestru OCRA w lewo przyjmuje 170 a w prawo 185. Także porażka. <br /><br />Zostaje mi kilka rozwiązań:<br />1. zmienić serwo na DSG, które nie drga na PWM programowym. <br />2. zrezygnować z Joysticka i zrobić wszystko na enkoderach.<br />3. Spróbować jakoś wcisnąć ten Timer programowy i zrobić to o czym pisze kolega SylwekK<br />4. Szukać dalszego rozwiązania.<br /><br /> Z ciekawości jak się zacząłem dowiadywać więcej dziś o Joystick`u to doszedłem do tego że jest on taki sam albo bardzo podobny jak w padzie od konsoli XBOX360 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><!-- m --><a class="postlink" href="http://www.instructables.com/id/How-to-replace-a-broken-analog-joystick-on-an-XBOX/" >http://www.instructables.com/id/How-to- ... n-an-XBOX/</a><!-- m --><br /><br />Tu dodatkowe informacje skąd to mam:<br /><!-- m --><a class="postlink" href="https://www.sparkfun.com/products/9032" >https://www.sparkfun.com/products/9032</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1356">Intre</a> — 14 lis 2013, o 19:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2013-11-14T12:12:33+01:00</updated>
<published>2013-11-14T12:12:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56789#p56789</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56789#p56789"/>
<title type="html"><![CDATA[Re: Spowolnienie inkrementacji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56789#p56789"><![CDATA[
Ja coś podobnego u siebie w sterowniku zrobiłem na &quot;doganiającej&quot; zmiennej czyli: bierzemy dodatkową zmienną, która będzie główną sterującą serwem, ale jej wartość będzie się zmieniać płynnie w czasie określonym przez jakiś timer programowy doganiając wartość odczytaną z ADC. Nie wiem jak to prościej wytłumaczyć, ale obrazowo chodzi mniej więcej o coś takiego:<br /><br />[syntax=c]odczyt=ADC<br />if (!timer) {<br />   timer=czas_narastania;<br />   if (doganiajaca&lt;odczyt) doganiająca++;<br />   if (doganiajaca&gt;odczyt) doganiająca--;<br />}<br />serwo=doganiajaca;[/syntax]<br /><br />W takim przypadku żeby nie wiem jak skrajnie zmieniały się wartości na ADC to zmienna doganiająca zawsze będzie płynnie narastać do tej wartości i aktualizować stan serwa.<br />&quot;timer&quot; to oczywiście timer programowy w przerwaniach typu: If (timer) timer--;<br /><br />EDIT:<br />Na tym filmie troszkę widać ideę takiego sterowania - też ADC z potencjometru tylko przekazywanie do silnika krokowego. Musiało tu być doganianie bo inaczej przy zbyt gwałtownych zmianach silnik by gubił kroki.<br /><a href="http://www.youtube.com/watch?v=sBLOafyeoyU"  class="postlink">http://www.youtube.com/watch?v=sBLOafyeoyU</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 14 lis 2013, o 12:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Intre]]></name></author>
<updated>2013-11-14T11:10:41+01:00</updated>
<published>2013-11-14T11:10:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56783#p56783</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56783#p56783"/>
<title type="html"><![CDATA[Re: Spowolnienie inkrementacji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56783#p56783"><![CDATA[
No bo to dokładnie jest joystick <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/1356/1a4cf362ffb39072c0a29320304c82ec.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1356/1a4cf362ffb39072c0a29320304c82ec.jpg" alt="Obrazek" /></a><br /><br /><br />no _delay_ms odpada bo zawiesza cały program/procesor i szarpie serwami.<br /><br />jak pisałem wcześniej Timer 0 i Timer 2 mam również w użyciu. 1 na obsługę enkoderów, a drugi dla pozostałych serw programowych.<br /><br />Efekt jaki bym chciał uzyskać to taki:<br /><br /><a href="http://www.youtube.com/watch?feature=player_detailpage&amp;v=FKj9jJgj8Pc"  class="postlink">http://www.youtube.com/watch?feature=player_detailpage&amp;v=FKj9jJgj8Pc</a><br /><br />A to w przyszłości <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><a href="http://www.youtube.com/watch?v=zZwnyZPkylk"  class="postlink">http://www.youtube.com/watch?v=zZwnyZPkylk</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1356">Intre</a> — 14 lis 2013, o 11:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Intre]]></name></author>
<updated>2013-11-14T03:51:21+01:00</updated>
<published>2013-11-14T03:51:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56766#p56766</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56766#p56766"/>
<title type="html"><![CDATA[Spowolnienie inkrementacji]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4786&amp;p=56766#p56766"><![CDATA[
Chciałbym poradzić się czy jest możliwe, jak to zrobić by opóźnić inkrementację i dekrementację, albo po prostu czegoś nie wiem, nie douczyłem się lub robię nie tak.<br /><br />Mianowicie chodzi o sterowanie serwomechanizmem za pomocą potencjometru.  <br /><br />może najpierw fragment kodu i później pokrótce wyjaśnienie.<br /><br />[syntax=c]OCR1A=s;<br />if(s==0) s=170;<br />wynik1 = (pomiar(4));<br /><br />if (wynik1 &gt; 600) {<br />s++; }<br />if(s&lt;170) s = 170;<br /><br />if (wynik1 &lt; 400) {<br />s--; }<br />if(s&gt;570) s = 570;[/syntax]<br /><br />Odczytuję stan potencjometru przez ADC i na jego podstawie zwiększam lub zmniejszam zmienną &quot;s&quot; co za tym idzie stan rejestru OCR1A dzięki czemu obraca mi się serwomechanizm w lewo lub prawo. Kiedy używałem do tego klawiszy zarówno w wersji liniowego programowania jak _delay_ms lub za pomocą SuperDebounce to wszystko ładnie pięknie ze spokojem się obracało nawet zwiększałem wartość inkkrementacji np. &quot;s+=5;&quot; by kręciło się szybciej. <br />Procesor to Atmega32 z zegarem 16Mhz do generowania przebiegu prostokątnego używam Taimer1 obecnie w trybie Fast PWM mod 14. preskaler 64.<br /> <br />[syntax=c]//konfiguracja TIMER1<br />TCCR1A |= (1&lt;&lt;COM1A1)|(1&lt;&lt;COM1B1)|(1&lt;&lt;WGM11); //FAST PWM, mode 14<br />TCCR1B |= (1&lt;&lt;WGM12)|(1&lt;&lt;WGM13)|(1&lt;&lt;CS10)|(1&lt;&lt;CS11); //FAST PWM, mode 14 c.d., preskaler 64<br /><br />ICR1=4999;[/syntax]<br /><br />Serwo ładnie pracuje nie drga, kręci się płynnie elegancko, tylko po prostu za szybko. Podglądam sobie tą zmienną na LCD jak i przebieg na oscyloskopie, kiedy używam<br />klawiszy jest ok ładnie spokojnie a kiedy potencjometru to bardzo szybko tzw. &quot;pędzikiem&quot; zmienia się jej stan, normalnie Turbo Express <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Robiłem już różne ustawienia preskalera ale inkrementacja i dekrementacja za pomocą potencjometru jest tak samo szybka nie zauważyłem żeby znacząco zwolniła. <br /><br />Może trzeba napisać jakąś funkcje, warunek opóźniający inkrementację i dekrementację?  Albo w ogóle rozwiązać to inaczej, napisać. Zastanawiałem się nad % modulo i zegarem ale pozostałe dwa timery są wykorzystane również jeden do obsługi enkodera a drugi serw programowych. <br /><br />Docelowo bym chciał zrobić tak, że kiedy wychylenie potencjometru jest mocniejsze (jego wartość wyższa)  to ma się zmienna inkrementować o więcej przez co serwomechanizm szybciej kręcić. No ale najpierw muszę opanować to opóźnienie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1356">Intre</a> — 14 lis 2013, o 03:51</p><hr />
]]></content>
</entry>
</feed>