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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-11-20T19:48:14+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1748&amp;mode</id>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-11-20T19:48:14+01:00</updated>
<published>2012-11-20T19:48:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=19203#p19203</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=19203#p19203"/>
<title type="html"><![CDATA[Re: Problem z obliczeniami na int16_t]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=19203#p19203"><![CDATA[
Zamontowałem kwarc 20Mhz, zmienną cmd zmieniłem na int8_t, dołożyłem suwak w HTML5 + Js i wszystko hula aż miło:)<br />Suwakiem ustawiamy liczbę kroków dla silnika krokowego, klikamy button i obserwujemy jak machina rusza:) Suwak działa w obydwie strony, w planach mam dodanie drugiego steppera.<br />Co ciekawe przy kwarcu 16Mhz gubiła się komunikacja z SPI a przy obecnym mam dodatkowo uruchomiony LCD i UART i układ chodzi od 3 dni bez problemu;)<br />Tak więc dla wszystkich którzy poddają się przy projektach - czasami trzeba posiedzieć i kilka tygodni (miesięcy) ale w końcu się udaje:)<br /><img src="http://img823.imageshack.us/img823/1507/scrno.png" alt="Obrazek" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 20 lis 2012, o 19:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2012-11-05T07:14:20+01:00</updated>
<published>2012-11-05T07:14:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18227#p18227</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18227#p18227"/>
<title type="html"><![CDATA[Re: Problem z obliczeniami na int16_t]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18227#p18227"><![CDATA[
<div class="quotetitle">mlekorlz napisał(a):</div><div class="quotecontent"><br />Jeśli zadam kroki_lewo &lt; 100 a następnie kroki_prawo &lt; kroki_lewo wszystko jest w porządku.<br /></div><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />zapytania http wymagają prawie 100% mocy procka - a ty przecież &quot;kradniesz&quot; sporo procent mocy na obsługę silników i jeszcze innych pętli w swoim programie głównym, z których pewnie część jest bardzo mało optymalnych.<br /></div><br />Myślę, że trochę się rozjaśniło. Operacje dzielenia modulo liczb 16-bitowych zajmują zbyt dużo czasu. Dlaczego przesyłasz o ile przestawić silnik? Może lepiej wysyłać na jaką pozycje silnik ma się ustawić. Wtedy zmienne mogły by być 8-bitowe, a dzielenia by nie było:<br /><br />[syntax=c]extern uint8_t steps_state; //0...100<br />extern uint8_t steps_received; //0...100<br />extern uint8_t steps_todo; //0...100<br /><br />if(find_key_val(str, gStrbuf,5,&quot;ox&quot;)){<br /> steps_received = atoi(gStrbuf);<br /><br /> if( (steps_received - steps_state)&gt;0 )//obroty w lewo<br /> {<br />   left_dir = 1;<br />   right_dir = 0;<br />   steps_todo = steps_received - steps_state;<br />   steps_state = steps_state + steps_todo;<br /> }<br /> else if( (steps_received - steps_state)&lt;0 ) //obroty w prawo<br /> {<br />   left_dir = 0;<br />   right_dir = 1;<br />   steps_todo = steps_state - steps_received;<br />   steps_state = steps_state - steps_todo;<br /> }<br /> else //steps_received == steps_state<br /> {<br />    steps_todo = 0;<br /> }<br />}[/syntax]<br />Podglądnij kod w asemblerze jak się zmienił. Obrót w lewo i prawo korzysta tylko z parametru &quot;ox&quot;.<br /><br />PS. Zmienna cmd powinna być ze znakiem skoro masz warunek cmd==-1<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 5 lis 2012, o 07:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-11-04T22:03:06+01:00</updated>
<published>2012-11-04T22:03:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18207#p18207</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18207#p18207"/>
<title type="html"><![CDATA[Re: Problem z obliczeniami na int16_t]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18207#p18207"><![CDATA[
<div class="quotetitle">mlekorlz napisał(a):</div><div class="quotecontent"><br />Kod serwera pochodzi z książki więc uznałem, że był on przez Pana przetestowany,<br /></div><br />Czy ty widziałeś kod serwera z książki ? czy ten serwer coś robi poza statycznym wyświetleniem czegoś ? A i tak może się zawiesić z byle powodu gdy naraz do serwera dotrze zbyt wiele zapytań z zewnątrz np z różnych adresów IP. <br /><br /><div class="quotetitle">mlekorlz napisał(a):</div><div class="quotecontent"><br />zcztywanie z URLa pochodzi z tuxgraphics, zczytane zmienne są prawidłowe. Podłączanie innych układów do niego nie powodowało problemów.<br /></div><br />To widziałem po twoim kodzie. Jeśli myślisz, że pisanie bardziej zaawansowanych aplikacji z użyciem stosu TCP i mikrokontrolera 8-bit a SZCZEGÓLNIE w postaci serwera HTTP to poezja - to się GRUBO mylisz niestety, to jest piekło <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .... więc zaczynając pisać to &quot;welcome to hell&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... <br /><br /><div class="quotetitle">mlekorlz napisał(a):</div><div class="quotecontent"><br />Jak zatem mogę jeszcze sprawdzić gdzie leży problem?<br /></div><br /><br />Przede wszystkim to od BARDZO ale to BARDZO dokładnego przestudiowania całej strony tuxgraphics i o tym jak autorzy sami piszą od początku o swoim stosie TCP, o kłopotach, problemach itp - np tych związanych także z ENC gdy w pierwotnych ich aplikacjach był zasilany wraz z prockiem z 3,3V i procek był taktowany 8MHz. Dlaczego poszli w stronę taktowania 12,5MHz z ECN ... ale ok ten temat już cię nie dotyczy bo masz ATB-ETHERNET i możesz procka zasilać +5V dzięki czemu możesz go taktować np 20MHz. Do poprawnej pracy z ENC procek powinien być taktowany minimum 16MHz a najlepiej 20MHz .... inaczej mogą być zwiechy i konieczny przede wszystkim Watchdog. Ciekawe jakie ty masz taktowanie?<br /><br />Kolejna sprawa - pisanie aplikacji z użyciem stosu TCP to przede wszystkim próba dogłębniejszego poznania stosu i jego zasad działania. A nie że się tam weźmie jakiś stos i nagle wszystko super.<br /><br />Ja już nawet na tym forum, bo nie pamiętam czy w książce nawet tego nie napisałem. Że generalnie odpalanie serwera HTTP na procesorze 8-bitowym to POMYŁKA GENETYCZNA <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />czy to oznacza, że ethernet i 8-bitowce to tylko &quot;pic na wodę fotomontaż&quot; ? NIE<br /><br />ale dlatego trzeba zwrócić na inne sposoby pracy i wykorzystania ethernetu. 8-bitowiec nie podoła już nawet kilku żądaniom konkurencyjnym http, tu trzeba i to dobrego ARM'a !<br /><br />ale za to 8-bitowiec sobie dobrze poradzi np z UDP, albo ......<br /><br />albo z klientem www (web client) .... a tak się składa, że fajny stosik z tuxgraphics daje takie możliwości. Chodzi o to aby nie narażać procka na konkurecyjne zapytania w trybie TCP (HTTP) bo to masakra. Podczas gdy z krótkimi i szybkimi zapytaniami ale niewielkimi ramkami UDP dosyć dobrze sobie poradzi<br /><br />dlatego można pisać serwery http dla 8-bitowców ale to wymaga już na prawdę większego doświadczenia w TCP i programowaniu wielowątkowym, żeby można było zrozumieć na jakich etapach dochodzi do zwiechy w takim stosie. Nawet z debugerem sprzętowym ciężko byłoby to wyłapywać - a gdy jeszcze weźmiemy kłopoty ENC, który oczekuje bardzo szybkiej komunikacji po SPI z prockiem, a tu np AVR próbuje z nim gadać z poziomu prędkości ŚLIMAKA - to czasem będzie miał focha i się zawiesi - to akurat normalka.<br /><br />to wszystko w takim telegraficznym skrócie - więc zobacz ile rzeczy tu jest ważnych poza twoimi kropkami wysyłanymi na uart i pozostałymi rzeczami w programie ..... a zresztą ....<br /><br />zapytania http wymagają prawie 100% mocy procka - a ty przecież &quot;kradniesz&quot; sporo procent mocy na obsługę silników i jeszcze innych pętli w swoim programie głównym, z których pewnie część jest bardzo mało optymalnych. A jeszcze jak gdzieś wstawisz byle kociego _delay'a - to KAPLICA z ZONKIEM razem wzięta <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />teraz jaśniej ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 lis 2012, o 22:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-11-04T21:17:14+01:00</updated>
<published>2012-11-04T21:17:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18203#p18203</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18203#p18203"/>
<title type="html"><![CDATA[Re: Problem z obliczeniami na int16_t]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18203#p18203"><![CDATA[
Na kodzie również się skupiam, przestudiowałem go setki razy, tyle samo razy poprawiałem coś, co moim zdaniem mogło być nie tak.<br />Czy mój tok myślenia, że skoro kropki nadal się wysyłają to znaczy, że sam moduł sieciowy się zawiesił jest błędny?<br />Kod serwera pochodzi z książki więc uznałem, że był on przez Pana przetestowany, zcztywanie z URLa pochodzi z tuxgraphics, zczytane zmienne są prawidłowe. Podłączanie innych układów do niego nie powodowało problemów. Jak zatem mogę jeszcze sprawdzić gdzie leży problem?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 4 lis 2012, o 21:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-11-04T20:59:17+01:00</updated>
<published>2012-11-04T20:59:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18198#p18198</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18198#p18198"/>
<title type="html"><![CDATA[Re: Problem z obliczeniami na int16_t]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18198#p18198"><![CDATA[
<div class="quotetitle">mlekorlz napisał(a):</div><div class="quotecontent"><br />Takie uroki programowania na Uc, że prócz złego kodu, problem może tkwić w połączeniach, uszkodzonych układach itp stąd, gdy kompilator nie wyświetla błędów człowiek zaczyna się zastanawiać czy aby na pewno sprzęt jest sprawny:).<br /></div><br /><br />Widzisz ...... ja w takich przypadkach zastanawiam się, czy aby na pewno gdzieś błędu nie popełniłem. Zastanawiam się co przeoczyłem - bo przecież nie może być winny układ scalony, producent i na pewno zaraz nic mi się nie przepaliło.<br /><br />Poza tym w kodzie źródłowym może być milion razy więcej przyczyn że coś nie działa niż w samym sprzęcie.<br /><br />Ty się skupiasz tu nad silnikiem i wysyłaniem kropek na UART .... i to cię gubi niestety, bo uznałeś że cała reszta, czyli obsługa serwera http jest OK. A to tam pewnie leży pies pogrzebany.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 lis 2012, o 20:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-11-04T20:19:26+01:00</updated>
<published>2012-11-04T20:19:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18193#p18193</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18193#p18193"/>
<title type="html"><![CDATA[Re: Problem z obliczeniami na int16_t]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18193#p18193"><![CDATA[
Panie Mirku nie winię układu tylko w odpowiedzi na pierwszy post pod moim piszę co zauważyłem.<br />Co do kodu to również nie twierdzę, że jest w 100% w porządku, napisałem jedynie, że konsolowa wersja obliczania ilości kroków spisuje się rewelacyjnie a po przepisaniu jej na AVR pojawiają się problemy których nie potrafię rozgryźć - stąd mój post.<br />Takie uroki programowania na Uc, że prócz złego kodu, problem może tkwić w połączeniach, uszkodzonych układach itp stąd, gdy kompilator nie wyświetla błędów człowiek zaczyna się zastanawiać czy aby na pewno sprzęt jest sprawny:)<br />Ale wracając do tematu, dzisiaj robiłem sobie testy i zauważyłem, że owo zawieszenie to właściwie loteria, kod z terminala:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">RS232 OK!<br />ox rec, state: 150,150<br />ox oversteps: 50<br />ox todo: 100<br />ox rec, state: 50,150<br />ox oversteps: 50<br />ox todo: 0<br />ox rec, state: 50,150<br />ox oversteps: 50<br />ox todo: 0<br />oy rec: 150<br />oy state: -50<br />oy oversteps: 50<br />oy todo: 100<br />oy rec: 50<br />oy state: -50<br />oy oversteps: 50<br />oy todo: 0<br />ox rec, state: 50,50<br />ox todo: 50<br />oy rec: 60<br />oy state: -10<br />oy oversteps: 10<br />oy todo: 50<br />oy rec: 70<br />oy state: -70<br />oy oversteps: 70<br />oy todo: 0<br />ox rec, state: 99,99<br />ox todo: 99<br /></div><br />ox - obroty w lewo<br />oy - obroty w prawo<br />rec - kroki otrzymane z URLa<br />state - aktualny stan kroków<br />oversteps - kroki nadmiarowe<br />todo - kroki do zrobienia<br /><br />Jak widać z powyższego dzisiaj silnik kręcił się w obydwie strony nie przekraczając zakresu - czyli wszystko idealnie, jednak po ostatniej linijce układ przestał działać, nie wykonując ostatnich kroków. Kolejne próby przynosiły różny rezultat, czasami udało się zrobić kilkanaście ruchów, czasami kilka.<br />Z racji tego, że kod znam już praktycznie na pamięć nie umiem zauważyć błędów, piszę na forum bo wiadomo, że &quot;co dwie głowy to nie jedna&quot; i trzeźwemu spojrzeniu łatwiej coś zauważyć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 4 lis 2012, o 20:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-11-04T19:19:54+01:00</updated>
<published>2012-11-04T19:19:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18187#p18187</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18187#p18187"/>
<title type="html"><![CDATA[Re: Problem z obliczeniami na int16_t]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18187#p18187"><![CDATA[
No tak, problem z działaniem programu i co ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... oczywiście od razu winny ATB-ETHERNET albo no w zasadzie sam scalak ENC28J60. Eeeeeeh ta firma Microchip - takiego bubla wypuściła <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .... ciągle się zawiesza <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .... <br /><br />Bardzo przepraszam, za troszkę sarkastyczny ton tej wypowiedzi - ale na prawdę, to właśnie &quot;z takim podejściem do programowania&quot; (wyszukiwanie wszędzie winy - nawet w sprzęcie, tylko nie w kodzie, który piszę) wciąż walczę i tłumaczę, że tak nie można - ale widzę, że jak grochem o ścianę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 lis 2012, o 19:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-11-04T19:04:09+01:00</updated>
<published>2012-11-04T19:04:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18183#p18183</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18183#p18183"/>
<title type="html"><![CDATA[Re: Problem z obliczeniami na int16_t]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18183#p18183"><![CDATA[
Docelowo na stronie www będzie suwak w js więc zmienna nie przyjmie wartości &gt;100 dlatego nie skupiałem się na liczbach większych od 199.<br />Co do zawieszenia układu to uruchomiłem sobie timer na przerwaniu który co sekundę wysyła przez rs232 do terminala kropkę. Przy zawieszeniu układu pingi przestają lecieć, strona www się nie wyświetla a kropki nadal się pojawiają więc mniemam, że coś dzieje się z samym ATB-ETHERNET.<br />Link do projektu na githubie:<br /><a href="https://github.com/mlekorlz/serwery_tcp_ip_atmega32/tree/working_on/20_ETH_serwer_www_test_step%2Blcd"  class="postlink">https://github.com/mlekorlz/serwery_tcp_ip_atmega32/tree/working_on/20_ETH_serwer_www_test_step%2Blcd</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 4 lis 2012, o 19:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2012-11-04T13:13:11+01:00</updated>
<published>2012-11-04T13:13:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18163#p18163</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18163#p18163"/>
<title type="html"><![CDATA[Re: Problem z obliczeniami na int16_t]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18163#p18163"><![CDATA[
Na moje oko w tym kodzie wszystko gra (oprócz tego, że jak zadasz np.210 to wykona się 200, a nie 100 kroków). Może problem masz gdzieś dalej, a określenie &quot;układ się zawiesi&quot; jest zbyt ogólne.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 4 lis 2012, o 13:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mlekorlz]]></name></author>
<updated>2012-11-03T15:49:34+01:00</updated>
<published>2012-11-03T15:49:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18133#p18133</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18133#p18133"/>
<title type="html"><![CDATA[Problem z obliczeniami na int16_t]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1748&amp;p=18133#p18133"><![CDATA[
Witam,<br /><br />Napisałem sobie kawałek kodu odpowiedzialny za wykonanie zadanej ilości kroków w prawo i lewo który nie pozwala przekroczyć zakresu pełnego obrotu silnika krokowego.<br />Jeśli silnik posiada 100 kroków do pełnego obrotu to zadanie mu wartości np 150 kroków w prawo spowoduje obcięcie 50 nadmiarowych, analogicznie w drugą stronę.<br />Natomiast przy podaniu np 60 kroków w prawo obrót w lewo będzie możliwy jedynie o &lt;60.<br />Ogólnie chodzi o to by silnik pracował w zakresie 0-360 stopni w dwie strony.<br />Początkowo napisałem sobie kod w C który uruchomiony w konsoli idealnie spełnia swoje zadanie:<br />[syntax=c]#include &lt;stdio.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#define STEPS 100<br />/*<br /> * <br /> */<br />int main(int argc, char** argv) {<br /><br />int steps_state = 0;<br />int steps_received = 0;<br />int steps_todo = 0;<br />int oversteps = 0;<br />int steps_left = 0;<br />int steps_right = 0;<br />int steps_dir = 0;<br /><br />while(1){<br />    puts(&quot;Podaj kierunek 1-prawo, 2-lewo&quot;);<br />    scanf(&quot;%d&quot;, &amp;steps_dir);<br />    fputs(&quot;Dir: &quot;, stdout);<br />    printf(&quot;%d&quot;, steps_dir);<br />    putchar('\n');<br />    if(steps_dir == 1){<br />        puts(&quot;Podaj liczbe krokow w prawo: &quot;);<br />        scanf(&quot;%d&quot;, &amp;steps_received);<br />        printf(&quot;%d&quot;, steps_state);<br />        printf(&quot;%d&quot;, steps_received);<br />        steps_state += steps_received;<br />        fputs(&quot;State: &quot;, stdout);<br />        printf(&quot;%d&quot;, steps_state);<br />        putchar('\n');<br />        if(steps_state &gt; STEPS){<br />            oversteps = steps_state % STEPS;<br />            steps_state = STEPS;<br />            steps_todo = steps_received - oversteps;<br />            fputs(&quot;TODO: &quot;, stdout);<br />            printf(&quot;%d&quot;, steps_todo);<br />            putchar('\n');<br />        }<br />        else{<br />            steps_todo = steps_received;<br />            fputs(&quot;TODO1: &quot;, stdout);<br />            printf(&quot;%d&quot;, steps_todo);<br />            putchar('\n');<br />        }<br />    }<br />    if(steps_dir == 2){<br />        if(steps_state &gt; 100){<br />            steps_state = STEPS;<br />        }<br />        puts(&quot;Podaj liczbe krokow w lewo: &quot;);<br />        scanf(&quot;%d&quot;, &amp;steps_received);<br />        steps_state -= steps_received;<br />        fputs(&quot;State: &quot;, stdout);<br />        printf(&quot;%d&quot;, steps_state);<br />        putchar('\n');<br />        if(steps_state &lt; 0){<br />            oversteps = (steps_state*-1) % STEPS;<br />            steps_state = 0;<br />            steps_todo = steps_received - oversteps;<br />            fputs(&quot;TODO: &quot;, stdout);<br />            printf(&quot;%d&quot;, steps_todo);<br />            putchar('\n');<br />        }<br />        else{<br />            steps_todo = steps_received;<br />            fputs(&quot;TODO1: &quot;, stdout);<br />            printf(&quot;%d&quot;, steps_todo);<br />            putchar('\n');<br />        }<br />    }<br />    <br />}<br />    <br />    <br />    return (EXIT_SUCCESS);<br />}[/syntax]<br /><br />Przy przepisywaniu na avr pierwszym problemem był za mały zakres int8_t więc postanowiłem użyć int16_t co niestety nie zniwelowało mojego problemu który jest następujący:<br />Jeśli zadam kroki_lewo &lt; 100 a następnie kroki_prawo &lt; kroki_lewo wszystko jest w porządku.<br />Jeśli zadam kroki_lewo &gt; 100 to wykona się 100 kroków i układ się zawiesi.<br />Jeśli zadam kroki_lewo &lt; 100 a następnie kroki_prawo &gt; kroki_lewo układ się zawiesi.<br />Kod dla avr (Tutaj pierwszy obrót jest możliwy najpierw w lewo, odwrotnie było w powyższym kodzie):<br />[syntax=c]uint8_t start_stepper = 0;<br />int16_t steps_state = 0;<br />int16_t steps_received = 0;<br />int16_t steps_todo = 0;<br />int16_t oversteps = 0;<br />uint8_t steps_cmd = 0;<br />uint8_t right_dir = 0;<br />uint8_t left_dir = 0;<br /><br />if (steps_cmd==2){<br />                if(find_key_val(str, gStrbuf,5,&quot;ox&quot;)){<br />                steps_received = atoi(gStrbuf);<br />                steps_state += steps_received;<br />                left_dir = 1;<br />                right_dir = 0;<br />                if(steps_state &gt; STEPS){<br />                oversteps = steps_state % STEPS;<br />                //oversteps = (steps_state - STEPS)*(steps_state/STEPS);<br />                steps_state = STEPS;<br />                steps_todo = steps_received - oversteps;<br />                }<br />                else{<br />                steps_todo = steps_received;<br />                }<br />                }<br />                if(find_key_val(str, gStrbuf,5,&quot;oy&quot;)){<br />                steps_received = atoi(gStrbuf);<br /><br />                if(steps_state &gt; 100){<br />                steps_state = STEPS;<br />                }<br />                steps_state -= steps_received;<br />                right_dir = 1;<br />                left_dir = 0;<br />                  if(steps_state &lt; 0){<br />                  oversteps = (steps_state*-1) % STEPS;<br />                  //oversteps = ((steps_state*-1) - STEPS)*((steps_state*-1)/STEPS);<br />                  steps_state = 0;<br />                  steps_todo = steps_received - oversteps;<br />                  }<br />                      else{<br />                      steps_todo = steps_received;<br />                       }<br />                }<br />                return(2);[/syntax]<br />Zmienne:<br />[syntax=c]uint8_t start_stepper = 0;<br />int16_t steps_state = 0;<br />int16_t steps_received = 0;<br />int16_t steps_todo = 0;<br />int16_t oversteps = 0;<br />uint8_t steps_cmd = 0;<br />uint8_t right_dir = 0;<br />uint8_t left_dir = 0;[/syntax]<br />Są globalne<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=245">mlekorlz</a> — 3 lis 2012, o 15:49</p><hr />
]]></content>
</entry>
</feed>