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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-08-17T10:46:12+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3852&amp;mode</id>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2013-08-17T10:46:12+01:00</updated>
<published>2013-08-17T10:46:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45981#p45981</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45981#p45981"/>
<title type="html"><![CDATA[Re: Problem timer + silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45981#p45981"><![CDATA[
<div class="quotetitle">Antystatyczny napisał(a):</div><div class="quotecontent"><br />przekazujemy wyłącznie stałe dosłowne, czyli np 100, 200 czy tam 500. Kompilator już na etapie kompilacji musi dokładnie wiedzieć jakie opóźnienie ma wygenerować.<br /></div><br /><br />W sumie to logiczne, ale...<br /><br />void ping_pong(uint16_t czas){<br />uint8_t i;<br />for(i=0; i&lt;7; ++i) {<br /><br /><br />PORTC |= (1&lt;&lt;i);<br />_delay_ms(czas);<br />PORTC &amp;= ~(1&lt;&lt;i);<br />}<br />for(i=7; i&gt;0; i--) {<br />PORTC |= (1&lt;&lt;i);<br />_delay_ms(czas);<br />PORTC &amp;= ~(1&lt;&lt;i);}<br />}<br />Takie coś działa, a zmienna czas była zmieniana w pętli for.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 17 sie 2013, o 10:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RobertM]]></name></author>
<updated>2013-08-17T09:49:24+01:00</updated>
<published>2013-08-17T09:49:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45977#p45977</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45977#p45977"/>
<title type="html"><![CDATA[Re: Problem timer + silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45977#p45977"><![CDATA[
Jeżeli dobrze rozumiem to funkcje obsługujące silnik (Stepp_r i Stepp_l) trzymasz sobie w pliku funkcje.c.<br />Tam definiujesz zmienne uint8_t ok; itp.<br />Dalej powinieneś mieć plik funkcje.h i tam zdeklarować zmienne jako extern. <br />Includujesz plik funkcje.h i zmienne powinny hulać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1620">RobertM</a> — 17 sie 2013, o 09:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[maras52]]></name></author>
<updated>2013-08-17T08:03:50+01:00</updated>
<published>2013-08-17T08:03:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45973#p45973</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45973#p45973"/>
<title type="html"><![CDATA[Re: Problem timer + silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45973#p45973"><![CDATA[
<strong>Anty</strong> wiem o tym jednak jak wiesz jestem początkujący wiec jak ogarne timery wraz z przerwaniami do tego stopnia to wtedy bedzie to realizowane na nich.<br /><br />[syntax=c]extern uint16_t pr, km;<br />    extern uint8_t ok;[/syntax]<br /><br />Nie wpisze extern, to danych nie przekazuje do glownej funkcji.<br /><br />Co do:<br />[syntax=c]return prawo<br />.<br />.<br />return lewo[/syntax]<br /><br />Racja moj blad teraz funkcje to voidy.<br /><br />Teraz tylko czekam na silnik krokowy bo ten co mam niestety nie dziala zbyt zachwycajaco ;( (24V)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1046">maras52</a> — 17 sie 2013, o 08:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RobertM]]></name></author>
<updated>2013-08-14T17:35:46+01:00</updated>
<published>2013-08-14T17:35:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45716#p45716</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45716#p45716"/>
<title type="html"><![CDATA[Re: Problem timer + silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45716#p45716"><![CDATA[
No tak .<br />Porównanie mam zakodowane z innego języka programowania &quot;różne&quot; jako [syntax=c]&quot;&lt;&gt;&quot;[/syntax].Sorka <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1620">RobertM</a> — 14 sie 2013, o 17:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MrMeriones]]></name></author>
<updated>2013-08-14T15:58:32+01:00</updated>
<published>2013-08-14T15:58:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45699#p45699</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45699#p45699"/>
<title type="html"><![CDATA[Re: Problem timer + silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45699#p45699"><![CDATA[
Z wikipedii:<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Porównanie<br /><br />W języku C występują następujące operatory porównania:<br />równe (&quot;==&quot;),<br />różne (&quot;!=&quot;),<br />mniejsze (&quot;&lt;&quot;),<br />większe (&quot;&gt;&quot;),<br />mniejsze lub równe (&quot;&lt;=&quot;) i<br />większe lub równe (&quot;&gt;=&quot;).<br />Wykonują one odpowiednie porównanie swoich argumentów i zwracają jedynkę jeżeli warunek jest spełniony lub zero jeżeli nie jest.<br /></div><br /><br /><br />Nigdzie też nie widzę ile wynosi F_CPU.<br />Rozumiem, że te rzeczy i inne o których wspomniał przedmówca masz gdzieś indziej zadeklarowane?<br /><br />Po co instrukcja switch(s) jeśli linijki wcześniej jeszcze raz sprawdzasz te warunki?<br />[syntax=c]extern uint16_t pr, km;<br />extern uint8_t ok;[/syntax] tego nie trzeba bo przecież są to zmienne globalne<br /><br />[syntax=c]};[/syntax] to też mi nie pasuje po pętli for w f-cjach step...<br />Jeszcze w tych samych funkcjach krok masz w uint8_t a zmienne odpowiedzialne za kroki w int8_t<br /><br />A poza tym nie lepiej użyć przerwań timera do sterowania silnikiem zamiast _delay_ms?<br /><br />Zauważ, że w dokumentacji _delay_ms(x) <div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />The maximal possible delay is 262.14 ms / F_CPU in MHz.<br /></div><br />i jeszcze jeden cytat : <div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />In order for these functions to work as intended, compiler optimizations must be enabled, and the delay time must be an expression that is a known constant at compile-time. If these requirements are not met, the resulting delay will be much longer (and basically unpredictable), and applications that otherwise do not use floating-point calculations will experience severe code bloat by the floating-point library routines linked into the application.<br /></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1048">MrMeriones</a> — 14 sie 2013, o 15:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RobertM]]></name></author>
<updated>2013-08-14T14:02:34+01:00</updated>
<published>2013-08-14T14:02:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45690#p45690</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45690#p45690"/>
<title type="html"><![CDATA[Re: Problem timer + silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45690#p45690"><![CDATA[
A czy na pewno jest poprawna składnia [syntax=c]if (krok_wyk!=0)[/syntax]<br />Moim zdanie przypisujesz a nie porównujesz<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 4 minutach ]</span></strong><br /><br />Poza tym dajesz [syntax=c]return prawo[/syntax] oraz [syntax=c]return lewo[/syntax] Czyli co to robi ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1620">RobertM</a> — 14 sie 2013, o 14:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[maras52]]></name></author>
<updated>2013-08-13T04:57:02+01:00</updated>
<published>2013-08-13T04:57:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45598#p45598</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45598#p45598"/>
<title type="html"><![CDATA[Problem timer + silnik krokowy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3852&amp;p=45598#p45598"><![CDATA[
Witam mam pewien problem otóż podczas zwiększania wartości zmiennej odpowiedzialnej za wykonywanie kroków w prawo wyskakuję mi losowa cyfra w granicach 4300 co ładnie krzaczy pracę silnika (jak łatwo się domyśleć kręci się w najlepsze)<br /><br />[syntax=c]/*<br />   Plik main.c<br />   __    __<br />__/  \__/  \__/-( :)-&lt;<br />This is snake help him to destroy world !<br /><br /><br />   układ atmega16 (8MHz)<br />   Autor: Maras<br />*/<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;inttypes.h&gt;<br />#include &lt;math.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/atomic.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#include &quot;HD44780.h&quot;<br />#include &quot;funkcje.h&quot;<br />#include &quot;krokowy.h&quot;<br /><br />void Timer_Init(void);<br />int przeliczObroty (void);<br />int przeliczKm (void);<br /><br /><br />uint16_t pr, rpm, km;<br />uint8_t ok, s;<br />volatile uint8_t isOK;<br />volatile uint16_t time;<br />int8_t krok_dwyk, krok_wyk;<br /><br />int main(void)<br />{<br /><br />  Timer_Init();<br />  sei();<br />  LCD_Init();<br /><br />   Stepp_init(); //test czy silnik trybi<br /> int8_t a=krok_wyk-km/10;<br />while (1)<br />{<br />if (krok_wyk!=0)<br />{<br /><br />if(krok_dwyk&gt;krok_wyk)<br />                {<br />                krok_dwyk=km/10-krok_wyk-a;<br />                }<br />else<br />                {<br />krok_dwyk=krok_wyk-km/10;<br />}<br /><br />}<br />else<br />{<br /><br />krok_dwyk=(km/10);<br />}<br />if (krok_dwyk&gt;krok_wyk){s=1;} //jesłi krok do wykonania wiekszy od wykonanych kroków idz do Switch 1<br />                if (krok_dwyk==0) {s=0;} /jesłi krok do wykonania równy wykonanym krokom idz do Switch 0<br />if (krok_dwyk&lt;krok_wyk){s=2;} //jesłi krok do wykonania mniejszy od wykonanych kroków idz do Switch 2<br /><br /><br />switch(s){<br />// wyłączenie silnika<br />case 0:<br />Stepp_stop();<br />break;<br />// krok w prawo <br />case 1:<br /><br />//Stepp_r(krok_dwyk,5); wylaczone na czas obserwacji problemu<br /> krok_wyk=krok_wyk+krok_dwyk;<br />                 break;<br /><br />// krok w lewo<br />case 2:<br />       // Stepp_l(krok_dwyk,5); wylaczone na czas obserwacji problemu<br />       krok_wyk=krok_wyk-krok_dwyk;<br />       break;<br />default:<br /><br />break;<br />}<br /><br /><br />LCD_GoTo(0,0);<br />LCD_WLINT(krok_dwyk);<br />LCD_GoTo(4,0);<br />LCD_WriteText(&quot;dwyk&quot;);<br />LCD_GoTo(10,0);<br />LCD_WLINT(km/10);<br />LCD_GoTo(14,0);<br />LCD_WriteText(&quot;PZ&quot;);<br />LCD_GoTo(10,1);<br />LCD_WLINT(km);<br />LCD_GoTo(14,1);<br />LCD_WriteText(&quot;Km&quot;);<br />LCD_GoTo(0,1);<br />LCD_WLINT(krok_wyk);<br />LCD_GoTo(4,1);<br />LCD_WriteText(&quot;wyk&quot;);<br />_delay_ms(1000); //specjalnie dodany tak długi postój by zauważyć zmiany <br />LCD_Clear();<br /><br />}<br /><br />}<br /><br />ISR(TIMER1_CAPT_vect)<br />{<br /><br />  if(TCCR1B &amp; (1&lt;&lt;ICES1))<br />  {<br />        TCNT1 = 0;<br />        TCCR1B &amp;= ~(1&lt;&lt;ICES1); // następne zdarzenie na zboczu opadającym<br /><br />        time = ICR1;                    // przepisanie zawartości licznika do zmiennej<br />        isOK=255;                               // odczytano poprawnie<br /><br />    {<br /><br />    }<br />  }<br />   else<br />   {<br />     TCCR1B |= (1&lt;&lt;ICES1); // następne zdarzenie na zboczu narastającym<br />   }<br /><br />}<br /><br />ISR(TIMER1_OVF_vect)<br />{<br />  isOK=0; // Błą przepełnienia licznika<br />}<br /><br />int przeliczKm (void)<br />{<br />extern uint16_t pr, km;<br />extern uint8_t ok;<br /><br />  ATOMIC_BLOCK(ATOMIC_FORCEON) // przepisanie zmiennych bez przerwań aby nie były pomieszane wyniki<br />  {<br />    ok = isOK;<br />    pr = time;<br />  }<br /><br />  if(!ok) // jezeli błąd<br />  {<br />    time = 0;<br />  }<br /><br />  if(pr) // jezeli różne od zera<br />  {<br /><br />    km = F_CPU/64/pr/2; <br /><br />  }<br />  else<br />  {<br />    km = 0;<br />  }<br /><br />  return km;<br />}<br /><br />void Timer_Init(void)<br />{<br />  TCCR1B |= (1&lt;&lt;ICES1);   // włąćz filtrowanie ICP, zdarzeie na zboczu narastającym<br />  TCCR1B |= (1&lt;&lt;CS11)   | (1&lt;&lt;CS10);    // Preskaler 64, gtryb normalny<br />  TIMSK  |= (1&lt;&lt;TICIE1) | (1&lt;&lt;TOIE1);   // Przerwania ICP i overflow<br />}[/syntax]<br /><br />funkcje obsługujące ruchy silnika<br /><br />[syntax=c]uint8_t Stepp_r( uint8_t krok, uint16_t speed)<br />{<br /><br />for(k=0;k&lt;krok;k++)<br />{<br />krok2;<br />_delay_ms(speed);<br />krok4;<br />_delay_ms(speed);<br />krok6;<br />_delay_ms(speed);<br />krok8;<br />_delay_ms(speed);<br /><br />};<br />return prawo;<br />}<br />uint8_t Stepp_l( uint8_t krok, uint16_t speed)<br />{<br />for(k=0;k&lt;krok;k++)<br />{<br />krok8;<br />_delay_ms(speed);<br />krok6;<br />_delay_ms(speed);<br />krok4;<br />_delay_ms(speed);<br />krok2;<br />_delay_ms(speed);<br />};<br />return lewo;<br />}[/syntax]<br /><br />Dorzucam filmik o co mi chodzi :<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br />kroki do wykonania  |  docelowa pozycja<br />kroki wykonane       | podstawa obliczenia pozycji<br /><br /><br />Dodam że dzieje się tylko tak podczas rośnięcia wartości.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1046">maras52</a> — 13 sie 2013, o 04:57</p><hr />
]]></content>
</entry>
</feed>