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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-06-24T21:06:22+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=15512&amp;mode</id>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-06-24T21:06:22+01:00</updated>
<published>2016-06-24T21:06:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162902#p162902</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162902#p162902"/>
<title type="html"><![CDATA[Re: Czas pomiędzy zboczami, Icr poza zakresem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162902#p162902"><![CDATA[
hmm. <br />obliczyć prędkość w km/h.<br />to może zacząć nie od czasu jednego obrotu, tylko od ilości obrotów na czas?<br />np: timer w odstępach czasu liczy ile obrotów uzyskano.<br />dla 1000/min- da 16,666.. obr/sek.<br />sprawdzając ilość co sekundę, będzie wynik 16 - 17, średnia z 2-3 odczytów da precyzyjniejszy wynik chwilowy aktualizowany co 2-3 sek.?<br />jeżeli obroty są mniejsze, można odpowiednio zagęścić -( np, magnesy na szprychach-), tak żeby impulsy były 4, 5, 6, 10 razy częściej, i uwzględnić to w obliczeniach.<br />a przebytą trasę można zliczać, sumując obroty, i mnożąc przez obwód. ?<br />może jakoś tak.?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 24 cze 2016, o 21:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[henryxxl]]></name></author>
<updated>2016-06-24T18:24:37+01:00</updated>
<published>2016-06-24T18:24:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162892#p162892</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162892#p162892"/>
<title type="html"><![CDATA[Re: Czas pomiędzy zboczami, Icr poza zakresem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162892#p162892"><![CDATA[
Witam.<br />Dziękuję za odpowiedź. Nie mam pomysłu jak zrobić dzielenie po przecinku bez używania double.<br />oto fragment kodu i przykładowe obliczenia. Chcę obliczyć prędkość na podstawie czasu pełnego obrotu koła (jak licznik rowerowy). Według mojego myślenia powinienem czas cyklu podzielić przez taktowanie procesora aby obliczyć czas obrotu w sekundach później obliczyć ilość obrotów na sekundę i tak dalej aż uzyskam prędkość w km/h. Proszę o wskazówkę jak poradzić sobie z takimi liczbami i odpowiedź czy dobrze myślę lub wskazać jakiś lepszy pomysł.<br />Pozdrawiam i dziękuję za odpowiedzi.<br />[syntax=c]czas_jednego_obrotu=czas_cyklu/8000000; //np:349526 /8000000 =0,04369075  (double)<br />obroty_na_sekunde=1.0/czas_jednego_obrotu; //1.0/0,04369075=22,88813993808758  (double)[/syntax]<br /><br />Edit<br />Zrobiłem rzutowanie zmiennej czas_jednego_obrotu i jak narazie idę do przodu. Działam dalej <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=639">henryxxl</a> — 24 cze 2016, o 18:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2016-06-16T06:16:31+01:00</updated>
<published>2016-06-16T06:16:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162406#p162406</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162406#p162406"/>
<title type="html"><![CDATA[Re: Czas pomiędzy zboczami, Icr poza zakresem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162406#p162406"><![CDATA[
Nie mam czasu, żeby dokładnie analizować Twój kod, ale proponuję, żebyś przede wszystkim opanował typy zmiennych całkowitych (jaka jest różnica pomiędzy zmiennymi ze znakiem i bez, jaki jest zakres poszczególnych typów 8-, 16-, 32-bitowych), bo moim zdaniem to z ich nieznajomości wynikają Twoje problemy. Ja wiem, każdy chciałby jak najszybciej opanować sztukę programowania, ale tu nie ma drogi na skróty. Trzeba trochę czasu na poznanie teorii poświęcić.<br /><br />Jak już wspomniałem nie analizowałem całego kodu, więc podam tylko przykład:<br /><div class="quotetitle">henryxxl napisał(a):</div><div class="quotecontent"><br />[syntax=c]czas_jednego_obrotu=10000000*czas_cyklu/8000000;[/syntax]<br /></div><br />Jak już używasz stałych wykraczających poza zakres int (w avr-libc ten typ ma 16 bit), to powinieneś używać przyrostków L lub UL (czyli np. 10000000UL). Tutaj jednak to nie rozwiąże problemu.<br />Większym problemem jest tutaj zakres zmiennych. Jak myślisz, jaki będzie wynik działania<br />'10000000*czas_cyklu'<br />gdzie 'czas cyklu' jest krotnością liczby 65536? Nawet przy zmiennej 'przepelnienia' równej 1 wynik będzie wynosił 655360000000, czyli ponad 655*10^9, gdzie zakres zmiennej 32-bitowej ze znakiem jest tylko trochę większy od 2*10^9. Nawet jeśli końcowy wynik (po podzieleniu przez 8000000) będzie się mieścił w zmiennej 32-bitowej, to i tak najpierw musi być wykonana operacja mnożenia.<br />A wystarczyłoby zrobić np tak:[syntax=c]czas_jednego_obrotu=10*czas_cyklu/8;[/syntax]Po co komplikować proste rzeczy?<br /><br />Tak jak napisałem, nie analizowałem całości, więc tego typu błędów może być więcej (np. zmienne 'czas_cyklu' czy też 'czas_jednego_obrotu', być może i inne, powinny być typu unsigned, bo to zwiększy ich zakres, a przecież czas raczej wartości ujemnych nie przyjmuje). Poświęć trochę czasu na opanowanie typów zmiennych (głownie typów całkowitych), przemyśl swoje obliczenia i popraw błędy. Jak sam włożysz w to więcej wysiłku, to pewnie inni też chętniej pomogą.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 16 cze 2016, o 06:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[henryxxl]]></name></author>
<updated>2016-06-15T21:37:55+01:00</updated>
<published>2016-06-15T21:37:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162395#p162395</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162395#p162395"/>
<title type="html"><![CDATA[Re: Czas pomiędzy zboczami, Icr poza zakresem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162395#p162395"><![CDATA[
Koledzy siedzę nad tym kilka wieczorów i nie mam pomysłu jak rozwiązać ten problem ;(<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=639">henryxxl</a> — 15 cze 2016, o 21:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[henryxxl]]></name></author>
<updated>2016-06-14T19:27:12+01:00</updated>
<published>2016-06-14T19:27:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162292#p162292</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162292#p162292"/>
<title type="html"><![CDATA[Re: Czas pomiędzy zboczami, Icr poza zakresem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=162292#p162292"><![CDATA[
Witam.<br />Obliczyłem czas jednego obrotu lecz wyniki są bardzo chwiejne i potrafią osiągać wyniki ujemne  (zmienna czas_jednego_obrotu). atmemga32 taktowanie 8 MHz. <br />Obroty do testów odczytuje z wiatraka który zasilany jest cały czas napięciem 5v:<br /><a href="https://obrazkiforum.atnel.pl/639/2bd7477bfd4b418f497f93cca69dcf19.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/639/2bd7477bfd4b418f497f93cca69dcf19.jpg" alt="Obrazek" /></a><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;pcd8544.h&quot;  // --- biblioteka wyswietlacza<br />#include &lt;stdlib.h&gt;<br />#include &lt;math.h&gt;<br /><br />#define LED_PIN (1&lt;&lt;PC7)<br />#define LED_TOG PORTC ^= LED_PIN<br /><br /><br /><br />long int czas_cyklu = 0;<br />long int czas_jednego_obrotu;<br />long int obroty_na_sekunde;<br />uint16_t test=34;<br />int cz_calkowita;<br />int a=0;<br />volatile uint16_t przepelnienia = 0;<br />volatile uint8_t pomiar_wykonany = 0;<br />volatile uint8_t pomiar_zbocze = 0;<br /><br />volatile uint16_t icr_aktualny = 0;<br />volatile uint16_t icr = 0;<br />volatile uint16_t icr2 = 0;<br />char bufor&#91;20&#93;; // bufor potrzebny do zamiany zmiennej na stringa<br />char bufor2&#91;20&#93;; // bufor potrzebny do zamiany zmiennej na stringa<br />char bufor3&#91;20&#93;; // bufor potrzebny do zamiany zmiennej na stringa<br /><br />void pomiar(void) {<br /><br />pomiar_wykonany = 0;<br />pomiar_zbocze = 1;<br />przepelnienia = 0;<br />TIMSK |= (1 &lt;&lt; TICIE1);<br /><br />}<br /><br />int main(void) {<br /><br />DDRC |= LED_PIN;<br />PORTD |= (1 &lt;&lt; PD6);   //włącz pullup transoptora<br />PCD_Ini();  // inicjacja LCD<br />PCD_Contr(0xC3);  // kontrast<br />PCD_Clr();<br /><br /><br />TCCR1A = 0;<br />TCCR1B = (1 &lt;&lt; CS10);<br /><br /><br />sei();<br />pomiar();<br />while (1) {<br /><br />if (pomiar_wykonany) {<br />czas_cyklu = 65536  * przepelnienia-icr+icr2 ;<br /><br />pomiar();<br />}<br />czas_jednego_obrotu=10000000*czas_cyklu/8000000;<br /><br /><br /><br /><br /><br /><br />PCD_GotoXYFont(1, 2);<br />ltoa(czas_cyklu, bufor2, 10);<br />PCD_Str(FONT_1X, bufor2);<br />PCD_GotoXYFont(1, 1);<br />ltoa(czas_jednego_obrotu, bufor, 10);<br />PCD_Str(FONT_1X, bufor);<br /><br /><br />PCD_Upd();<br /><br />//_delay_ms(50);<br />PCD_Clr();<br /><br /><br /><br /><br />}<br /><br />}<br /><br />//PROCEDURA OBSŁUGI PRZERWANIA<br />ISR(TIMER1_CAPT_vect) {<br />icr_aktualny = ICR1;<br /><br />if (pomiar_zbocze == 1) {<br />//zgaś flagę przerwania od przepełnienia<br />TIFR |= (1 &lt;&lt; TOV1);<br />//włącz przerwania od przepełnienia Timer1<br />TIMSK |= (1 &lt;&lt; TOIE1);<br /><br />przepelnienia = 0;<br />icr = icr_aktualny;<br />} else if (pomiar_zbocze == 2) {<br /> TIMSK &amp;= ~( (1&lt;&lt;TICIE1) | (1&lt;&lt;TOIE1) );<br />icr2 = icr_aktualny;<br /><br />pomiar_wykonany = 1;<br />}<br /><br />pomiar_zbocze++;<br />}<br /><br /><br />ISR(TIMER1_OVF_vect) {<br />przepelnienia++;<br />LED_TOG;<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=639">henryxxl</a> — 14 cze 2016, o 19:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-06-06T20:38:28+01:00</updated>
<published>2016-06-06T20:38:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=161777#p161777</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=161777#p161777"/>
<title type="html"><![CDATA[Re: Czas pomiędzy zboczami, Icr poza zakresem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=161777#p161777"><![CDATA[
zerknij, pomyślałem- dopisałem po 25 min.: <br />&quot;ltoa&quot;. 32bity oraz (uint32_t  lub int32_t <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 6 cze 2016, o 20:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[henryxxl]]></name></author>
<updated>2016-06-06T16:19:24+01:00</updated>
<published>2016-06-06T16:19:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=161762#p161762</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=161762#p161762"/>
<title type="html"><![CDATA[Re: Czas pomiędzy zboczami, Icr poza zakresem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=161762#p161762"><![CDATA[
Zmiana na utoa nic nie pomogła. Wartość ICR o ile dobrze pamiętam powinna być maksymalna 65535 a u mnie są za wysokie wyniki ;( Chcę zrobić licznik prędkości.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=639">henryxxl</a> — 6 cze 2016, o 16:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-06-02T22:22:24+01:00</updated>
<published>2016-06-02T22:22:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=161555#p161555</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=161555#p161555"/>
<title type="html"><![CDATA[Re: Czas pomiędzy zboczami, Icr poza zakresem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=161555#p161555"><![CDATA[
witam,<br />problem chyba w linijce 43:<br />itoa ....utoa.. gdzieś było o wyświetlaniu wartości poza zakresem.<br />itoa wyświetla chyba int, a tu potrzebne jest uint.<br /><br /><a href="http://forum.atnel.pl/topic11931.html?hilit=wy%C5%9Bwietlanie%20ltoa"  class="postlink">http://forum.atnel.pl/topic11931.html?hilit=wy%C5%9Bwietlanie%20ltoa</a><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 25 minutach ]</span></strong><br /><br />w tym przypadku to nawet ltoa, -- 32 bity.<br />oraz zmienna uint32_t,  skoro ma mieć wartość, &quot; 1213001 &quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 2 cze 2016, o 22:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[henryxxl]]></name></author>
<updated>2016-06-02T22:07:09+01:00</updated>
<published>2016-06-02T22:07:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=161553#p161553</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=161553#p161553"/>
<title type="html"><![CDATA[Czas pomiędzy zboczami, Icr poza zakresem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15512&amp;p=161553#p161553"><![CDATA[
Witam.<br />Próbuję napisac program który oblicza czas pomiędzy zboczami. Mój problem polega na tym ze na ekranie noki3310 wartość icr jest z poza jej zakresu czyli np:1213001, naprowadzicie koledzy gdzie popełniłem błąd ?<br />Pozdrawiam.[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;pcd8544.h&quot;  // --- biblioteka wyswietlacza<br />#include &lt;stdlib.h&gt;<br /><br />#define LED_PIN (1&lt;&lt;PC7)<br />#define LED_TOG PORTC ^= LED_PIN<br /><br />volatile uint16_t licznik=0;<br />volatile uint8_t wynik=0;<br />volatile uint8_t przepelnienia=0;<br />volatile uint16_t icr=0;<br />char bufor&#91;20&#93;; // bufor potrzebny do zamiany zmiennej na stringa<br />char bufor2&#91;20&#93;; // bufor potrzebny do zamiany zmiennej na stringa<br /><br />int main(void) {<br /><br />DDRC |= LED_PIN;<br />PORTD |= (1&lt;&lt;PD6);   //włącz pullup transoptora<br />PCD_Ini();  // inicjacja LCD<br />PCD_Contr(0xC3);  // kontrast<br />    PCD_Clr();<br /><br />static unsigned int ICR1_aktualny;<br />    // Inicjalizacja Timera1<br />            //przerwanie co 1s<br />TCCR1B &amp;= ~(1&lt;&lt;ICES1);      // Zbocze opadające na ICP<br />TCCR1B |= (1&lt;&lt;CS10);<br /><br />TIMSK |= (1&lt;&lt;TICIE1) | (1&lt;&lt;TOIE1);<br /><br />            sei();<br />        while(1){<br /><br /><br /><br /><br /><br /><br />PCD_GotoXYFont(1,1);<br />itoa(icr,bufor,5);<br />PCD_Str(FONT_1X,bufor);<br /><br />PCD_GotoXYFont(1,2);<br />itoa(wynik,bufor2,10);<br />PCD_Str(FONT_1X,bufor2);<br /><br />PCD_GotoXYFont(1,3);<br />itoa(przepelnienia,bufor2,10);<br />PCD_Str(FONT_1X,bufor2);<br /><br /><br /><br />PCD_Upd();<br /><br /><br /><br />                }<br /><br />        }<br /><br /><br /><br />//PROCEDURA OBSŁUGI PRZERWANIA<br />ISR(TIMER1_CAPT_vect)<br />{<br />wynik=licznik-ICR1;<br />licznik=ICR1;<br />icr=ICR1;<br />}<br />ISR(TIMER1_OVF_vect)<br />{<br />przepelnienia++;<br />        LED_TOG;<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=639">henryxxl</a> — 2 cze 2016, o 22:07</p><hr />
]]></content>
</entry>
</feed>