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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-03-16T17:47:41+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6380&amp;mode</id>
<entry>
<author><name><![CDATA[mac34]]></name></author>
<updated>2014-03-16T17:47:41+01:00</updated>
<published>2014-03-16T17:47:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74588#p74588</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74588#p74588"/>
<title type="html"><![CDATA[Re: zaokrąglanie pomiaru do 3 miejsc po przecinku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74588#p74588"><![CDATA[
Ok już działa ,moja wina lekko się zapętliłem ,leci też pochwała dla Mirko T miałeś rację ,<br />ja po prostu używam tego w pętli i ciągle mi mnożyło *100 ,że w pewnym momencie się wszystko psuło.<br /><br />Wystarczyło na końcu pętli przywrócić zmiennej a starą wartość.<br /><br />[syntax=c]// ćwiczenie samego dzielenia wyniku pomiaru do 2 miejsc po przecinku<br />#include &lt;avr/io.h&gt;<br />#include &quot;lcd44780by_mario.h&quot;                    //dołączenie mojej biblioteki LCD<br />#include &lt;util/delay.h&gt;<br /><br /><br />uint32_t wynik;                                 //zmienna przetrzymujaca wynik<br />uint8_t cz_dziesietna;                          //czesc dziesietna wyniku<br />uint16_t cz_po_przecinku;                       //czesc ulamkowa ,po przecinku  <br />uint32_t a;<br />uint32_t b;<br /><br /><br />int main(void){<br /><br />PORTD = 0b11111111;                         //podciągniecie nieuzywanego portu D<br />    PORTC = 0b1111111;                         //podciągniecie nieuzywanego portu C<br /><br />    a=205;<br />    b=4;<br /><br /><br />    lcd_init();                     //inicjalizacja wywietlacza LCD<br /><br /><br />    while(1){<br /><br /><br /><br /><br />    a=a*100;<br />    wynik = a/b;<br />            cz_dziesietna = wynik/100;<br />        cz_po_przecinku = wynik % 100;   //na lcd jest 51,51 -&gt;zamiast 51,25 ,już jest OK!!!  (51,25)<br /><br /><br /><br /><br /><br />    lcd_cls();<br />    lcd_locate(1,2);<br />    lcd_str(&quot;dzielenie&quot;);             //wywietlanie napisu<br />    lcd_locate(2,2);<br />    lcd_str(&quot;wynik= &quot;);<br />    lcd_int(cz_dziesietna);<br />    lcd_char(',');                      // przecinek .<br />    lcd_int(cz_po_przecinku);<br /><br /><br /><br />    _delay_ms(500);<br /><br />        a=205;                           //tego brakowało i ciągle mnożyło przez 100 ,zapętliło się ;)<br /><br /><br /><br /><br /><br />    }                                     //koniec pętli While<br /><br /><br /><br /><br /><br />}                                              //koniec petli main[/syntax]<br /><br /><br />Swoją drogą trafiłem też na ciekawy przykład ,ale niestety nie rozumiem zapisu tej funkcji i jak ją tu zastosować <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />char Temp[8];<br />sprintf(Temp, &quot;%i&quot;, Zmienna_int);<br /><br />tylko że chciałbym zamienić typ float na string i wyświetlić 6 pierwszy znaków na lcd.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3077">mac34</a> — 16 mar 2014, o 17:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mac34]]></name></author>
<updated>2014-03-16T14:37:09+01:00</updated>
<published>2014-03-16T14:37:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74545#p74545</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74545#p74545"/>
<title type="html"><![CDATA[Re: zaokrąglanie pomiaru do 3 miejsc po przecinku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74545#p74545"><![CDATA[
Nie działa. <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br /><br />Zaczynam juz kombinować w stronę funkcji dtostrf() z biblioteki #include &lt;stdlib.h&gt;<br /><br />Chcę zamienić zmienną typu float na string i wyświetlić na LCD<br /><br />Tylko jak?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3077">mac34</a> — 16 mar 2014, o 14:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-03-16T13:56:45+01:00</updated>
<published>2014-03-16T13:56:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74539#p74539</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74539#p74539"/>
<title type="html"><![CDATA[Re: zaokrąglanie pomiaru do 3 miejsc po przecinku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74539#p74539"><![CDATA[
masz to w złej kolejności<br />[syntax=c]wynik = a/b;                //51,25<br />wynik = wynik*100;          //5125[/syntax]<br /><br />Po takim dzieleniu w zmiennej wynik nie masz 51,25 tylko 51<br />Jeżeli już to spróbuj tak<br />[syntax=c]a=a*100<br />wynik = a/b;                //51,25[/syntax]<br /><br />teraz powinno działać tak jak założyłeś<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 16 mar 2014, o 13:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-03-16T13:40:49+01:00</updated>
<published>2014-03-16T13:40:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74536#p74536</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74536#p74536"/>
<title type="html"><![CDATA[Re: zaokrąglanie pomiaru do 3 miejsc po przecinku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74536#p74536"><![CDATA[
Żeby korzystać z biblioteki math i zmiennych float ,bez tak dużego przyrostu kodu<br />dołącz linkerem tą bibliotekę.<br />Jak to zrobić przedstawia kolega <strong>@Krauser</strong> w poscie <br /><a href="http://forum.atnel.pl/post71464.html?hilit=linker#p71464"  class="postlink">http://forum.atnel.pl/post71464.html?hilit=linker#p71464</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 16 mar 2014, o 13:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mac34]]></name></author>
<updated>2014-03-16T13:31:20+01:00</updated>
<published>2014-03-16T13:31:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74532#p74532</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74532#p74532"/>
<title type="html"><![CDATA[Re: zaokrąglanie pomiaru do 3 miejsc po przecinku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74532#p74532"><![CDATA[
Nie pomogło na lcd ,pojawił się <span style="color: #FF0000">wynik= 51,0</span><br /><br />Nadal nie wyświetla poprawnie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3077">mac34</a> — 16 mar 2014, o 13:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fredek]]></name></author>
<updated>2014-03-16T12:58:40+01:00</updated>
<published>2014-03-16T12:58:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74524#p74524</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74524#p74524"/>
<title type="html"><![CDATA[Re: zaokrąglanie pomiaru do 3 miejsc po przecinku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74524#p74524"><![CDATA[
Zamiast cz_po_przecinku = (wynik/100) % 100; daj cz_po_przecinku = wynik % 100;  <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=919">fredek</a> — 16 mar 2014, o 12:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mac34]]></name></author>
<updated>2014-03-16T12:22:55+01:00</updated>
<published>2014-03-16T12:22:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74508#p74508</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74508#p74508"/>
<title type="html"><![CDATA[Re: zaokrąglanie pomiaru do 3 miejsc po przecinku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74508#p74508"><![CDATA[
Próbuję zacząć od podstaw. Opanować samo dzielenie, problem w tym że C wycina mi resztę.<br /><br />Odpada zmienna float ,bo nie pasuje AVR GCC ,wyskakuje jakiś konflikt.<br /><br /><span style="color: #4080FF">Jak to rozgryść, bardzo brakuje mi w tej chwili Bascomowej zmiennej przeciekowej SINGLE</span><br /><br />Już niebawem będzie mi to bardzo potrzebne ,gdyż robię miernik indukcyjności ,a tam dojdzie jeszcze pierwiastek ,to dopiero będzie kosmos. <br /><br /><br />Poniżej prosty program dzielenia ,oczywiście nie działa poprawnie ,dlatego ,że urywa mi resztę z wyniku ,jak to obejść?<br /><br />[syntax=c]// ćwiczenie samego dzielenia wyniku pomiaru do 2 miejsc po przecinku<br />#include &lt;avr/io.h&gt;<br />#include &quot;lcd44780by_mario.h&quot;                    //dołączenie mojej biblioteki LCD<br />#include &lt;util/delay.h&gt;<br /><br /><br />uint32_t wynik;                                 //zmienna  przetrzymujaca wynik<br />uint8_t cz_dziesietna;                          //czesc dziesietna wyniku<br />uint16_t cz_po_przecinku;                       //czesc ulamkowa ,po przecinku  ,precyzja do 2 miejsc<br />uint32_t a;<br />uint32_t b;<br /><br /><br />int main(void){<br /><br />PORTD = 0b11111111;                         //podciągniecie nieuzywanego portu D<br />    PORTC = 0b1111111;                         //podciągniecie nieuzywanego portu C<br /><br />    a=205;<br />    b=4;<br /><br /><br />    lcd_init();                     //inicjalizacja wywietlacza LCD<br /><br /><br />    while(1){<br /><br />    wynik = a/b;                //51,25<br />        wynik = wynik*100;          //5125<br /><br />        cz_dziesietna = wynik/100;<br />    cz_po_przecinku = (wynik/100) % 100;   //na lcd jest 51,51 -&gt;zamiast 51,25<br /><br /><br /><br />    lcd_cls();<br />    lcd_locate(1,2);<br />    lcd_str(&quot;dzielenie&quot;);             //wywietlanie napisu<br />    lcd_locate(2,2);<br />    lcd_str(&quot;wynik= &quot;);<br />    lcd_int(cz_dziesietna);<br />    lcd_char(',');                      // przecinek .<br />    lcd_int(cz_po_przecinku);<br /><br /><br /><br />    _delay_ms(500);<br /><br /><br /><br /><br /><br /><br /><br />    }                                     //koniec pętli While<br /><br /><br /><br /><br /><br />}                                              //koniec petli main[/syntax]<br /><br /><br /><br />Próbowałem też coś z biblioteką math ,ale  też nic z tego ,ale za to ile pamięci flash zjadło <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> , ma ktoś jakiś pomysł?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3077">mac34</a> — 16 mar 2014, o 12:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-03-16T11:45:32+01:00</updated>
<published>2014-03-16T11:45:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74501#p74501</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74501#p74501"/>
<title type="html"><![CDATA[Re: zaokrąglanie pomiaru do 3 miejsc po przecinku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74501#p74501"><![CDATA[
Witam<br />może spróbujesz użyć czegoś takiego<br /><br />[syntax=c]if(!(cz_po_przecinku % 100)) cz_po_przecinku=cz_po_przecinku / 100[/syntax]<br /><br />Mam na myśli że po wydzieleniu części po przecinku<br />jeśli liczba dzieli się przez 100 bez reszty <br />to podzielić ją przez 100 aby obciąć zera na końcu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 16 mar 2014, o 11:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mac34]]></name></author>
<updated>2014-03-16T09:48:53+01:00</updated>
<published>2014-03-16T09:48:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74491#p74491</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74491#p74491"/>
<title type="html"><![CDATA[zaokrąglanie pomiaru do 3 miejsc po przecinku]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6380&amp;p=74491#p74491"><![CDATA[
Witam napisałem krótki programik ,który właściwie tylko wyświetla wynik pomiaru do 3 miejsc po przecinku.<br />Mam jednak problem z zaokrąglaniem końcówki i obcinaniem nieznaczących zer.<br /><br />Na razie jeszcze nic nie mierzy ,ćwiczę sobie nim wpisując różne wartości zmiennej &quot;wynik&quot;.<br /><br />Przy wartości <br />wynik=2510000;<br /><br />mam na lcd 25,100 V<br /><br />,a chciałbym mieć 25,1 V<br /><br />jak zrobić by pozostać przy precyzji do 3 miejsc po przecinku ,ale automatycznie ucinać <br />nieznaczące zera z zaokrągleniem w górę?<br /><br />kod programu ćwiczebnego:<br />[syntax=c]// ćwiczenie zaokrąglania wyniku pomiaru do 3 miejsc po przecinku<br />#include &lt;avr/io.h&gt;<br />#include &quot;lcd44780by_mario.h&quot;                    //dołączenie mojej biblioteki LCD<br />#include &lt;util/delay.h&gt;<br /><br />uint32_t wynik;                                 //zmienna przecinkowa (typu single w bascom) przetrzymujaca wynik<br />uint8_t cz_dziesietna;                          //czesc dziesietna wyniku<br />uint16_t cz_po_przecinku;                       //czesc ulamkowa ,po przecinku  ,precyzja do 3 miejsc w uin16_t<br /><br /><br />int main(void){<br /><br />PORTD = 0b11111111;                         //podciągniecie nieuzywanego portu D<br />    PORTC = 0b1111111;                         //podciągniecie nieuzywanego portu C<br /><br />    wynik=2510000;                             //poczatkowa wartosc wyniku<br /><br /><br />    lcd_init();                     //inicjalizacja wywietlacza LCD<br /><br /><br />    while(1){<br /><br />    cz_dziesietna = wynik/100000;<br />    cz_po_przecinku = (wynik/100) % 1000;<br /><br />    lcd_cls();<br />    lcd_locate(1,2);<br />    lcd_str(&quot;zaokraglanie&quot;);             //wywietlanie napisu<br />    lcd_locate(2,2);<br />    lcd_str(&quot;Ucc= &quot;);<br />    lcd_int(cz_dziesietna);<br />    lcd_char('.');<br />    lcd_int(cz_po_przecinku);<br />    lcd_str(&quot; V&quot;);<br /><br />    _delay_ms(500);<br /><br /><br /><br /><br /><br /><br /><br />   }                                     //koniec pętli While<br /><br /><br /><br /><br /><br />}                   //koniec main[/syntax]<br /><br /><br /><br />w bascomie miałem to tak rozwiązane (akurat wersja dla 2 miejsc po przecinku):<br /><br />[syntax=basic4gl]Do<br />Channel = 0                                                 'obsługa portu ADC0<br />W = Getadc(channel)<br />Vin = W<br />Vin = Vin * 2.56<br />Vin = Vin / 1024<br />Vin = Vin * 10                                              'dla wersji z dzielnikiem napięcia 1/10 na wejściu<br /><br />Channel = 1<br />W2 = Getadc(channel)                                        'obsługa portu ADC1<br />Vin2 = W2<br />Vin2 = Vin2 * 2.56<br />Vin2 = Vin2 / 1024<br />Vin2 = Vin2 * 10                                            'dla wersji z dzielnikiem napięcia 1/10 na wejściu<br /><br />Call Wyswietlanie_pomiaru                                   'wywołanie programu wyświetlania<br /><br />Loop<br />End                                                         'end program<br /><br /><br /><br />Sub Wyswietlanie_pomiaru                                    'podprogram wyświetlania<br /><br />Z = Str(vin)                                                'zaokrąglenie +VCC<br />Z = Fusing(vin , &quot;#.##&quot;)<br /><br />Y = Str(vin2)                                               'zaokrąglenie -VCC<br />Y = Fusing(vin2 , &quot;#.##&quot;)<br /><br />Cls                                                         'wyświetlanie pomiarów<br />Lcd &quot;+Vcc = &quot; ; Z ; &quot;V&quot;<br />Lowerline<br />Lcd &quot;-Vcc = &quot; ; Y ; &quot;V&quot;<br />Cursor Off<br />Waitms 200<br /><br />End Sub[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3077">mac34</a> — 16 mar 2014, o 09:48</p><hr />
]]></content>
</entry>
</feed>