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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-10-07T17:10:19+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13033&amp;mode</id>
<entry>
<author><name><![CDATA[baryla92]]></name></author>
<updated>2015-10-07T17:10:19+01:00</updated>
<published>2015-10-07T17:10:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=141734#p141734</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=141734#p141734"/>
<title type="html"><![CDATA[Re: Serwo - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=141734#p141734"><![CDATA[
Ok problem udało się rozwiązać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Nie wiem dlaczego nie działało jednak gdy zmieniłem częstotliwość przerwania co 1ms a nie jak było wcześniej co 0,1 ms to zadziałało.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3155">baryla92</a> — 7 paź 2015, o 17:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-09-28T15:30:26+01:00</updated>
<published>2015-09-28T15:30:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140960#p140960</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140960#p140960"/>
<title type="html"><![CDATA[Re: Serwo - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140960#p140960"><![CDATA[
Ustawienia timera są w porządku. Sprawdź czy częstotliwość jest taka jak myślisz. W przerwaniu dodaj sobie:<br />[syntax=c]static uint16_t led_cnt;<br />if(++led_cnt &gt; 10000) LED_TOG; //1 sekundę zgaszona i 1 zapalona, okres 2 sekundy[/syntax]<br />gdzie LED_TOG:<br />[syntax=c]#define LED_PORT D<br />#define LED_PIN 5<br />#define LED_TOG PORT(LED_PORT) ^=(1&lt;&lt; LED_PIN)[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 28 wrz 2015, o 15:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[baryla92]]></name></author>
<updated>2015-09-26T11:36:23+01:00</updated>
<published>2015-09-26T11:36:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140752#p140752</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140752#p140752"/>
<title type="html"><![CDATA[Re: Serwo - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140752#p140752"><![CDATA[
Ok wstawiłem właśnie twój kod i działa <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />W takim razie już coś wiemy że wina leży nie po stronie serwa a po stronie programu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Teraz tylko gdzie tu mam błąd błędne ustawienia Timera ? złe przypisanie do tablicy number_pwm[] ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3155">baryla92</a> — 26 wrz 2015, o 11:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-09-25T15:04:50+01:00</updated>
<published>2015-09-25T15:04:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140672#p140672</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140672#p140672"/>
<title type="html"><![CDATA[Re: Serwo - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140672#p140672"><![CDATA[
<div class="quotetitle">baryla92 napisał(a):</div><div class="quotecontent"><br />hmm zastosować przerwę miedzy okresami<br /></div><br />Nie o to mi chodziło tylko, aby poruszać serwem raz w lewo, a raz w prawo. Jeden z prostszych programów bez używania przerwań wyglądałby tak. Pamiętaj aby ustawić taktowanie w opcjach projektu zgodne z rzeczywistym:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;serwo.h&quot;<br /> <br />int main()<br />{<br />   set_ports();<br /> <br />   while(1)<br />   {<br />      for(uint8_t i = 0; i &lt; 100; ++i) //przez 2 sekundy w prawo<br />      {<br />         SET_SERW1;<br />         _delay_ms(1);<br />         CLR_SERW1;<br />         _delay_ms(20-1);<br />      }<br /><br />      for(uint8_t i = 0; i &lt; 100; ++i) //przez 2 sekundy w lewo<br />      {<br />         SET_SERW1;<br />         _delay_ms(2);<br />         CLR_SERW1;<br />         _delay_ms(20-2);<br />      }<br />   }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 25 wrz 2015, o 15:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[baryla92]]></name></author>
<updated>2015-09-24T20:35:50+01:00</updated>
<published>2015-09-24T20:35:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140591#p140591</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140591#p140591"/>
<title type="html"><![CDATA[Re: Serwo - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140591#p140591"><![CDATA[
ok syntax poprawiony <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />,<br />hmm zastosować przerwę miedzy okresami ok zaraz spróbuje, jednak gdy zrobie to w taki sposób to raczej za wiele mi to nie da gdyż u mnie pwm generowany jest w przerwaniach, jedyne wyjscie to zrobic to w taki sposób<br />[syntax=c]while(1)<br />{<br />number_pwm&#91;0&#93; = LEFT_ROTATE;<br />if(cnt == 1) <br />{<br />cli();<br />_delay_ms(2000);<br />sei();<br />}<br /><br />}[/syntax]<br />bazowałem na wykresach <a href="http://obrazki.elektroda.pl/1703516700_1337285936.jpg"  class="postlink">link</a><br />jednak na ile są poprawne to nie mam pojęcia gdyż 1 raz bazuję na serwomechaniznach<br /><br /><strong>popróbowałem jednak niestety nie działa</strong><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3155">baryla92</a> — 24 wrz 2015, o 20:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-09-24T20:26:31+01:00</updated>
<published>2015-09-24T20:26:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140587#p140587</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140587#p140587"/>
<title type="html"><![CDATA[Re: Serwo - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140587#p140587"><![CDATA[
Na wstępie zobacz to <a href="http://forum.atnel.pl/topic7402.html"  class="postlink">Wstawianie listingów programów w postach.</a><br /><br />Upewnij się czy przypadkiem serwo nie jest już na pozycji, albo zrób tak:<br />[syntax=c]while(1) <br />{ <br />   number_pwm&#91;0&#93; = LEFT_ROTATE;<br />   _delay_ms(2000);<br />   number_pwm&#91;0&#93; = RIGHT_ROTATE;<br />   _delay_ms(2000);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 24 wrz 2015, o 20:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[baryla92]]></name></author>
<updated>2015-09-24T20:30:20+01:00</updated>
<published>2015-09-24T19:48:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140580#p140580</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140580#p140580"/>
<title type="html"><![CDATA[Serwo - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13033&amp;p=140580#p140580"><![CDATA[
Witam, stworzyłem program do obsługi serw, poprzez programowy PWM, jednak coś nie chcę działać tak jakbym tego oczekiwał. Serwo próbuje się obrócić jednak tylko drży i tyle.<br />Jeżeli mógłby ktoś zobaczyć gdzie popełniłem błąd byłbym wdzięczny.Wydaje mi się że dobrze policzyłem czas przerwania jednak wiadomo każdy może się pomylić <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Używam attiny2313 taktowany zegarem 8MHz<br /><br />Przesyłam kod:<br /><br />plik serwo.h<br />[syntax=c]#ifndef SERWO_H_<br />#define SERWO_H_<br /><br />//marka upraszczjace dostep do portow<br />#define PORT(x) XPORT(x)<br />#define XPORT(x) (PORT##x)<br /><br />#define PIN(x) XPIN(x)<br />#define XPIN(x) (PIN##x)<br /><br />#define DDR(x) XDDR(x)<br />#define XDDR(x) (DDR##x)<br /><br />// wartości  poczatkowe pwm - silniki stop<br />extern volatile uint8_t number_pwm&#91;&#93;;<br /><br />//funkcje<br />void set_ports (void);<br />void serwo_init(void);<br /><br />//porty i piny dla poszczegolnych serw<br />#define SERW1_PIN 3<br />#define SERW1_PORT B<br /><br />#define SERW2_PIN 1<br />#define SERW2_PORT B<br /><br />#define SERW3_PIN 2<br />#define SERW3_PORT B<br /><br />#define SERW4_PIN 3<br />#define SERW4_PORT B<br /><br />#define SERW5_PIN 4<br />#define SERW5_PORT B<br /><br />//ustawienia pinów<br />#define SET_SERW1 PORT(SERW1_PORT) |=(1&lt;&lt; SERW1_PIN);<br />#define CLR_SERW1 PORT(SERW1_PORT) &amp;=~ (1&lt;&lt; SERW1_PIN);<br /><br />#define SET_SERW2 PORT(SERW2_PORT) |=(1&lt;&lt; SERW2_PIN);<br />#define CLR_SERW2 PORT(SERW2_PORT) &amp;=~ (1&lt;&lt; SERW2_PIN);<br /><br />#define SET_SERW3 PORT(SERW3_PORT) |=(1&lt;&lt; SERW3_PIN);<br />#define CLR_SERW3 PORT(SERW3_PORT) &amp;=~ (1&lt;&lt; SERW3_PIN);<br /><br />#define SET_SERW4 PORT(SERW4_PORT) |=(1&lt;&lt; SERW4_PIN);<br />#define CLR_SERW4 PORT(SERW4_PORT) &amp;=~ (1&lt;&lt; SERW4_PIN);<br /><br />#define SET_SERW5 PORT(SERW5_PORT) |=(1&lt;&lt; SERW5_PIN);<br />#define CLR_SERW5 PORT(SERW5_PORT) &amp;=~ (1&lt;&lt; SERW5_PIN);<br /><br /><br />#endif /* SERWO_H_ */[/syntax]<br /><br />plik serwo.c<br />[syntax=c]#include &lt; avr/io.h&gt;<br />#include &lt; avr/interrupt.h&gt;<br />#include &quot;serwo.h&quot;<br /><br />volatile uint8_t number_pwm&#91;5&#93; = {15, 15, 15, 15, 15};<br /><br />//funkcja ustawiajaca porty silników<br />void set_ports (void)<br />{<br />DDR(SERW1_PORT) |= (1&lt;&lt; SERW1_PIN);<br />PORT(SERW1_PORT) |= (1&lt;&lt; SERW1_PIN);<br /><br />DDR(SERW2_PORT) |= (1&lt;&lt; SERW2_PIN);<br />PORT(SERW2_PORT) |= (1&lt;&lt; SERW2_PIN);<br /><br />DDR(SERW3_PORT) |= (1&lt;&lt; SERW3_PIN);<br />PORT(SERW3_PORT) |= (1&lt;&lt; SERW3_PIN);<br /><br />DDR(SERW4_PORT) |= (1&lt;&lt; SERW4_PIN);<br />PORT(SERW4_PORT) |= (1&lt;&lt; SERW4_PIN);<br /><br />DDR(SERW5_PORT) |= (1&lt;&lt; SERW5_PIN);<br />PORT(SERW5_PORT) |= (1&lt;&lt; SERW5_PIN);<br />}<br /><br />void serwo_init(void)<br />{<br />set_ports();<br />//ustawienia timera tryb normal<br />TCCR0B |= (1&lt;&lt; CS01); //prescaler = 8<br />TIMSK |= (1&lt;&lt; TOIE0);//wlaczenie  przerwan<br />TCNT0 = 156; //wartosc poczatkowa 256-156=100 tykniec<br /><br />sei();<br />}<br /><br /><br />ISR (TIMER0_OVF_vect)<br />{<br />static uint8_t cnt;//zmienna licznika<br />TCNT0 = 156;//inicjalizacja wartoscia poczatkową<br /><br />if(cnt&gt;number_pwm&#91;0&#93;) CLR_SERW1 else SET_SERW1<br />if(cnt&gt;number_pwm&#91;1&#93;) CLR_SERW2 else SET_SERW2;<br />if(cnt&gt;number_pwm&#91;2&#93;) CLR_SERW3 else SET_SERW3;<br />if(cnt&gt;number_pwm&#91;3&#93;) CLR_SERW4 else SET_SERW4;<br />if(cnt&gt;number_pwm&#91;4&#93;) CLR_SERW5 else SET_SERW5;<br /><br />cnt++;<br />if(cnt&gt;200) cnt=1;<br /><br />}[/syntax]<br /><br />plik main.c<br />[syntax=c]#include &lt; avr/io.h&gt;<br />#include &lt; avr/interrupt.h&gt;<br />#include &quot;serwo.h&quot;<br /><br />#define LEFT_ROTATE 10<br />#define RIGHT_ROTATE 20<br />#define STOP_ROTATE 15<br /><br />int main()<br />{<br />serwo_init();<br /><br />while(1)<br />{<br />number_pwm&#91;0&#93; = LEFT_ROTATE;<br />}<br />}[/syntax]<br /><br />Oczywiście przesłany tu program to jedynie uproszczona część obsługująca serwo, poza tym wykorzystuje usart i wyświetlacz LCD. Jednak pozostałe rzeczy działają prawidłowo.<br /><br />Obliczenia czasu:<br />F_CPU = 8000000, preskaler = 8, TCNTO = 256-156 = 100<br />8000000/8/100=10000MHz<br /><br />1/10000 = 0,1ms co tyle zwiekszam licznik cnt, wiec w momencie gdy licznik wyniesie 10 minie czas 1ms <br />dla cnt = 200 minie czas 20ms i proces zaczyna sie na nowo<br /><br /><br /><strong><span style="color: #FF0000">PROSZĘ POPRAWNIE WKLEJAĆ LISTINGI PROGRAMÓW  -- &gt;&gt; <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7402.html" >topic7402.html</a><!-- l --><br />---&gt; SunRiver</span></strong><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3155">baryla92</a> — 24 wrz 2015, o 19:48</p><hr />
]]></content>
</entry>
</feed>