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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-05-19T00:13:14+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=11664&amp;mode</id>
<entry>
<author><name><![CDATA[Panicz74]]></name></author>
<updated>2015-05-19T00:13:14+01:00</updated>
<published>2015-05-19T00:13:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=129545#p129545</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=129545#p129545"/>
<title type="html"><![CDATA[Re: Atmega644 Pozycjonowanie serwa - proszę o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=129545#p129545"><![CDATA[
Jeszcze taka sprawa bo zmagam się z nią już jakiś czas.<br /><br />Co należy dopisać do kodu aby serwa nie ruszały jednocześnie tylko po kolei??<br />Zabiegi z &quot;delay&quot; nie pomagają, wręcz przeciwnie, serwa w ogóle nie reagują.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9088">Panicz74</a> — 19 maja 2015, o 00:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Panicz74]]></name></author>
<updated>2015-05-11T19:33:22+01:00</updated>
<published>2015-05-11T19:33:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128885#p128885</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128885#p128885"/>
<title type="html"><![CDATA[Re: Atmega644 Pozycjonowanie serwa - proszę o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128885#p128885"><![CDATA[
Problem rozwiązany. Powodem były braki w kodzie:<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 11 maj 2015<br /> *      Author: Radek<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 /><br />#define KEY1    (1&lt;&lt;PA0)// definicja przycików<br />#define KEY2    (1&lt;&lt;PA1)<br /><br />#define KEY1_DOWN ( !(PINA &amp; KEY1) )// definicja wciśniętego przycisku<br />#define KEY2_DOWN ( !(PINA &amp; KEY2) )<br /><br />#define SERVO1 (1&lt;&lt;PB0)// definicja silników<br />#define SERVO2 (1&lt;&lt;PB1)<br /><br />#define SERVO_MID       1500// definicja położenia silnika<br />#define SERVO_MIN       1000<br />#define SERVO_MAX       2000<br /><br /><br />uint16_t servo1, servo2;<br />volatile uint8_t key_flag;// zmienna pomijana przez kompilator<br /><br />int main(void)<br />{<br />servo1 = servo2 = SERVO_MID;// ustawienie początkowe silników<br />PORTA |= KEY1 | KEY2;// wyjścia - przyciski<br />DDRB |= SERVO1 | SERVO2; // wyjścia do silników<br />TCCR1A |= 1&lt;&lt;WGM11;<br />TCCR1B |= 1&lt;&lt;WGM12 | 1&lt;&lt;WGM13 | 1&lt;&lt;CS10;//rejestry odpowiedzialne za PWM<br />TIMSK1 |= 1&lt;&lt;OCIE1A;// timer dla TCCR1B &amp; TCCR1A<br /><br />ICR1 = 19999;//rozciagnij, zawez okres<br /><br />sei();//uruchomienie przerwań<br /><br />while(1)<br />        {<br />                if(key_flag) // jeśli flaga = 0, wykonaj program<br />                {<br />                        key_flag = 0;<br />                        if (KEY1_DOWN) //klawisz 1 wcisniety<br />                        {<br />                                servo1 = SERVO_MAX; //ustawienia odpowiednio servo1 i servo2<br />                                servo2 = SERVO_MIN;<br />                        }<br />                        if (KEY2_DOWN) //klawisz 2 wcisniety<br />                        {<br />                                servo1 = SERVO_MIN; //ustawienia odpowiednio servo1 i servo2<br />                                servo2 = SERVO_MAX;<br />                        }<br />                }<br />                if(TCNT1 &gt; servo1) PORTB &amp;= ~SERVO1; //nakierowanie mechanizmu przerwania<br />                if(TCNT1 &gt; servo2) PORTB &amp;= ~SERVO2;<br />        }<br />}<br />ISR (TIMER1_COMPA_vect)<br />{<br />        PORTB |= SERVO1 | SERVO2;<br />        key_flag = 1; // jeśli flaga = 1, program sie wykonał<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9088">Panicz74</a> — 11 maja 2015, o 19:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Panicz74]]></name></author>
<updated>2015-05-11T18:32:54+01:00</updated>
<published>2015-05-11T18:32:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128871#p128871</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128871#p128871"/>
<title type="html"><![CDATA[Re: Atmega644 Pozycjonowanie serwa - proszę o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128871#p128871"><![CDATA[
Faktycznie nie dopisałem tej linijki. Po uruchomieniu tego programu serwa pracują jednak bardzo nierówno. Coś tam widzą, że coś się dzieje ale działanie wygląda tak:<br /><br /><!-- m --><a class="postlink" href="https://www.youtube.com/watch?v=dKUNLwuLLHg&amp;feature=youtu.be" >https://www.youtube.com/watch?v=dKUNLwu ... e=youtu.be</a><!-- m --><br /><br />Działanie ręczne działa bez problemu, więc serwa są ok.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9088">Panicz74</a> — 11 maja 2015, o 18:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kamil7417]]></name></author>
<updated>2015-05-11T17:53:54+01:00</updated>
<published>2015-05-11T17:53:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128867#p128867</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128867#p128867"/>
<title type="html"><![CDATA[Re: Atmega644 Pozycjonowanie serwa - proszę o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128867#p128867"><![CDATA[
<div class="quotetitle">Panicz74 napisał(a):</div><div class="quotecontent"><br />Funkcja za generowanie sygnału? Znaczy się czegoś tam brakuje? Posiłkowałem się tym kodem:<br /></div><br /><br />ano tego:<br />[syntax=c]if(TCNT1 &gt; servo1) PORTB &amp;= ~SERVO1; //nakierowanie mechanizmu przerwania<br />                if(TCNT1 &gt; servo2) PORTB &amp;= ~SERVO2;[/syntax]<br /><br />Spróbój tak:<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 11 maj 2015<br /> *      Author: Radek<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 /> <br />#define KEY1    (1&lt;&lt;PA0)<br />#define KEY2    (1&lt;&lt;PA1)<br /> <br />#define KEY1_DOWN ( !(PINA &amp; KEY1) )<br />#define KEY2_DOWN ( !(PINA &amp; KEY2) )<br /> <br />#define SERVO1 (1&lt;&lt;PB0)<br />#define SERVO2 (1&lt;&lt;PB1)<br /> <br />#define SERVO_MID       1500<br />#define SERVO_MIN       600<br />#define SERVO_MAX       4500<br /> <br /> <br />uint16_t servo1, servo2;<br />volatile uint8_t key_flag;<br /> <br />int main(void)<br />{<br /> <br />        DDRB |= SERVO1 | SERVO2;<br />        TCCR1A |= 1&lt;&lt;WGM11;<br />        TCCR1B |= 1&lt;&lt;WGM12 | 1&lt;&lt;WGM13 | 1&lt;&lt;CS10;<br />        TIMSK1 |= 1&lt;&lt;OCIE1A;<br /> <br />        ICR1 = 19999;//rozciagnij, zawez okres<br /> <br />        sei();//uruchomienie przerwań<br /> <br />        while(1)<br />                {<br />                        if(key_flag)<br />                        {<br />                                key_flag = 0;<br />                                if (KEY1_DOWN) //klawisz 1 wcisniety<br />                                {<br />                                        servo1 = SERVO_MAX;<br />                                        servo2 = SERVO_MIN;<br />                                }<br />                                if (KEY2_DOWN) //klawisz 2 wcisniety<br />                                {<br />                                        servo1 = SERVO_MIN;<br />                                        servo2 = SERVO_MAX;<br />                                }<br />                        }<br />                if(TCNT1 &gt; servo1) PORTB &amp;= ~SERVO1; //nakierowanie mechanizmu przerwania<br />                if(TCNT1 &gt; servo2) PORTB &amp;= ~SERVO2;<br />                }<br />}<br />ISR (TIMER1_COMPA_vect)<br />{<br />        PORTB |= SERVO1 | SERVO2;<br />        key_flag = 1;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1467">kamil7417</a> — 11 maja 2015, o 17:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Panicz74]]></name></author>
<updated>2015-05-11T17:47:26+01:00</updated>
<published>2015-05-11T17:47:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128866#p128866</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128866#p128866"/>
<title type="html"><![CDATA[Re: Atmega644 Pozycjonowanie serwa - proszę o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128866#p128866"><![CDATA[
Już to empirycznie sprawdziłem i sygnał od 600 do 2500 daje obrót 90stopni. Po wydłużeniu do 4500 otrzymałem obrót o 180stopni. Serwo to TowerPro SG-5010.<br /><br />Funkcja za generowanie sygnału? Znaczy się czegoś tam brakuje? Posiłkowałem się tym kodem:<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 8 maj 2015<br /> *      Author: Radek<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 /><br /><br />#define KEY1    (1&lt;&lt;PA0)<br />#define KEY2    (1&lt;&lt;PA1)<br />#define KEY3    (1&lt;&lt;PA2)<br />#define KEY4    (1&lt;&lt;PA3)<br />#define KEY5    (1&lt;&lt;PA4)<br />#define KEY6    (1&lt;&lt;PA5)<br />#define KEY7    (1&lt;&lt;PA6)<br />#define KEY8    (1&lt;&lt;PA7)<br />#define KEY9    (1&lt;&lt;PD6)<br />#define KEY10   (1&lt;&lt;PD7)<br /><br />#define KEY1_DOWN ( !(PINA &amp; KEY1) )<br />#define KEY2_DOWN ( !(PINA &amp; KEY2) )<br />#define KEY3_DOWN ( !(PINA &amp; KEY3) )<br />#define KEY4_DOWN ( !(PINA &amp; KEY4) )<br />#define KEY5_DOWN ( !(PINA &amp; KEY5) )<br />#define KEY6_DOWN ( !(PINA &amp; KEY6) )<br />#define KEY7_DOWN ( !(PINA &amp; KEY7) )<br />#define KEY8_DOWN ( !(PINA &amp; KEY8) )<br />#define KEY9_DOWN ( !(PIND &amp; KEY9) )<br />#define KEY10_DOWN ( !(PIND &amp; KEY10) )<br /><br />#define SERVO1 (1&lt;&lt;PB0)<br />#define SERVO2 (1&lt;&lt;PB1)<br />#define SERVO3 (1&lt;&lt;PB2)<br />#define SERVO4 (1&lt;&lt;PB3)<br />#define SERVO5 (1&lt;&lt;PB4)<br /><br />#define SERVO_MID       1500<br />#define SERVO_MIN       600<br />#define SERVO_MAX       4500<br /><br />uint16_t servo1, servo2, servo3, servo4, servo5;<br />volatile uint8_t key_flag;//informacja dla kompilatora zeby mi sam nie zmienil tej zmiennej<br /><br />int main(void)<br />{<br />        servo1 = servo2 = servo3 = servo4 = servo5 = SERVO_MID;<br />        PORTA |= KEY1 | KEY2 | KEY3 | KEY4 | KEY5 | KEY6 | KEY7 | KEY8; //podciagnięcie wejsc<br />        PORTD |= KEY9 | KEY10;<br />        DDRB |= SERVO1 | SERVO2 | SERVO3 | SERVO4 | SERVO5; //wyjscia<br />        TCCR1A |= 1&lt;&lt;WGM11;<br />        TCCR1B |= 1&lt;&lt;WGM12 | 1&lt;&lt;WGM13 | 1&lt;&lt;CS10;<br />        TIMSK1 |= 1&lt;&lt;OCIE1A;<br /><br />        ICR1 = 19999;//rozciagnij, zawez okres<br /><br />        sei();//uruchomienie przerwań<br /><br />        while(1)<br />        {<br />                if(key_flag)<br />                {<br />                        key_flag = 0;<br />                        if (KEY1_DOWN) //klawisz 1 wcisniety<br />                        {<br />                                if(servo1 &lt; SERVO_MAX) servo1+=50;<br />                        }<br />                        if (KEY2_DOWN) //klawisz 2 wcisniety<br />                        {<br />                                if(servo1 &gt; SERVO_MIN) servo1-=50;<br />                        }<br /><br />                        if (KEY3_DOWN) //klawisz 3 wcisniety<br />                        {<br />                                if(servo2 &lt; SERVO_MAX) servo1++;<br />                        }<br />                        if (KEY4_DOWN) //klawisz 4 wcisniety<br />                        {<br />                                if(servo2 &gt; SERVO_MIN) servo2--;<br />                        }<br /><br />                        if (KEY5_DOWN) //klawisz 5 wcisniety<br />                        {<br />                                if(servo3 &lt; SERVO_MAX) servo3++;<br />                        }<br />                        if (KEY6_DOWN) //klawisz 6 wcisniety<br />                        {<br />                                if(servo3 &gt; SERVO_MIN) servo3--;<br />                        }<br /><br />                        if (KEY7_DOWN) //klawisz 7 wcisniety<br />                        {<br />                                if(servo4 &lt; SERVO_MAX) servo4++;<br />                        }<br />                        if (KEY8_DOWN) //klawisz 8 wcisniety<br />                        {<br />                                if(servo4 &gt; SERVO_MIN) servo4--;<br />                        }<br /><br />                        if (KEY9_DOWN) //klawisz 9 wcisniety<br />                        {<br />                                if(servo5 &lt; SERVO_MAX) servo5+=20;<br />                        }<br />                        if (KEY10_DOWN) //klawisz 10 wcisniety<br />                        {<br />                                if(servo5 &gt; SERVO_MIN) servo5-=20;<br />                        }<br />                }<br />                if(TCNT1 &gt; servo1) PORTB &amp;= ~SERVO1; //nakierowanie mechanizmu przerwania<br />                if(TCNT1 &gt; servo2) PORTB &amp;= ~SERVO2;<br />                if(TCNT1 &gt; servo3) PORTB &amp;= ~SERVO3;<br />                if(TCNT1 &gt; servo4) PORTB &amp;= ~SERVO4;<br />                if(TCNT1 &gt; servo5) PORTB &amp;= ~SERVO5;<br />        }<br />}<br /><br />ISR (TIMER1_COMPA_vect)<br />{<br />        PORTB |= SERVO1 | SERVO2 | SERVO3 | SERVO4 | SERVO5;<br />        key_flag = 1;<br />}[/syntax]<br /><br />Działa na zasadzie sterowanie ręcznego. Wciskam przycisk to serwo się obraca, puszczam to się zatrzymuje. Ten kod na pewno działa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9088">Panicz74</a> — 11 maja 2015, o 17:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jerrylu]]></name></author>
<updated>2015-05-11T17:50:57+01:00</updated>
<published>2015-05-11T17:46:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128865#p128865</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128865#p128865"/>
<title type="html"><![CDATA[Re: Atmega644 Pozycjonowanie serwa - proszę o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128865#p128865"><![CDATA[
Nie bardzo rozumiem filozofię tego programu.<br />Masz zdefiniowane przesunięcia bitowe:<br />[syntax=c]#define SERVO1 (1&lt;&lt;PB0)<br />#define SERVO2 (1&lt;&lt;PB1)[/syntax]<br />A potem przypisujesz im wartości?:<br />[syntax=c]servo1 = SERVO_MAX;<br />servo2 = SERVO_MIN;[/syntax]<br /><br />Mają one poprawne zastosowanie w linii: <br />[syntax=c]PORTB |= SERVO1 | SERVO2;[/syntax]<br /><br />UPSS! Sorry. Coś mi na oczy padło, to inne zmienne!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8719">jerrylu</a> — 11 maja 2015, o 17:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kamil7417]]></name></author>
<updated>2015-05-11T17:41:10+01:00</updated>
<published>2015-05-11T17:41:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128862#p128862</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128862#p128862"/>
<title type="html"><![CDATA[Re: Atmega644 Pozycjonowanie serwa - proszę o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128862#p128862"><![CDATA[
Może jestem ślepy, ale gdzie tu jest funkcja odpowiedzialna za generowanie sygnału do sterowania serwami?<br /><br />A tak poza tym to sygnał PWM sterujący serwami ma częstotliwość 50 Hz, więc okres wynosi 20 ms. Stan wysoki trwa teoretycznie od 1 ms (lewa pozycja) do 2 ms (prawa pozycja). <br />Z doświadczenia wiem, że szerokość impulsów może być większa.W przypadku serwa TowerPro SG90 jest to 0,5 - 2,5 ms.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1467">kamil7417</a> — 11 maja 2015, o 17:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Panicz74]]></name></author>
<updated>2015-05-11T17:13:29+01:00</updated>
<published>2015-05-11T17:13:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128857#p128857</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128857#p128857"/>
<title type="html"><![CDATA[Atmega644 Pozycjonowanie serwa - proszę o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128857#p128857"><![CDATA[
Witam,<br /><br />Napisałem taki program:<br />Przycisk KEY1 daj obrót 2 serw w przeciwnych kierunkach o 180stopni, przycisk KEY2 to samo w drugą stronę. <br />Program bez problemu się kompiluje i wgrywa, Eclipse nie pokazuje żadnych błędów. Po naciśnięciu któregokolwiek przycisku serwa jednak nie reagują.<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 11 maj 2015<br /> *      Author: Radek<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 /><br />#define KEY1    (1&lt;&lt;PA0)<br />#define KEY2    (1&lt;&lt;PA1)<br /><br />#define KEY1_DOWN ( !(PINA &amp; KEY1) )<br />#define KEY2_DOWN ( !(PINA &amp; KEY2) )<br /><br />#define SERVO1 (1&lt;&lt;PB0)<br />#define SERVO2 (1&lt;&lt;PB1)<br /><br />#define SERVO_MID       1500<br />#define SERVO_MIN       600<br />#define SERVO_MAX       4500<br /><br /><br />uint16_t servo1, servo2;<br />volatile uint8_t key_flag;<br /><br />int main(void)<br />{<br /><br />DDRB |= SERVO1 | SERVO2;<br />TCCR1A |= 1&lt;&lt;WGM11;<br />TCCR1B |= 1&lt;&lt;WGM12 | 1&lt;&lt;WGM13 | 1&lt;&lt;CS10;<br />TIMSK1 |= 1&lt;&lt;OCIE1A;<br /><br />ICR1 = 19999;//rozciagnij, zawez okres<br /><br />sei();//uruchomienie przerwań<br /><br />while(1)<br />        {<br />                if(key_flag)<br />                {<br />                        key_flag = 0;<br />                        if (KEY1_DOWN) //klawisz 1 wcisniety<br />                        {<br />                                servo1 = SERVO_MAX;<br />                                servo2 = SERVO_MIN;<br />                        }<br />                        if (KEY2_DOWN) //klawisz 2 wcisniety<br />                        {<br />                                servo1 = SERVO_MIN;<br />                                servo2 = SERVO_MAX;<br />                        }<br />                }<br />        }<br />}<br />ISR (TIMER1_COMPA_vect)<br />{<br />        PORTB |= SERVO1 | SERVO2;<br />        key_flag = 1;<br />}[/syntax]<br /><br />Czy ktoś wie co znowu źle zrobiłem w kodzie?<br /><br />Połączenia są na pewno ok bo bardzo podobny program do sterowanie ręcznego działa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9088">Panicz74</a> — 11 maja 2015, o 17:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Panicz74]]></name></author>
<updated>2015-05-07T22:53:32+01:00</updated>
<published>2015-05-07T22:53:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128543#p128543</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128543#p128543"/>
<title type="html"><![CDATA[Re: Sterowanie serwem Atmega644P - proszę o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128543#p128543"><![CDATA[
Działa elegancko! Dokładnie o to i chodziło. Ostatnie pytanie brzmi:<br /><br />1. Czy można jakoś zwiększyć prędkość serwa? Regulacja ICR1 w dół trochę daje ale niewiele, poza tym serwo traci wtedy na dokładności.<br /><br />Nie mogłem spać i wykombinowałem:) Mój sposób to:<br /><br />[syntax=c]if (KEY1_DOWN) //klawisz 1 wcisniety<br />                        {<br />                                if(servo1 &lt; SERVO_MAX) servo1+=4;<br />                        }<br />                        if (KEY2_DOWN) //klawisz 2 wcisniety<br />                        {<br />                                if(servo1 &gt; SERVO_MIN) servo1+=4;<br />                        }[/syntax]<br /><br />Od razu przyspieszyło <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Chociaż tyle sam wykombinowałem bo wszystko to kolega Krauser zrobił elegancko.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9088">Panicz74</a> — 7 maja 2015, o 22:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-05-07T22:13:41+01:00</updated>
<published>2015-05-07T22:13:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128541#p128541</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128541#p128541"/>
<title type="html"><![CDATA[Re: Sterowanie serwem Atmega644P - proszę o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128541#p128541"><![CDATA[
Niepotrzebnie zerujesz port A i pozbywasz się podciągania. Porównywać należy wartość timera ze zmienną odpowiadającą za wypełnienie:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />#define KEY1(1&lt;&lt;PA0)<br />#define KEY2(1&lt;&lt;PA1)<br />#define KEY1_DOWN ( !(PINA &amp; KEY1) )<br />#define KEY2_DOWN ( !(PINA &amp; KEY2) )<br />#define SERVO1 (1&lt;&lt;PB0)<br />#define SERVO2 (1&lt;&lt;PB1)<br /><br />#define SERVO_MID1500<br />#define SERVO_MIN1000<br />#define SERVO_MAX2000<br /><br />uint16_t servo1, servo2;<br />volatile uint8_t key_flag;<br /><br />int main(void)<br />{<br />servo1 = servo2 = SERVO_MID;<br />PORTA |= KEY1 | KEY2; //podciagnięcie wejsc<br />DDRB |= SERVO1 | SERVO2; //wyjscia<br />TCCR1A |= 1&lt;&lt;WGM11;<br />TCCR1B |= 1&lt;&lt;WGM12 | 1&lt;&lt;WGM13 | 1&lt;&lt;CS10;<br />TIMSK1 |= 1&lt;&lt;OCIE1A;<br /><br />ICR1 = 19999;<br /><br />sei();<br /><br />while(1)<br />{<br />if(key_flag)<br />{<br />key_flag = 0;<br />if (KEY1_DOWN) //klawisz 1 wcisniety<br />{<br />if(servo1 &lt; SERVO_MAX) servo1++;<br />}<br />if (KEY2_DOWN) //klawisz 2 wcisniety<br />{<br />if(servo1 &gt; SERVO_MIN) servo1--;<br />}<br />}<br />if(TCNT1 &gt; servo1) PORTB &amp;= ~SERVO1;<br />if(TCNT1 &gt; servo2) PORTB &amp;= ~SERVO2;<br />}<br />}<br /><br />ISR (TIMER1_COMPA_vect)<br />{<br />PORTB |= SERVO1 | SERVO2;<br />key_flag = 1;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 7 maja 2015, o 22:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Panicz74]]></name></author>
<updated>2015-05-07T21:51:04+01:00</updated>
<published>2015-05-07T21:51:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128540#p128540</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128540#p128540"/>
<title type="html"><![CDATA[Re: Sterowanie serwem Atmega644P - proszę o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128540#p128540"><![CDATA[
Tylko, że ja finalnie będę musiał sterować 5 serwami, każde dostanie 2 mikrostyki. Dlatego też robię to w przerwaniu by użyć jednego timera dla wszystkich serwonapędów. Gdybym miał sterować jednym serwem to ok rozwiązanie jak najbardziej, ale muszę się dowiedzieć jak to zrobić programowo. Może jakiś jeszcze inny pomysł? <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=9088">Panicz74</a> — 7 maja 2015, o 21:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-05-07T21:42:09+01:00</updated>
<published>2015-05-07T21:42:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128538#p128538</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128538#p128538"/>
<title type="html"><![CDATA[Re: Sterowanie serwem Atmega644P - proszę o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128538#p128538"><![CDATA[
A chcesz korzystać ze sprzętowego PWM czy nie? Widzę że masz skonfigurowany Timer 1 w Fast PWM, ale nie jest podpięte do PD5/OC1A. Program powinien wyglądać mniej więcej tak:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define KEY1(1&lt;&lt;PA0)<br />#define KEY2(1&lt;&lt;PA1)<br />#define KEY1_DOWN ( !(PINA &amp; KEY1) )<br />#define KEY2_DOWN ( !(PINA &amp; KEY2) )<br /><br />#define SERVO(1&lt;&lt;PD5)<br /><br />#define SERVO_MID1500 <br />#define SERVO_MIN1000<br />#define SERVO_MAX2000<br /> <br />int main(void)<br />{<br />PORTA |= KEY1 | KEY2; //podciagnięcie wejsc<br />        DDRD |= SERVO; //wyjscie<br />TCCR1A |= 1&lt;&lt;WGM11;<br />TCCR1B |= 1&lt;&lt;WGM12 | 1&lt;&lt;WGM13 | 1&lt;&lt;CS10; //Fast PWM, ICR1=TOP, Preskaler 1<br />ICR1 = 19999; //20 ms dla 1 MHz z preskalerem 1<br />OCR1A = SERVO_MID; //ustawienie w pozycji środkowej<br />TCCR1A |= 1&lt;&lt;COM1A1; //wlaczenie wyjscia PWM PD5/OCR1A L dla TCNT1 = 19 999, H dla TCNT1 = 0<br /><br />while(1)<br />{<br />        _delay_us(500); //regulacja szybkosci zmian polozenia serva 5000 * 0,5 ms = 2,5 s<br />if (KEY1_DOWN) //klawisz 1 wcisniety<br />{<br />if(OCR1A &lt; SERVO_MAX) OCR1A++;<br />}<br />if (KEY2_DOWN) //klawisz 2 wcisniety<br />{<br />if(OCR1A &gt; SERVO_MIN) OCR1A--;<br />}<br />}<br />}[/syntax]<br /><br />W sprzętowym PWM przerwania nie są potrzebne. Wypełnienie zmienia się wpisując jakąś liczbę do rejestru OCR1A (dla kanału A)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 7 maja 2015, o 21:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Panicz74]]></name></author>
<updated>2015-05-07T21:06:13+01:00</updated>
<published>2015-05-07T21:06:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128535#p128535</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128535#p128535"/>
<title type="html"><![CDATA[Sterowanie serwem Atmega644P - proszę o sprawdzenie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128535#p128535"><![CDATA[
Witam,<br /><br />Sprzęt:<br />-Atmega644P, takt. 1mgh,<br />-serwo SG-5010 (PB0),<br />-środowisko Eclipse,<br />-mikrostyki (PA0, PA1),<br /><br />Chciałbym kierować serwem jak silnikiem, wciskam przycisk jedzie aż osiągnie granicę czyli 180stopni, puszczam przycisk to przestaje jechać. Dane są dwa mikrostyki odpowiednio w lewo i prawo. Po wgraniu kodu serwo zaczyna zachowywać się jak chce i zaczyna kręcić się samo we wszystkich kierunkach. Oto kod: <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />int main(void)<br />{<br />DDRB = 0xFF;<br /><br />DDRA = 0x00;<br />PORTA = 0xFF;<br /><br />TCCR1A |= 1&lt;&lt;WGM11;<br />TCCR1B |= 1&lt;&lt;WGM12 | 1&lt;&lt;WGM13 | 1&lt;&lt;CS10;<br />TIMSK1 |= 1&lt;&lt;OCIE1A;<br /><br />ICR1 = 19999;<br /><br />sei();<br /><br />while(1)<br /><br />{<br /><br />if (!(PINA &amp; (1&lt;&lt;PA0)))<br />{<br />if (TCNT1 &gt;= 2500 &amp;&amp; bit_is_set(PORTB, PINB0)) PORTB &amp;= ~(1&lt;&lt;PINB0);<br />}<br />else if (!(PINA &amp; (1&lt;&lt;PA1)))<br />{<br />if (TCNT1 &gt;= 800 &amp;&amp; bit_is_set(PORTB, PINB0)) PORTB &amp;= ~(1&lt;&lt;PINB0);<br />}<br />else<br />{<br />PORTA = 0;<br />}<br /><br />}<br />}<br /><br /><br />ISR (TIMER1_COMPA_vect)<br />{<br />PORTB = 0xFF;<br />PORTA = 0xFF;<br />}[/syntax]<br /><br />Czy ktoś wie co zrobiłem nie tak?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9088">Panicz74</a> — 7 maja 2015, o 21:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Panicz74]]></name></author>
<updated>2015-05-07T20:49:56+01:00</updated>
<published>2015-05-07T20:49:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128533#p128533</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128533#p128533"/>
<title type="html"><![CDATA[Re: Serwo + potencjometr - problem ze sterowaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128533#p128533"><![CDATA[
Już się zabieram za poradniki. Spróbuję to zrobić na mikrostykach i pewnie przeniosę temat do innego działu. Dzięki za pomoc, teraz już wiem gdzie szukać przyczyn.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9088">Panicz74</a> — 7 maja 2015, o 20:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2015-05-07T20:38:28+01:00</updated>
<published>2015-05-07T20:38:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128531#p128531</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128531#p128531"/>
<title type="html"><![CDATA[Re: Serwo + potencjometr - problem ze sterowaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128531#p128531"><![CDATA[
Uśrednianie jest bardzo ważne. W swoich projektach mam co najmniej wynik z 16 pomiarów, a czasem z 64. Poprawa widoczna jest gołym okiem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 7 maja 2015, o 20:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ciamciak]]></name></author>
<updated>2015-05-07T15:26:21+01:00</updated>
<published>2015-05-07T15:26:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128499#p128499</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128499#p128499"/>
<title type="html"><![CDATA[Re: Serwo + potencjometr - problem ze sterowaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128499#p128499"><![CDATA[
Już sprawdziłeś.<br />Do przyswojenia seria poradników o ADC, a w nim o uśrednianiu wyników.<br />Możesz też potestować z innymi potencjometrami.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1254">ciamciak</a> — 7 maja 2015, o 15:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Panicz74]]></name></author>
<updated>2015-05-06T22:27:31+01:00</updated>
<published>2015-05-06T22:27:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128426#p128426</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128426#p128426"/>
<title type="html"><![CDATA[Re: Serwo + potencjometr - problem ze sterowaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128426#p128426"><![CDATA[
Szumy z ADC? Nie pomyślałem o tym... Jak z palca wbijam programowo jakąś wartość to nie drga. Ustawia się jak trzeba i stoi. Jak sprawdzić w takim razie czy to szumy? Jakiś filtr zastosować jakąś metodą?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9088">Panicz74</a> — 6 maja 2015, o 22:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ciamciak]]></name></author>
<updated>2015-05-06T22:22:30+01:00</updated>
<published>2015-05-06T22:22:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128425#p128425</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128425#p128425"/>
<title type="html"><![CDATA[Re: Serwo + potencjometr - problem ze sterowaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128425#p128425"><![CDATA[
A to nie są czasem szumy z ADC?<br />Jak wbijesz klawiszami jakieś zadane wartości, też jest to samo?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1254">ciamciak</a> — 6 maja 2015, o 22:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Panicz74]]></name></author>
<updated>2015-05-06T21:58:48+01:00</updated>
<published>2015-05-06T21:58:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128419#p128419</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128419#p128419"/>
<title type="html"><![CDATA[Re: Serwo + potencjometr - problem ze sterowaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128419#p128419"><![CDATA[
Może te filmy zbliżą problem. Nadal gdy chcę zatrzymać serwo zaczyna ono drgać. Na pewno jest gdzieś jakaś liczba skopana w kodzie, tylko że ja nie potrafię jej odnaleźć <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> Proszę pomóżcie. <br /><br />Oto filmy:<br /><br />[youtube]<br /><!-- m --><a class="postlink" href="https://www.youtube.com/watch?v=QpwNJqae9dc&amp;feature=youtu.be" >https://www.youtube.com/watch?v=QpwNJqa ... e=youtu.be</a><!-- m --><br />[/youtube]<br /><br />[youtube]<br /><!-- m --><a class="postlink" href="https://www.youtube.com/watch?v=Px0jEcXOJtA" >https://www.youtube.com/watch?v=Px0jEcXOJtA</a><!-- m --><br />[/youtube]<br /><br />Nie mogę do tego dojść. Wszędzie gdzie patrzę to wszystkim się ładnie serwo obraca tylko mi tak skacze...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9088">Panicz74</a> — 6 maja 2015, o 21:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-05-06T20:42:21+01:00</updated>
<published>2015-05-06T20:42:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128413#p128413</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128413#p128413"/>
<title type="html"><![CDATA[Re: Serwo + potencjometr - problem ze sterowaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128413#p128413"><![CDATA[
Witam<br />Myślałem, że zauważysz; przedtem ICR miałeś <span style="text-decoration: underline">320.000</span> - Twoim zamiarem ( chyba) było 32.000<br />Kiedyś bawiłem się serwem, ale poszedłem inną drogą - jak chcesz to spróbuj:<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2014-04-17<br /> *      Author: Andrzej Z<br /> *<br /> *  procesor ATtiny13<br /> *  takt 9,6MHz - wew<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />//#include &lt;util/delay.h&gt;<br /><br />#define OUT_SERWO   (1&lt;&lt;PB0)<br />#define OUT_LED     (1&lt;&lt;PB1)<br />#define POMIAR (1&lt;&lt;MUX1)|(1&lt;&lt;MUX0)  //PB3<br /><br />volatile uint16_t czas_serwo;<br />volatile uint8_t test_led =0 ;<br />uint16_t licz_serwo_1;<br />void pomiar(void);<br /><br /><br />int  main(void)<br /><br /> {<br />  DDRB |= OUT_SERWO|OUT_LED;  // portB0 wyjście serwa<br />  PORTB |= OUT_LED;<br /><br />/* pomiar napięcia na potencjometrze */<br />   ADCSRA |= (1&lt;&lt;ADEN);                //uruchominie przetwornika<br />   ADCSRA |= (1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1); //|(1&lt;&lt;ADPS0);    // preskaler128<br />   ADMUX |= POMIAR;<br />   //Vref = Vcc<br /><br /> /* Timer  - inicjalizacja przerwania co 1ms */<br /><br />   TCCR0A |= (1&lt;&lt;WGM01);            // tryb CTC<br />   TCCR0B |= (1&lt;&lt;CS00);   // preskaler 1<br />   OCR0A = 5;<br />   TIMSK0 |= (1&lt;&lt;OCIE0A);<br /><br />    sei();<br /><br />   while(1)<br /><br />         {<br /><br />     pomiar();<br />    czas_serwo =90+(licz_serwo_1/4);<br /><br /><br /><br />         }<br />   }<br /><br />ISR(TIM0_COMPA_vect)<br /><br />{<br /><br />      static uint16_t cnt;<br /><br />      (cnt&gt;=czas_serwo)? (PORTB &amp;= ~OUT_SERWO):(PORTB |=OUT_SERWO); // 320 - max, 90 - min<br />      if(50 ==test_led) PORTB ^= OUT_LED;<br />       cnt++;<br /><br />      if(cnt&gt;4500) cnt=0;<br />      if(4500 ==cnt) test_led++;<br />      if(test_led&gt;50) test_led=0;<br /><br />}<br /><br /><br />void pomiar (void)<br />{<br />    ADMUX = (ADMUX &amp; 0xF8) | POMIAR ; // maska + właczenie PIN pomiar<br />    ADCSRA |= (1&lt;&lt;ADSC);<br />    while (ADCSRA &amp; (1&lt;&lt;ADSC));<br />    licz_serwo_1 = ADC;<br /><br />}<br /><br />/*       ****** I TO BY BYŁO NA TYLE *******       */[/syntax]<br />Co prawda inny uC, ale to nie problem.<br />Szczerze mówiąc nie pamiętam jak to chodziło, a teraz nie chce mi się spinać tego żeby sprawdzić.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 6 maja 2015, o 20:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Panicz74]]></name></author>
<updated>2015-05-06T20:17:42+01:00</updated>
<published>2015-05-06T20:17:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128412#p128412</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128412#p128412"/>
<title type="html"><![CDATA[Re: Serwo + potencjometr - problem ze sterowaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128412#p128412"><![CDATA[
Zmniejszyłem zakres do:<br /><br />[syntax=c]ICR1 = 10000;[/syntax]<br /><br />Jest trochę lepiej ale dalej serwo i orczyk wykonują drgania w każdą stronę. Nie można tego jakoś zniwelować?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9088">Panicz74</a> — 6 maja 2015, o 20:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-05-06T20:00:42+01:00</updated>
<published>2015-05-06T20:00:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128411#p128411</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128411#p128411"/>
<title type="html"><![CDATA[Re: Serwo + potencjometr - problem ze sterowaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128411#p128411"><![CDATA[
Witam<br />[syntax=c]ICR1 = 320000;[/syntax]<br />...nie za dużo ciut ?  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 6 maja 2015, o 20:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Panicz74]]></name></author>
<updated>2015-05-06T19:47:56+01:00</updated>
<published>2015-05-06T19:47:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128409#p128409</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128409#p128409"/>
<title type="html"><![CDATA[Serwo + potencjometr - problem ze sterowaniem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11664&amp;p=128409#p128409"><![CDATA[
Witam,<br /><br />Sprzęt:<br />-Atmega644P + kwarc 16mgh,<br />-Serwo TowerPro GS-5010, (na pinie PD5/OC1A)<br />-potencjometr A10k. (na pinie PA0/ADC0)<br />-środowisko Eclipse Luna,<br />-Fusbity ustawiane za pomocą MkAVRCalculator, programator Atnel.<br /><br />Problem: <br />Za pomocą załączonego kodu, gdy steruje potencjometrem, ciężko ustawić je w zadanej pozycji. Albo szarpie i nie może się ustawić albo od razu przesuwa się do końca i szarpie. Pewnie coś źle zrobiłem w kodzie. Takie problemy mam zarówno na taktowaniu obecnym 16mgh jak i na fabrycznym 1mgh. Pewnie coś źle obliczyłem.<br /><br />Może ktoś mądrzejszy ode mnie poradzi co tu jest nie tak? <br /><br />Oto kod:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />static volatile uint16_t theTenBitResults;<br /><br />int main(void)<br />{<br />DDRD |= 0xFF;<br />TCCR1A |= 1&lt;&lt;WGM11 | 1&lt;&lt;COM1A1 | 1&lt;&lt;COM1A0;<br />TCCR1B |= 1&lt;&lt;WGM12 | 1&lt;&lt;WGM13 | 1&lt;&lt;CS10;<br /><br />ICR1 = 320000;<br /><br />ADCSRA |= 1&lt;&lt;ADPS2;<br />ADMUX |= (1&lt;&lt;REFS0) | (1&lt;&lt;REFS1);<br />ADCSRA |= 1&lt;&lt;ADIE;<br />ADCSRA |= 1&lt;&lt;ADEN;<br /><br />sei();<br /><br />ADCSRA |= 1&lt;&lt;ADSC;<br /><br />float y1 = 1;<br />float y2 = 4000;<br /><br />float m = (y2 - y1)/1023;<br /><br /><br />while (1)<br />{<br />OCR1A = ICR1 - (m * theTenBitResults) + 800;<br />}<br />}<br />ISR(ADC_vect)<br />{<br />uint8_t theLowADC = ADCL;<br />theTenBitResults = ADCH&lt;&lt;8 | theLowADC;<br /><br /><br />ADCSRA |= 1&lt;&lt;ADSC;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9088">Panicz74</a> — 6 maja 2015, o 19:47</p><hr />
]]></content>
</entry>
</feed>