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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-10-04T16:10:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1568&amp;mode</id>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-10-04T16:10:15+01:00</updated>
<published>2012-10-04T16:10:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=16422#p16422</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=16422#p16422"/>
<title type="html"><![CDATA[Re: ATB-ETH + Silnik krokowy bipolarny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=16422#p16422"><![CDATA[
Witam,<br /><br />Doszedłem do rozwiązania problemu więc opiszę dla ludzi którzy będą mieli podobny problem.<br /><br />Cały problem tkwił w pętli while(1) <br />[syntax=c] while(1){<br />        //if(ms2_flag){//krecenie motorkiem bez przerwy<br />        //kroki_lewo();<br />        //ms2_flag=0;<br />        //}<br />                // read packet, handle ping and wait for a tcp packet:<br />                dat_p=packetloop_icmp_tcp(buf,enc28j60PacketReceive(BUFFER_SIZE, buf));<br /><br />                /* dat_p will be unequal to zero if there is a valid <br />                 * http get */<br />                if(dat_p==0){<br />                        // no http request<br />                        continue;<br />                }<br />                // tcp port 80 begin<br />                if (strncmp(&quot;GET &quot;,(char *)&amp;(buf[dat_p]),4)!=0){<br />                        // head, post and other methods:<br />                        plen=http200ok();<br />                        plen=fill_tcp_data_p(buf,plen,PSTR(&quot;&lt;h1&gt;200 OK&lt;/h1&gt;&quot;));<br />                        goto SENDTCP;<br />                }<br />                // just one web page in the &quot;root directory&quot; of the web server<br />                if (strncmp(&quot;/ &quot;,(char *)&amp;(buf[dat_p+4]),2)==0){<br />                plen=http200ok();<br />plen=print_webpage(buf,(PORTD &amp; (1&lt;&lt;PORTD7)));<br />                        goto SENDTCP;<br />                }//else{<br />                   //     dat_p=fill_tcp_data_p(buf,0,PSTR(&quot;HTTP/1.0 401 Unauthorized\r\nContent-Type: text/html\r\n\r\n&lt;h1&gt;401 Unauthorized&lt;/h1&gt;&quot;));<br />                     //   goto SENDTCP;<br />                //}<br />                cmd=analyse_get_url((char *)&amp;(buf[dat_p+4]));<br />                                // for possible status codes see:<br />                                // <!-- m --><a class="postlink" href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html" >http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html</a><!-- m --><br />                                if (cmd==-1){<br />                                        plen=fill_tcp_data_p(buf,0,PSTR(&quot;HTTP/1.0 401 Unauthorized\r\nContent-Type: text/html\r\n\r\n&lt;h1&gt;401 Unauthorized&lt;/h1&gt;&quot;));<br />                                        goto SENDTCP;<br />                                }<br />                                if (cmd==1){<br />                                        //LEDON;<br />                                        PORTD|= (1&lt;&lt;PORTD7);// transistor on<br />                                }<br />                                if (cmd==0){<br />                                        //LEDOFF;<br />                                        PORTD &amp;= ~(1&lt;&lt;PORTD7);// transistor off<br />                                }<br />                                if (cmd==2){<br />                                       start_stepper = 1;<br />                                }<br />                               <br />                                // if (cmd==-2) or any other value<br />                                // just display the status:<br />                                plen=print_webpage(buf,(PORTD &amp; (1&lt;&lt;PORTD7)));<br /><br /> if(start_stepper)<br />               {<br />                if(ms2_flag){//krecenie motorkiem bez przerwy<br />                kroki_lewo();<br />                        ms2_flag=0;<br />                    }<br />                }<br />SENDTCP:<br />www_server_reply(buf,plen);<br />                // tcp port 80 end<br /><br />        }[/syntax]<br /><br />Powyższy zapis idealnie nadaje się do wyświetlenia strony bądź zapalenia diody led gdyż dzieje się to tylko raz, natomiast silnik potrzebuje ciągłego &quot;taktowania&quot;, powyższy zapis wydaje się w porządku ale prawie na początku pętli while(1) jest kod:<br />[syntax=c]                /* dat_p will be unequal to zero if there is a valid <br />                 * http get */<br />                if(dat_p==0){<br />                        // no http request<br />                        continue;<br />                }[/syntax]<br />Który powoduje, że po wykonaniu requesta praktycznie cała część while(1) jest omijana, dopóki nie pojawi się nowy.<br />Dlatego mój silnik robił 1 krok i się zawieszał.<br />Wszelkie &quot;ciągłe&quot; sterowanie wystarczy dać powyżej w/w kodu i wszystko hula jak należy:)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 4 paź 2012, o 16:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2012-09-24T19:35:07+01:00</updated>
<published>2012-09-24T19:35:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15862#p15862</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15862#p15862"/>
<title type="html"><![CDATA[Re: ATB-ETH + Silnik krokowy bipolarny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15862#p15862"><![CDATA[
<div class="quotetitle">mlekorlz napisał(a):</div><div class="quotecontent"><br />Zakomentowanie całej zawartości while(1) i wrzucenie do niej:<br />[syntax=c]if(ms2_flag){<br />kroki lewo();<br />ms2_flag=0;<br />}[/syntax]<br />Powinno kręcić silniczkiem non stop a znów jest &quot;zwarcie&quot;.<br /></div><br />Co prawda nie widziałem, aby wystąpił jakiś konflikt zasobów, ale powinieneś tymczasowo wyłączyć inicjalizację wszystkiego poza silnikiem i kolejno dołączać do kompilacji, a wtedy pewnie coś znajdziesz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 24 wrz 2012, o 19:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-09-23T17:38:00+01:00</updated>
<published>2012-09-23T17:38:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15806#p15806</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15806#p15806"/>
<title type="html"><![CDATA[Re: ATB-ETH + Silnik krokowy bipolarny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15806#p15806"><![CDATA[
Silnik jest podłączony prawidłowo bo na drugiej atmedze mam program kręcący silniczkami i jak ją wpinam to wszystko hula.<br /><br />Co do wywoływania komendy, wydaje mi się, że jeśli<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">cmd=analyse_get_url((char *)&amp;(buf&#91;dat_p+4&#93;));</div> jest w pętli while(1) to<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">if (cmd==6){<br />                        check_and_step();<br />                }</div><br />Jest wywoływane aż do uzyskania kolejnej komendy albo nie spełnienia warunku z check_and_step.<br />Czy dobrze myślę?<br />Natomiast silnik robi tylko 1 krok a nie zadaną ilość i się blokuje.<br /><br />Zakomentowanie całej zawartości while(1) i wrzucenie do niej:<br />[syntax=c]if(ms2_flag){<br />kroki lewo();<br />ms2_flag=0;<br />}[/syntax]<br />Powinno kręcić silniczkiem non stop a znów jest &quot;zwarcie&quot;.<br />Cały projekt:<br /><!-- m --><a class="postlink" href="https://dl.dropbox.com/u/25250195/20_ETH_serwer_www_step.rar" >https://dl.dropbox.com/u/25250195/20_ET ... w_step.rar</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 23 wrz 2012, o 17:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2012-09-22T19:06:38+01:00</updated>
<published>2012-09-22T19:06:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15756#p15756</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15756#p15756"/>
<title type="html"><![CDATA[Re: ATB-ETH + Silnik krokowy bipolarny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15756#p15756"><![CDATA[
Ale czy czasem do podtrzymywania pracy silnika nie musiałbyś ciągle wysyłać cmd = 6 ? <br />Myślę, że powinno to być w ten sposób, że raz wysyłasz komendę i potem o ile kolejna komenda nie dotyczy silnika to silnik działa dopóki nie wykona zadanej liczby obrotów:<br />[syntax=c]cmd=analyse_get_url((char *)&amp;(buf[dat_p+4]));<br />if (cmd==6) { flaga_lewo=1; flaga_prawo=0; flaga_stop=0;} //w lewo<br />if (cmd==7) { flaga_lewo=0; flaga_prawo=1; flaga_stop=0;} //w prawo<br />if (cmd==8) { flaga_lewo=0; flaga_prawo=0; flaga_stop=1;} //stop<br />if(flaga_lewo) check_and_step();[/syntax]<br /><br />Wtedy funkcja check_and_step() będzie wywoływana, aż do wykonania określonej liczby kroków. Natomiast wywołanie na końcu silnik_stop(); jest konieczne, bo inaczej masz jak ty to określasz &quot;zwarcie&quot;. To nie zwarcie tylko zatrzymanie na ostatnim z kroków i zasilanie ciągle jest dołączone co objawia się unieruchomieniem wału silnika:<br />[syntax=c]void check_and_step(void)<br />{<br />   if(ms2_flag &amp;&amp; step_x &gt; 0)<br />   {<br />      kroki_lewo();<br />      step_x--;<br />      ms2_flag=0;<br />   }<br />   if( !step_x ) {flaga_lewo=0; silnik_stop(); }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 22 wrz 2012, o 19:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-09-22T13:40:05+01:00</updated>
<published>2012-09-22T13:40:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15724#p15724</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15724#p15724"/>
<title type="html"><![CDATA[Re: ATB-ETH + Silnik krokowy bipolarny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15724#p15724"><![CDATA[
Zmienna ms2_flag jest globalna:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">volatile uint8_t ms2_flag;</div><br />Funkcja kroki_lewo(); jest wzięta z płyty dołączonej do książki i wygląda tak:<br />[syntax=c]void kroki_lewo(void) {<br />static uint8_t kr;<br /><br />if( kr == 0 ) { KROK1; }<br />if( kr == 1 ) { KROK2; }<br />if( kr == 2 ) { KROK3; }<br />if( kr == 3 ) { KROK4; }<br /><br />if( ++kr &gt; 3 ) kr=0;<br />}[/syntax]<br />Funkcja odpowiadająca za kroki zadane z urla wygląda tak:<br />[syntax=c]void check_and_step(void)<br />{<br />if(ms2_flag &amp;&amp; step_x &gt; 0)<br />{<br />kroki_lewo();<br />//lcd_str_P( PSTR(&quot;flaga OK!&quot;) );<br />ms2_flag=0;<br />}<br />}[/syntax]<br />I jest ona w pętli głównej while(1).<br /><br />Inicjalizacja silnika i ustawienie dla niego timera jest w funkcji main():<br />[syntax=c]/*STEPPER MOTOR INIT SECTION*/<br />DDRD |= A1|A2|B1|B2;<br />silnik_stop();<br /><br />/* ustawienie TIMER0 dla F_CPU=16MHz */<br />TCCR0 |= (1&lt;&lt;WGM01);/* tryb CTC */<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);/* preskaler = 1024 */<br />//OCR0 = 31;/* dodatkowy podział przez 31 (rej. przepełnienia) */<br />//OCR0 = 78;//przepelnienie dla 200Hz<br />OCR0 = 39;//przepelnienie dla 400Hz IDEANE KROKI!<br />//OCR0 = 22;//przepelnienie dla 700Hz<br />TIMSK |= (1&lt;&lt;OCIE0);/* zezwolenie na przerwanie CompareMatch */<br />/*END OF STEPPER MOTOR INIT SECTION*/[/syntax]<br /><br />W pętli while(1) uruchomienie funkcji check_and_step następuje poprzez:<br />[syntax=c]cmd=analyse_get_url((char *)&amp;(buf[dat_p+4]));<br />if (cmd==6){<br />                        check_and_step();<br />                }[/syntax]<br />w/w kodu używam również do uruchomienia LCD oraz migania diodą (inna wartość cmd==x uruchamia np leda). Gdy do w/w if'a dodam linijkę wyświetlającą tekst na LCD to ten się pojawia więc na pewno program wchodzi do warunku. To samo gdy w funkcji check_and_step dopiszę wyświetlanie tekstu na LCD, więc sama funkcja tez jest uruchamiana.<br />No i obsługa przerwania:<br />[syntax=c]ISR(TIMER0_COMP_vect)<br />{<br />ms2_flag = 1;/* ustawiamy flagę co 2,5ms */<br />}<br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 22 wrz 2012, o 13:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-09-21T17:23:05+01:00</updated>
<published>2012-09-21T17:23:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15659#p15659</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15659#p15659"/>
<title type="html"><![CDATA[Re: ATB-ETH + Silnik krokowy bipolarny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15659#p15659"><![CDATA[
Napisałem sobie funkcję która wywołuje się w głównej pętli programu więc nie powinno być problemu z odczytem flagi przerwania:<br />[syntax=c]void check_and_step(void)<br />{<br />if(ms2_flag &amp;&amp; step_x &gt; 0)<br />{<br /><br />kroki_lewo();<br />step_x--;<br />ms2_flag=0;<br />}<br />}[/syntax]<br />zmienna step_x jest globalna.<br />Niestety znów pojawia się zwarcie.<br /><br />Zakomentowałem całą zawartość while(1) i wrzuciłem tylko:<br />[syntax=c] if(ms2_flag)<br />        {<br />        kroki_lewo();<br />        ms2_flag=0;<br />        }[/syntax]<br />I znów to samo, jak to możliwe skoro cały kod do obsługi silników jest skopiowany z projektu w którym przed wczoraj kręciłem silniczkami bez problemów:/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 21 wrz 2012, o 17:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-09-21T10:55:09+01:00</updated>
<published>2012-09-21T10:55:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15630#p15630</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15630#p15630"/>
<title type="html"><![CDATA[Re: ATB-ETH + Silnik krokowy bipolarny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15630#p15630"><![CDATA[
Teraz znów pojawia się zwarcie.<br />Poza tym wydaje mi się, że obsługa kroków nie może być w if'ie gdyż funkcja nie znajduje się w pętli głównej i po jednorazowym wykonaniu warunku przejdzie dalej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 21 wrz 2012, o 10:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2012-09-20T16:57:25+01:00</updated>
<published>2012-09-20T16:57:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15561#p15561</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15561#p15561"/>
<title type="html"><![CDATA[Re: ATB-ETH + Silnik krokowy bipolarny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15561#p15561"><![CDATA[
Nie wiadomo czy step_left jest zainicjowana dlatego też należy dokonać jeszcze jednej modyfikacji w tym co napisałem:<br />[syntax=c]if(step_left &gt;= step_x){<br />   step_left = 0;<br />   silnik_stop();<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 20 wrz 2012, o 16:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-09-20T14:51:48+01:00</updated>
<published>2012-09-20T14:51:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15549#p15549</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15549#p15549"/>
<title type="html"><![CDATA[Re: ATB-ETH + Silnik krokowy bipolarny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15549#p15549"><![CDATA[
Niestety teraz silnik nawet nie drgnie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 20 wrz 2012, o 14:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2012-09-20T14:25:29+01:00</updated>
<published>2012-09-20T14:25:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15546#p15546</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15546#p15546"/>
<title type="html"><![CDATA[Re: ATB-ETH + Silnik krokowy bipolarny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15546#p15546"><![CDATA[
Poniższy kod jest błędny. Pętla for wykona 1 krok dla ms2_flag=1 i natychmiast pozostałe kroki dla ms2_flag=0<br />[syntax=c]for(step_left=0; step_left &lt; step_x; step_left++){<br />   if(ms2_flag){<br />   kroki_lewo();<br />   ms2_flag=0;<br />   }<br />}[/syntax]<br />Spróbuj tak:<br />[syntax=c]if( ms2_flag &amp;&amp; step_left &lt; step_x ){<br />   kroki_lewo();<br />   ms2_flag=0;<br />   step_left++;<br />}<br />if(step_left == step_x){<br />   step_left = 0;<br />   silnik_stop();<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 20 wrz 2012, o 14:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-09-20T13:53:45+01:00</updated>
<published>2012-09-20T13:53:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15544#p15544</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15544#p15544"/>
<title type="html"><![CDATA[ATB-ETH + Silnik krokowy bipolarny]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1568&amp;p=15544#p15544"><![CDATA[
Po uruchomieniu diody i wyświetlacza LCD poprzez ATB-ETH i TCP/IP przyszedł czas na silnik krokowy bipolarny.<br />Najpierw korzystając z biblioteki z książki pobawiłem się krokowcem, sprawdziłem ile ma kroków na pełny obrót, pokręciłem w prawo, lewo itp.<br />Przyszedł czas na dopisanie jego obsługi do mojej stronki www. Tak jak pisałem w poprzednim poście na temat eth+lcd mam zrobiony formularz w którym tym razem podaje się ilość kroków do urla, póki co ograniczyłem się do kręcenia w jedną stronę żeby zbytnio nie komplikować kodu. I teraz tak:<br />Warunek if:<br />[syntax=c]if (find_key_val(str,gStrbuf,5,&quot;sw&quot;)){<br />                if (gStrbuf[0]=='0'){<br />                        return(0);<br />                }<br />                if (gStrbuf[0]=='1'){<br />                        return(1);<br />                }<br />                //sw==5 uruchamia lcd<br />                if (gStrbuf[0]=='5'){<br />                lcd_cmd=5;<br />                //return(5);<br />                }<br />                if (gStrbuf[0]=='6')<br />                {<br />                step_cmd=6;<br />                }<br />        }[/syntax]<br />Ładnie nadaje zmiennej step_cmd wartość &quot;6&quot; następnie:<br />[syntax=c]        if (step_cmd==6){<br />        silnik_stop();<br />        if(find_key_val(str, gStrbuf,5,&quot;ox&quot;)){<br />        step_x = atoi(gStrbuf);<br />        lcd_cls();<br />        lcd_int(step_x);<br />        for(step_left=0; step_left &lt; step_x; step_left++){<br />        if(ms2_flag){<br />        kroki_lewo();<br />        ms2_flag=0;<br />        }<br />        }<br />//zerowanie step_cmd po zrobieniu krokow<br />        }<br />        }[/syntax]<br />Zczytuje ile kroków na osi x &quot;ox&quot; silnik ma wykonać, nadając zmiennej step_x zadaną wartość co  sprawdzam wyświetlając sobie na LCD.<br />Następnie w/w pętla for powinna wykonać zadaną ilość kroków w lewo ale niestety silnik robi 1 krok i w układzie pojawia się zwarcie gdyż przygasa podświetlenie LCD a silniczka nie da się przekręcić palcami w żadną stronę.<br />Oczywiście mam ustawiony timer dla silnika:<br />[syntax=c]/*STEPPER MOTOR INIT SECTION*/<br />DDRD |= A1|A2|B1|B2;<br /><br />/* ustawienie TIMER0 dla F_CPU=16MHz */<br />TCCR0 |= (1&lt;&lt;WGM01);/* tryb CTC */<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);/* preskaler = 1024 */<br />//OCR0 = 31;/* dodatkowy podział przez 31 (rej. przepełnienia) */<br />//OCR0 = 78;//przepelnienie dla 200Hz<br />OCR0 = 39;//przepelnienie dla 400Hz IDEANE KROKI!<br />//OCR0 = 22;//przepelnienie dla 700Hz<br />TIMSK |= (1&lt;&lt;OCIE0);/* zezwolenie na przerwanie CompareMatch */<br />/* przerwanie wykonywane z częstotliwością ok 2ms (500 razy na sekundę) */<br />/* do naszych celów nie musi być to bardzo dokładne 2ms */<br />/*END OF STEPPER MOTOR INIT SECTION*/<br /><br />sei();[/syntax]<br />Włączenie przerwań sei(); jest oczywiście w funkcji main().<br /><br />Oraz obsługę przerwania:<br />[syntax=c]/* ================= PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH */<br />/* pełni funkcję timera programowego wyznaczającego podstawę czasu = 2ms oraz 1s */<br />ISR(TIMER0_COMP_vect)<br />{<br />ms2_flag = 1;/* ustawiamy flagę co 2,5ms */<br />}[/syntax]<br />Proszę o podpowiedź gdzie popełniam błąd bo już skończyły mi się pomysły.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 20 wrz 2012, o 13:53</p><hr />
]]></content>
</entry>
</feed>