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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-09-20T12:49:32+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=16237&amp;mode</id>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-09-20T12:49:32+01:00</updated>
<published>2016-09-20T12:49:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=169065#p169065</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=169065#p169065"/>
<title type="html"><![CDATA[Re: Sterowanie serwem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=169065#p169065"><![CDATA[
Tak, tak.<br />Tam wczesniej jak się wczytasz napisałem PROPORCJONALNIE.<img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br />Pozdrawia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 20 wrz 2016, o 12:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Koziol96]]></name></author>
<updated>2016-09-20T10:00:55+01:00</updated>
<published>2016-09-20T10:00:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=169046#p169046</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=169046#p169046"/>
<title type="html"><![CDATA[Re: Sterowanie serwem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=169046#p169046"><![CDATA[
Dzięki wam jest progres <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  serwo już się obraca i strasznie trzeszczy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> myślę że chce mi powiedzieć że źle zrozumiałem kolegę Daro69 <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />.<br />Dla pewności zapytam : Czy szerokość impulsu ustawia KIERUNEK obrotu czy POZYCJĘ serwa .<br />np. czy szerokość 2ms powoduje obrót w prawo czy ustawienie pozycji + 45 czy tam 180 stopni<br /><br /><br />EDIT:<br />Tak serwo miało racje źle zrozumiałem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> szerokość sygnału ustawia POZYCJĘ (kurde jakie to mądre <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />)<br /><br />wklejam cały kod może kiedyś komuś się przyda :<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />#define KEY1_PIN (1&lt;&lt;PB0)<br />#define KEY2_PIN (1&lt;&lt;PB1)<br />#define KEY3_PIN (1&lt;&lt;PB2)<br /><br /><br />uint8_t klawisz_wcisniety(uint8_t klawisz);<br /><br /><br /><br />int main(void)<br />{<br /><br />DDRD |= (1&lt;&lt;PD5) | (1&lt;&lt;PD6);<br />DDRB &amp;= ~ (KEY1_PIN | KEY2_PIN | KEY3_PIN ) ;<br />PORTB |= KEY1_PIN | KEY2_PIN | KEY3_PIN ;<br /><br /> /* ustawienie PWM sprzętowe 50 Hz */<br />        TCCR1A = (1 &lt;&lt; COM1A1) | (1 &lt;&lt; COM1B1) | (1 &lt;&lt; WGM11); //tryb pracy licznika Fast PWM (15)<br />        TCCR1B = (1 &lt;&lt; CS11) | (1 &lt;&lt; WGM12) | (1 &lt;&lt; WGM13); // prescaler 8<br />        ICR1 = 20000; //przerwanie co 20ms<br />        OCR1A = 1500 ;<br /><br /><br />while(1)<br />{<br /><br />if(  klawisz_wcisniety(KEY1_PIN)  ) OCR1A = OCR1A + 10 ;// obrót w prawo<br />if(  klawisz_wcisniety(KEY2_PIN)  ) OCR1A = 1500 ;// pozycja neutralna <br />if(  klawisz_wcisniety(KEY3_PIN)  ) OCR1A = OCR1A - 10 ;// obrót w lewo<br /><br />}<br /><br /><br />}<br /><br />uint8_t klawisz_wcisniety(uint8_t klawisz)<br />{<br />if( !(PINB &amp; klawisz) )// klawisz wciśnięty ?<br />{<br />_delay_ms(80);// czas drgań styków<br />if( !(PINB &amp; klawisz) ) return 1;   // jeśli wciśnięty?  zakończ funkcję - rezultat = 1<br />}<br /><br />return 0;// jeśli nie wciśnięty klawisz, zakończ funkcję, rezultat = 0<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14772">Koziol96</a> — 20 wrz 2016, o 10:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-09-19T17:42:19+01:00</updated>
<published>2016-09-19T17:42:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168980#p168980</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168980#p168980"/>
<title type="html"><![CDATA[Re: Sterowanie serwem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168980#p168980"><![CDATA[
A ja się tyle napisałem  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> <br />A kolega kicajek już odpowiedział.<br />Dodam tylko ze w Twoim kodzie masz przerwanie co 20ms. a powinno być 256 x częściej. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 19 wrz 2016, o 17:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-09-19T17:19:24+01:00</updated>
<published>2016-09-19T17:19:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168977#p168977</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168977#p168977"/>
<title type="html"><![CDATA[Re: Sterowanie serwem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168977#p168977"><![CDATA[
Witam<br /><div class="quotetitle">Koziol96 napisał(a):</div><div class="quotecontent"><br />Może mi ktoś objaśnić jak działa rejstr ICR ?<br /></div><br /> <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><div class="quotetitle">Daro69 napisał(a):</div><div class="quotecontent"><br />W trybie 14 <strong>ICR</strong> określa maksymalna wartość licznika - częstotliwość powtarzania sygnalu- <br />A <strong>OCRx</strong> określa wartość porównania.<br /></div><br />A tak w prosty sposób:<br />w &quot;normalnym&quot; trybie licznik TIMER1 liczy do wartości 16bit i zostaje wyzerowany, korzystając z ICR określamy tą wartość.<br />W tym wypadku OCRx z oczywistych względów nie może być większe od ICR bo te dwie wartości są porównywane.<br /><br />Pozdr.<br /><br />edit:<br />może spróbuj dać odwrotnie, zamiast:<br />[syntax=c]if(licznik&gt;= pwm) PORTC |= (1&lt;&lt;PC0); else PORTC &amp;=~(1&lt;&lt;PC0);[/syntax]<br />daj:<br />[syntax=c]if(licznik&gt;= pwm) PORTC &amp;=~(1&lt;&lt;PC0); else PORTC |= (1&lt;&lt;PC0);[/syntax]<br /><br />Tutaj znalazłem taki kod co molestowałem ATtiny13 - SERWO/ADC - korzystałem z pwm_prog.:<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2014-04-17<br /> *      Author: Kicajek<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 />...zabij - nie pamietam co to było z tym LED'em  <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=826">kicajek</a> — 19 wrz 2016, o 17:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Koziol96]]></name></author>
<updated>2016-09-19T16:13:46+01:00</updated>
<published>2016-09-19T16:13:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168975#p168975</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168975#p168975"/>
<title type="html"><![CDATA[Re: Sterowanie serwem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168975#p168975"><![CDATA[
Tak wyjście jest ustawione. w razie czego wkleję cały kod.<br />Kicajek dzięki za kod sprawdzę  czy w ATmega32 rejestry timera są takie same i spróbuję takich samych ustawień w swoim kodzie.<br /><br />Może mi ktoś objaśnić jak działa rejstr ICR ?<br /><br />[syntax=c]ICR1 = 20000; //przerwanie co 20ms[/syntax]<br /><br />skąd to się bierze ?<br /><br />CAŁY KOD :<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />#define KEY1_PIN (1&lt;&lt;PB0)<br />#define KEY2_PIN (1&lt;&lt;PB1)<br />#define KEY3_PIN (1&lt;&lt;PB2)<br /><br /><br />uint8_t klawisz_wcisniety(uint8_t klawisz);<br />volatile uint8_t pwm = 19 ;<br /><br /><br />int main(void)<br />{<br /><br />DDRC |= (1&lt;&lt;PC0);<br />DDRB &amp;= ~ (KEY1_PIN | KEY2_PIN | KEY3_PIN ) ;<br />PORTB |= KEY1_PIN | KEY2_PIN | KEY3_PIN ;<br /><br />// ustawienia TIMER2 w tryb CTC<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb  CTC<br />TCCR2 |= (1&lt;&lt;CS20)|(1&lt;&lt;CS21)|(1&lt;&lt;CS22);// preskaler = 1024<br />OCR2 = 156;// dodatkowy podział częsttotliwości przez 156<br />TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch<br /><br /><br /><br />sei();<br />while(1)<br />{<br /><br />if(  klawisz_wcisniety(KEY1_PIN)  ) pwm = 13;<br />if(  klawisz_wcisniety(KEY2_PIN)  ) pwm = 19;<br />if(  klawisz_wcisniety(KEY3_PIN)  ) pwm = 26;<br /><br />}<br /><br /><br />}<br /><br />uint8_t klawisz_wcisniety(uint8_t klawisz)<br />{<br />if( !(PINB &amp; klawisz) )// klawisz wciśnięty ?<br />{<br />_delay_ms(80);// czas drgań styków<br />if( !(PINB &amp; klawisz) ) return 1;   // jeśli wciśnięty?  zakończ funkcję - rezultat = 1<br />}<br /><br />return 0;// jeśli nie wciśnięty klawisz, zakończ funkcję, rezultat = 0<br />}<br /><br />ISR( TIMER2_COMP_vect)<br />{<br />static uint8_t licznik ;<br /><br />if(licznik&gt;= pwm) PORTC |= (1&lt;&lt;PC0); else PORTC &amp;=~(1&lt;&lt;PC0);<br /><br />licznik++;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14772">Koziol96</a> — 19 wrz 2016, o 16:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-09-19T16:08:02+01:00</updated>
<published>2016-09-19T16:08:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168974#p168974</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168974#p168974"/>
<title type="html"><![CDATA[Re: Sterowanie serwem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168974#p168974"><![CDATA[
Witam<br /><div class="quotetitle">Daro69 napisał(a):</div><div class="quotecontent"><br />Nie mam teraz dostępu do sd. Ale zapytam bo nie widzę czy jest ustawione wyjście DDRx |=(1&lt;&lt;PC0); ?<br /></div><br />...właśnie to miałem na myśli - koledzy zamieszczają &quot;podejrzane fragmenty&quot; nie przypuszczając że błąd może być w innym miejscu.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 19 wrz 2016, o 16:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-09-19T16:03:25+01:00</updated>
<published>2016-09-19T16:03:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168973#p168973</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168973#p168973"/>
<title type="html"><![CDATA[Re: Sterowanie serwem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168973#p168973"><![CDATA[
Nie mam teraz dostępu do sd. Ale zapytam bo nie widzę czy jest ustawione wyjście DDRx |=(1&lt;&lt;PC0); ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 19 wrz 2016, o 16:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-09-19T16:02:00+01:00</updated>
<published>2016-09-19T16:02:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168972#p168972</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168972#p168972"/>
<title type="html"><![CDATA[Re: Sterowanie serwem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168972#p168972"><![CDATA[
Witam<br /><div class="quotetitle">Koziol96 napisał(a):</div><div class="quotecontent"><br />...a 3 po prostu stoi w miejscu.<br /></div><br />Ten fragment chyba Ci działa  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Szkoda, że podajesz tylko urywki kodu - czasem błąd występuje przy inicjalizacji, definicjach i takich tam - ale cóż, każdy ma prawo do ochrony  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .<br />Kiedyś testowałem serwo na ATm8 - może do celów porównawczych przyda się do czegoś:<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2014-04-18<br /> *      Author: Kicajek<br /> *<br /> *      sterowanie serwem<br /> *      za pomącą klawiszy<br /> *<br /> *      ATmega8 - 8MHz wew<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;lcd44780.h&quot;<br /><br />#define KEY_PORT   PORTC<br />#define KEY_UP     (1&lt;&lt;PC0)<br />#define KEY_CENTER (1&lt;&lt;PC1)<br />#define KEY_DOWN   (1&lt;&lt;PC2)<br />#define SENSOR_OUT (1&lt;&lt;PB1)<br /><br />/* PORTD - wyswietlacz LCD */<br /><br />uint16_t up, center = 1450, down;<br />uint16_t poz_sens = 1450;<br /><br />uint8_t key_SENS(uint8_t);<br /><br />int main(void)<br />{<br />DDRB |= (1 &lt;&lt; PB1); // port serwa - wyjście<br />KEY_PORT |= KEY_UP | KEY_CENTER | KEY_DOWN; //klawisze - wejście, podciągniecie do Vcc<br /><br />/* ustawienie PWM sprzętowe 50 Hz */<br />TCCR1A = (1 &lt;&lt; COM1A1) | (1 &lt;&lt; COM1B1) | (1 &lt;&lt; WGM11); //tryb pracy licznika Fast PWM (15)<br />TCCR1B = (1 &lt;&lt; CS11) | (1 &lt;&lt; WGM12) | (1 &lt;&lt; WGM13); // prescaler 8<br />ICR1 = 20000; //przerwanie co 20ms<br />lcd_init();/* inicjalizacja LCD */<br /><br />DDRD  |= (1&lt;&lt;PD3);<br />PORTD |= (1&lt;&lt;PD3); /* podświetlenie wyświetlacza LCD */<br />sei();<br /><br />while (1)<br />{<br /><br />OCR1A = poz_sens; //ustawienie w poz. środkowej - 1450 ( min - 600, max - 4350 )<br /><br />if (key_SENS(KEY_UP))<br /><br />     {<br />poz_sens += 5;<br />if (poz_sens &gt; 2210)<br />poz_sens = 2210; // max wychył<br />             }<br /><br /><br />if (key_SENS(KEY_CENTER))<br /><br />{<br />poz_sens = center;<br />        }<br /><br /><br />if (key_SENS(KEY_DOWN))<br /><br />{<br />poz_sens -= 5;<br />lcd_cls();<br />if (poz_sens &lt; 565)<br />    poz_sens = 565; //minimalny wychył<br />}<br /><br />                      if(poz_sens&gt;999)<br />                  lcd_locate(0,4);<br />                     else lcd_locate(0,5);<br />            lcd_int(poz_sens);/* wyświetlamy informację o OCR1A */<br /><br /><br />}<br />}<br /><br /><br />uint8_t key_SENS(uint8_t klawisz) // funkcja obsługi klawisza Nr...<br /><br />{<br />if (!(PINC &amp; klawisz)) {<br />_delay_ms(20);<br />if (!(PINC &amp; klawisz)) {<br />return 1;<br />}<br />}<br />return 0;<br />}<br />                     /*  I TO BY BYŁO NA TYLE */[/syntax]<br /><br />Wartości max i min dobierałem doświadczalnie.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 19 wrz 2016, o 16:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Koziol96]]></name></author>
<updated>2016-09-19T14:56:44+01:00</updated>
<published>2016-09-19T14:56:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168970#p168970</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168970#p168970"/>
<title type="html"><![CDATA[Re: Sterowanie serwem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168970#p168970"><![CDATA[
Daro69 szerokość impulsu zależy od wartości OCx względem TCNTx  a ICRx określa maksymalną wartość TCNTx ? A w tym wypadku licznika z którym porównuję zmienną pwm ?<br /><br /><div class="quotetitle">Daro69 napisał(a):</div><div class="quotecontent"><br />W serwie co 20ms podajesz sygnał i w zależności jaka ma długość to albo kreci w lewo albo w prawo . Środkowe położenie to hm.. Cyba okolo 1,5 ms. Każdy krótszy sygnał obraca proporcjonalnie w lewo a dłuższy w prawo.<br /></div><br /><br />to akurat wiem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14772">Koziol96</a> — 19 wrz 2016, o 14:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-09-19T14:21:16+01:00</updated>
<published>2016-09-19T14:21:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168968#p168968</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168968#p168968"/>
<title type="html"><![CDATA[Re: Sterowanie serwem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168968#p168968"><![CDATA[
W trybie 14 icr określa maksymalna wartość licznika - częstotliwość powtarzania sygnalu-<br />A ocrx określa wartość porównania.<br />W serwie co 20ms podajesz sygnał i w zależności jaka ma długość to albo kreci w lewo albo w prawo . Środkowe położenie to hm.. Cyba okolo 1,5 ms. Każdy krótszy sygnał obraca proporcjonalnie w lewo a dłuższy w prawo.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 19 wrz 2016, o 14:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Koziol96]]></name></author>
<updated>2016-09-19T13:57:46+01:00</updated>
<published>2016-09-19T13:57:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168967#p168967</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168967#p168967"/>
<title type="html"><![CDATA[Sterowanie serwem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16237&amp;p=168967#p168967"><![CDATA[
Witam wszystkich.<br />Postanowiłem pobawić się serwem SG-5010 i jak to zwykle bywa coś nie działa <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br />Napisałem prosty program w którym steruje serwem przy pomocy 3 przycisków w następujący sposób<br />Gdy trzymam 1 przycisk to serwo powinno kręcić się w lewo, 2 serwo kręci się w prawo a 3 po prostu stoi w miejscu.<br /><br />Używam ATmega32  taktowanie 8Mhz wewnętrzny oscylator<br /><br />Mam problem z ustawieniem timera, po nieudanej próbie użycia timera sprzętowego postanowiłem spróbować z timerem programowym tak jak było pokazane w BB, oczywiście bez skutku.<br />Timer jest ustawiony w ten sposób : <br /><br />[syntax=c]// ustawienia TIMER2 w tryb CTC<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb  CTC<br />TCCR2 |= (1&lt;&lt;CS20)|(1&lt;&lt;CS21)|(1&lt;&lt;CS22);// preskaler = 1024<br />OCR2 = 156;// dodatkowy podział częsttotliwości przez 156<br />TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch[/syntax]<br /><br />Pętla główna:<br />[syntax=c]while(1)<br />{<br /><br />if(  klawisz_wcisniety(KEY1_PIN)  ) pwm = 13;<br />if(  klawisz_wcisniety(KEY2_PIN)  ) pwm = 19;<br />if(  klawisz_wcisniety(KEY3_PIN)  ) pwm = 26;<br /><br />}[/syntax]<br /><br /><br /><br /><br />Przerwanie:<br /><br />[syntax=c]ISR( TIMER2_COMP_vect)<br />{<br />static uint8_t licznik ;<br /><br />if(licznik&gt;= pwm) PORTC |= (1&lt;&lt;PC0); else PORTC &amp;=~(1&lt;&lt;PC0);<br /><br />licznik++;<br />}[/syntax]<br />Chciałem osiągnąć częstotliwość 50 Hz tak aby najwygodniej sterować serwem. wartości zmiennej pwm(volatile). Wartości tejże zmiennej wyszły mi z obliczeń :<br />Dla f=50Hz =&gt;  T=20ms   <br />2ms/20ms =  1/10<br />2ms(skręt podajże w prawo) <br />1/10 * 255 (wielkość zmiennej licznik)  = 25,5 więc w przybliżeniu pwm = 26.<br /><br />Zasadnicze pytanie brzmi czy źle liczę, źle ustawiłem timer czy oba ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Będę wdzięczny za każdą pomoc<br /><br />PS. W internecie wyczytałem że najlepszym sposobem jest ustawienie trybu fast pwm (tryb 14) z użyciem jakiegoś rejestru ICR1, ale nigdzie nie mogłem znaleźć informacji (również w nocie ) o tym jak tego rejestru użyć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14772">Koziol96</a> — 19 wrz 2016, o 13:57</p><hr />
]]></content>
</entry>
</feed>