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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-01-28T13:43:34+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=30&amp;t=4914&amp;mode</id>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-01-28T13:43:34+01:00</updated>
<published>2014-01-28T13:43:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4914&amp;p=67065#p67065</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4914&amp;p=67065#p67065"/>
<title type="html"><![CDATA[Re: Sterowanie serwami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4914&amp;p=67065#p67065"><![CDATA[
Przede wszystkim, zwróć uwagę na stabilne 20ms, bo jeśli ten czas się będzie rozjeżdżał to główne szpilki sterujące (1-2ms) na nic się zdadzą.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 28 sty 2014, o 13:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pietszyk]]></name></author>
<updated>2014-01-28T11:46:26+01:00</updated>
<published>2014-01-28T11:46:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4914&amp;p=67053#p67053</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4914&amp;p=67053#p67053"/>
<title type="html"><![CDATA[Re: Sterowanie serwami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4914&amp;p=67053#p67053"><![CDATA[
Trzęsące się ramiona sugerują na niewłaściwe czasy impulsów impulsy podawane co 20 ms powinny mieć szerokość od 1 ms do 2ms pozycja centralna to 1,5ms. Przelicz czy mieścisz się w zakresach. Napisz jeszcze czy serwo drga w całym zakresie czy na skrajnych pozycjach. Z tego co widzę to co 20us masz przerwanie i wysyłasz w zależności od cnt zero albo jeden na wyjście. czyli przez max 100 przerwań może trwać &quot;1&quot; i to będzie skrajne wychylenie, 50 przerwań to skrajne w drugą stronę. Następne (1000 &quot; - &quot; długość trwania &quot;1&quot;) da nam 20ms do końca jednej (nazwę to) pozycji. Następnie zerujemy pwm i od nowa. Czyli możesz osiągnąć 50 pozycji (Trochę mało :/ ). Aha i gdzie zerowanie PWM gdy przekroczy 1000?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2341">pietszyk</a> — 28 sty 2014, o 11:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JuzoPL]]></name></author>
<updated>2013-11-25T20:48:47+01:00</updated>
<published>2013-11-25T20:48:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4914&amp;p=58559#p58559</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4914&amp;p=58559#p58559"/>
<title type="html"><![CDATA[Sterowanie serwami]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4914&amp;p=58559#p58559"><![CDATA[
Witajcie,<br />buduję robota, prace prawie ukończone. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  Niestety mam mały problem, potrafię sterować serwami, ale ramiona od nich trzęsą się. <img src="https://forum.atnel.pl/images/smilies/icon_neutral.gif" alt=":|" title="Średnio zadowolony" />  Przypuszczam że to wina programowa. Serwami steruje poprzez timer 8bit poprzez tryb CTC (ręczne PWM). ATmega takowana jest 18MHz.<br /><br />O to fragmenty kodu:<br />[syntax=c]volatile uint8_t cnt1=75;//licznik serwa<br />volatile uint16_t pwm1=1;//licznik serwa<br />volatile uint8_t cnt2=75;//licznik serwa<br />volatile uint16_t pwm2=1;//licznik serwa<br />volatile uint8_t buff1=75 //buffor licznika serwa<br />volatile uint8_t buff2=75 //buffor licznika serwa<br /><br />// Przerwanie Timer2 20us atmega32<br />    TCCR2 |= (1&lt;&lt;WGM21); //włączenie trybu CTC<br />    TCCR2 |= (1&lt;&lt;CS22); //ustawienie preskalera na 64<br />    OCR2 = 4; //wartość do której zlicza licznik<br />    TIMSK |= (1&lt;&lt;OCIE2);<br /><br />ISR(TIMER2_COMP_vect){<br /><br />if(cnt1&gt;=pwm1)<br />{<br />PORTC |= (1&lt;&lt;PC0);//serwo 1 sygnał+<br />}<br />else if((cnt1+1000)&gt;=pwm1)//1000 = 20ms braku sygnału  <br />{<br />PORTC &amp;= ~(1&lt;&lt;PC0);//serwo 1 sygnał-<br /><br />}<br />else<br />{<br />pwm1=1; //sygnał od początku<br />cnt1=buff1; //ładowanie długości sygnału<br /><br />}<br />if(cnt2&gt;=pwm2)<br />{<br />PORTC |= (1&lt;&lt;PC1);<br /><br />}<br />else if(cnt2+(1000)&gt;=pwm2)<br />{<br />PORTC &amp;= ~(1&lt;&lt;PC1);<br />}<br />else<br />{<br />pwm2=1;<br />        cnt2=buff2;<br />}<br /><br />pwm1++;// zwiększanie licznika o 1<br />pwm2++;// zwiększanie licznika o 1<br />}[/syntax]<br /><br />Nie wiem co zrobiłem źle. Proszę o pomoc. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  Jeśli brakuje wam jakieś informacji pisać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1333">JuzoPL</a> — 25 lis 2013, o 20:48</p><hr />
]]></content>
</entry>
</feed>