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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-08-11T15:24:30+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8090&amp;mode</id>
<entry>
<author><name><![CDATA[WoodPaker]]></name></author>
<updated>2014-08-11T15:24:30+01:00</updated>
<published>2014-08-11T15:24:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8090&amp;p=91089#p91089</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8090&amp;p=91089#p91089"/>
<title type="html"><![CDATA[Re: Problem z funkcją dtostrf]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8090&amp;p=91089#p91089"><![CDATA[
No bo właśnie zrobiłeś to o czym napisałem wyżej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1425">WoodPaker</a> — 11 sie 2014, o 15:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michalcr]]></name></author>
<updated>2014-08-11T13:52:07+01:00</updated>
<published>2014-08-11T13:52:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8090&amp;p=91071#p91071</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8090&amp;p=91071#p91071"/>
<title type="html"><![CDATA[Re: Problem z funkcją dtostrf]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8090&amp;p=91071#p91071"><![CDATA[
Sprawa rozwiązana, wina najprawdopodobniej leży po stronie kompilatora, gdyż musiałem trochę bez sensu 2 razy rzutować, najpierw float'a do int'a ale zapisać pod zmienną float'ową i następnie jeszcze raz ten wynik rzutować na int'a ale tym razem na zmienną typu int. Dziwne to, ale tylko w takiej konfiguracji się kompiluje.<br /><br />Fragment kodu po modyfikacji:<br />[syntax=c]//wyświetlenie tekstu na LCD<br />lcd_str(&quot;Pomiar odleglosci&quot;);<br />_delay_ms(1000);<br />const float wsp = 2.56/1024; //zdefiniowanie wspólczynnika potrzbenego do przeliczenia wartosci napięcia podawanego na przetwornik ADC<br />float napiecie, odleglosc;<br />uint8_t cz_d, cz_u, odlegl_int;<br /><br />while(1)<br />{<br />ADCSRA |= (1&lt;&lt;ADSC); //ADSC: uruchomienie pojedynczej konwersji<br /><br /> while(ADCSRA &amp; (1&lt;&lt;ADSC)); //czeka na zakończenie konwersji<br /> napiecie = ADC*wsp; //obliczenie napiecia wchodzacego do przetwornika ADC<br /> //przeliczenie napiecia na odleglosc (aproksymacja wielomianem)<br /> odleglosc = (int)((-1.5518*pow(napiecie,8) + 20.2358*pow(napiecie,7) - 106.2299*pow(napiecie,6) + 278.6403*pow(napiecie,5) -<br /> 341.0642*pow(napiecie,4) + 20.8954*pow(napiecie,3)+ 450.5585*pow(napiecie,2) - 517.0278*napiecie + 223.0749)*10);<br /> odlegl_int = (int)(odleglosc);<br /> cz_d = odlegl_int / 10;<br /> cz_u = odlegl_int % 10;<br /> lcd_cls(); //wyczyszczenie wyswietlacza<br /> lcd_int(cz_d);<br /> lcd_char('.');<br /> lcd_int(cz_u);<br /> lcd_str(&quot;cm&quot;);<br /> _delay_ms(500);<br /><br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5418">michalcr</a> — 11 sie 2014, o 13:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[WoodPaker]]></name></author>
<updated>2014-08-11T01:23:21+01:00</updated>
<published>2014-08-11T01:23:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8090&amp;p=91013#p91013</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8090&amp;p=91013#p91013"/>
<title type="html"><![CDATA[Re: Problem z funkcją dtostrf]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8090&amp;p=91013#p91013"><![CDATA[
A może by użyć <em>itoa()</em> tylko wcześniej przekonwertować to co przed i to co po przecinku na liczbę całkowitą za pomocą sumy modulo 2?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1425">WoodPaker</a> — 11 sie 2014, o 01:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michalcr]]></name></author>
<updated>2014-08-11T01:16:28+01:00</updated>
<published>2014-08-11T01:16:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8090&amp;p=91012#p91012</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8090&amp;p=91012#p91012"/>
<title type="html"><![CDATA[Problem z funkcją dtostrf]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8090&amp;p=91012#p91012"><![CDATA[
Witam. <br />Za pomocą przetwornika ADC odczytuje napięcie z dalmierza i następnie przeliczam je na odległość (Charakterystyka dalmierza jest nieliniowa więc aproksymowałem ją wielomianem 8-go stopnia). Zmienne napiecie i odleglosc są typu float, więc aby je wyświetlić na LCD używam funkcji dtostrf. I tu pojawia się problem. O ile zmienna napiecie bez problemu &quot;przekonwertuje się&quot; za pomocą dtostrf i wyświetla na LCD to już zmienna odleglosc wywala blad. Również rzutowanie float'a na int'a nie daje skutku. Może wiecie co jest tego przyczyną lub jakiś inny sposób na wyświetlenie ostatecznego wyniku na LCD? Pozdrawiam<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;math.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br /><br />int main(void)<br />{<br /><br />ADCSRA = (1&lt;&lt;ADEN) //ADEN=1 włączenie przetwornika ADC)<br />         |(1&lt;&lt;ADPS0) // ustawienie preskalera na 128<br />         |(1&lt;&lt;ADPS1)<br />         |(1&lt;&lt;ADPS2);<br /><br />ADMUX  =    (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0) // REFS1:0: wybór napięcia odniesienia ADC<br />                           //na wewnętrzne źródło 2,56V<br />                           //z zewnętrznym kondensatorem na pinie AREF<br /><br />          | (1&lt;&lt;MUX0);// wybór kanału ADC1 na pinie PC1<br /><br />DDRC &amp;=~ (1&lt;&lt;PC1);<br /><br />lcd_init(); //inicjacja wyswietlacza<br /><br />// wyświetlenie tekstu na LCD<br />lcd_str(&quot;Pomiar odleglosci&quot;);<br />_delay_ms(1000);<br />const float wsp = 2.56/1024; //zdefiniowanie wspólczynnika potrzbenego do przeliczenia wartosci napięcia podawanego na przetwornik ADC<br />float napiecie, odleglosc;<br />char wynik &#91;8&#93;;<br /><br />while(1)<br />{<br />ADCSRA |= (1&lt;&lt;ADSC); //ADSC: uruchomienie pojedynczej konwersji<br /><br /> while(ADCSRA &amp; (1&lt;&lt;ADSC)); //czeka na zakończenie konwersji<br /> lcd_cls(); //wyczyszczenie wyswietlacza<br /> napiecie = ADC*wsp; //obliczenie napiecia wchodzacego do przetwornika ADC<br /> //przeliczenie napiecia na odleglosc (aproksymacja wielomianem)<br /> odleglosc = (-1.5518*pow(napiecie,8) + 20.2358*pow(napiecie,7) - 106.2299*pow(napiecie,6) + 278.6403*pow(napiecie,5) -<br /> 341.0642*pow(napiecie,4) + 20.8954*pow(napiecie,3)+ 450.5585*pow(napiecie,2) - 517.0278*napiecie + 223.0749);<br /> dtostrf(odleglosc,2,2,wynik); //zamiana zmiennej float na string<br /> lcd_str(wynik);//wyswietlenie wyniku na wyswietlaczu<br /><br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5418">michalcr</a> — 11 sie 2014, o 01:16</p><hr />
]]></content>
</entry>
</feed>