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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-09-26T10:25:42+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=50&amp;t=13020&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-09-26T10:25:42+01:00</updated>
<published>2015-09-26T10:25:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13020&amp;p=140743#p140743</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13020&amp;p=140743#p140743"/>
<title type="html"><![CDATA[Re: Problem z porównaniem zmiennych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13020&amp;p=140743#p140743"><![CDATA[
<div class="quotetitle">skiero napisał(a):</div><div class="quotecontent"><br />wartość sprzed przecinka i po przecinku &quot;cel&quot;,&quot;cel_fract_bits&quot;. Typy obu tych zmiennych to &quot;uint32_t&quot;.<br /></div><br />a od kiedy te typy to uint32_t ???<br /><br /><div class="quotetitle">skiero napisał(a):</div><div class="quotecontent"><br />if ( accu1_vol.v1 &gt; cel ) 1&lt;&lt;PB0;<br /></div><br />ale co ty chcesz porównywać ? wartość napięcia przed przecinkiem z wartością temperatury przed przecinkiem ? ..... Już pomijając nawet że chcesz robić takie porównanie - to co dalej oznacza w tym warunku ten zapis 1&lt;&lt;PB0 ???<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 6 minutach ]</span></strong><br /><br /><div class="quotetitle">skiero napisał(a):</div><div class="quotecontent"><br />Chciałbym zaznaczyć, że interesują mnie odpowiedzi typu: &quot;Poszukaj w książce takiej i takiej...&quot;.<br /></div><br />A ja chciałbym zaznaczyć - że mnie nie interesują takie (przepraszam bezsensowne dopiski na forum) i ZDECYDOWANIE polecam ci jednak sięgnąć do książki:<br /><!-- m --><a class="postlink" href="http://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >http://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br />bo to TYLKO może ci się przydać - skoro ty łączysz gdzieś znalezione w sieci kawałki kodów tzn próbujesz łączyć a KOMPLETNIE nie znasz podstaw języka C .... to jak myślisz że można ci wyjaśnić pewne rzeczy ? <br /><br />Toż ten twój warunek if() który wyżej pokazałem wydaje się być kompletnie ale to kompletnie bez sensu - przy czym nie mówię tu, że twój jakiś tam pomysł jest bez sensu na urządzenie - bo pomysł zwykle jest dobry - tylko jak się nie zna języka to się nie umie zapisać tego pomysłu w tym języku.<br /><br /><div class="quotetitle">skiero napisał(a):</div><div class="quotecontent"><br />Wiem, że porównywanie tych wartości nie jest możliwe, ale nie wiem w jaki sposób możne to rozwiązać.<br /></div><br />No widzisz w odcinku poradnika video dla uproszczenia wrzucam wartości napięcia w tablice typu char aby łatwo można to było sobie wyświetlać. Rozumiesz ? Wyświetlać ..... Więc to już nie są liczby a stringi ... A wygląda na to, że ty nawet nie wiesz co to są Stringi w C jak mi się wydaje ? Tablice znaków ....<br /><br />Jak więc chcesz porównywać jakąś tablicę znaków (tzw C-String) z jakąś liczbą ?<br /><br />Jak to zrobić ? prosto w kodzie z poradnika wprowadzić sobie wartości napięcia w postaci liczbowej - żeby można było później porównywać<br /><br />I mówię - poczytać najpierw książkę<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 26 wrz 2015, o 10:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[skiero]]></name></author>
<updated>2015-09-25T16:28:56+01:00</updated>
<published>2015-09-25T16:28:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13020&amp;p=140684#p140684</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13020&amp;p=140684#p140684"/>
<title type="html"><![CDATA[Re: Problem z porównaniem zmiennych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13020&amp;p=140684#p140684"><![CDATA[
Przepraszam, rzeczywiście mój post był mało precyzyjny, już zmierzam do meritum.<br />Dostosowałem kod z odcinka &quot;Przetwornik ADC w mikrokontrolerach AVR - CZĘŚĆ 04b&quot; w następujący sposób. Chciałem, aby na pomocą potencjometru można było nastawić temperaturę z zakresu 0 -120 st. C, więc zmieniłem zakres wyświetlania wartości z 0 - 12V ( jak w filmie) na rzeczone 1 - 120 st. C. Jeśli chodzi o typ zmiennej nic nie zmieniałem, dalej pozostało to &quot;char&quot;, a wyświetlanie jaj na monitorze portu szeregowego za pomocą zmiennej (przed przecinkiem i po przecinku)  &quot;accu1_vol.v1&quot;,&quot;accu1_vol.v2&quot;.<br />Drugą częścią, polegała na dołożeniu do w.w. kodu programu wyświetlania wartości temperatury z termometru DS18B20 (czyli biblioteka i zagadnienie z &quot;1Wire&quot;). Wyświetlana z niego temperatura jest przedstawiona w następujący sposób: wartość sprzed przecinka i po przecinku &quot;cel&quot;,&quot;cel_fract_bits&quot;. Typy obu tych zmiennych to &quot;uint32_t&quot;.<br />Porównałem za sobą te dwie wartości w następujący sposób: <br /><br />if ( accu1_vol.v1 &gt; cel ) 1&lt;&lt;PB0;<br /><br />wyskakuje błąd: &quot;incompatible types when assigning to type 'char[4]' from type 'uint32_t'&quot;<br />Wiem, że porównywanie tych wartości nie jest możliwe, ale nie wiem w jaki sposób możne to rozwiązać.<br />Chciałbym zaznaczyć, że interesują mnie odpowiedzi typu: &quot;Poszukaj w książce takiej i takiej...&quot;. Temat bardzo mnie interesuje, więc chętnie się w niego zagłębie. Po prostu nie znam literatury.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10505">skiero</a> — 25 wrz 2015, o 16:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-09-23T18:49:14+01:00</updated>
<published>2015-09-23T18:49:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13020&amp;p=140501#p140501</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13020&amp;p=140501#p140501"/>
<title type="html"><![CDATA[Re: Problem z porównaniem zmiennych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13020&amp;p=140501#p140501"><![CDATA[
<div class="quotetitle">skiero napisał(a):</div><div class="quotecontent"><br />próbowałem zastosować pewien cwaniacki myk,<br /></div><br />Panie, panie - na litość boską - to pokaże że ten myk a nie wrzucasz HEKTOLITR kodu i urządzasz zawody, na spostrzegawczość kto znajdzie? ... Zastanów się czy przy tak zadanym pytaniu komuś się będzie chciało w ogóle szukać .... Naprawdę czy tak ciężko zadać poprawnie pytanie ? jeśli się oczekuje dobrej szybkiej i celnej odpowiedzi na forum ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 23 wrz 2015, o 18:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[skiero]]></name></author>
<updated>2015-09-23T17:04:07+01:00</updated>
<published>2015-09-23T17:04:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13020&amp;p=140485#p140485</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13020&amp;p=140485#p140485"/>
<title type="html"><![CDATA[Problem z porównaniem zmiennych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13020&amp;p=140485#p140485"><![CDATA[
Witam szanownych forumowiczów!<br /><br />Mam pewien poważny problem, z którym nie mogę sobie poradzić. Chciałem wykorzystać serią filmów &quot;Przetwornik ADC&quot; to wykonania termostatu. Miał on pobierać zmienną wartość z potencjometru i porównywać ją z temperaturą z termometru DS18B20. Jednak są to zupełnie inne zmienne i nie da się ich niestety porównać (w filmach wartość w której przechowywane są dane o z przetwornika ADC to char[], a dane z termometru to uint32_t). próbowałem zastosować pewien cwaniacki myk, ale niestety nie wyszedł.<br />Będę wdzięczny za każdą pomoc.<br /><br />[syntax=cpp]&#91;code&#93;<br />/*<br /> * bimb.c<br /> *<br /> *  Created on: 31 sie 2015<br /> *      Author: Maciej S.<br /> */<br /><br />/*<br /> * main.c<br /> *<br /> *  Created on: 14 sie 2015<br /> *      Author: Maciej S.<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;MYUART/myuart.h&quot;<br />#include &quot;MK_TERMINAL/mk_term.h&quot;<br />#include &quot;1Wire/ds18x20.h&quot;<br /><br />#define SR 8// rozmar bufora do celów uśredniania; im wyższa wartośc SR czyli średnia, tym dłuższy czas obliczania i mniejsze fluktuacje :)<br /><br /><br /><br />typedef struct {<br />uint16_t adc_mid;<br />uint16_t ref_adc;<br />uint16_t ref_v;<br />char v1&#91;4&#93;;// dwie zmienne trzybajtowe, typu &quot;character&quot; czyli znakowego<br />char v2&#91;4&#93;;<br />} TVOL;<br /><br />TVOL accu1_vol;<br /><br />uint16_t pomiar( uint8_t kanal);<br />uint8_t subzero, cel, cel_fract_bits, cel_frac_bits, czujniki_cnt;<br />void get_vol( uint16_t adc, TVOL * voltage );// TVOL - wskaźnik<br />void display_temp(uint8_t number);<br />void sensors_init();<br />void porownanie1();<br /><br />uint16_t min=1024, max, diff;<br />#define MAX(a,b) ( (a&gt;b)?a:b )<br />#define MIN(a,b) ( (a&lt;b)?a:b )<br /><br /><br />#define REF_256 (1&lt;&lt;REFS1)|(1&lt;&lt;REFS0)<br />#define REF_VCC (1&lt;&lt;REFS0)<br /><br /><br />#define LED (1&lt;&lt;PB0)// Powołanie i ustawienie diody sprawdzającej, czy program działa<br />#define LED_ON PORTB |= LED// &quot;or&quot; równa się<br />#define LED_OFF PORTB &amp;= ~LED// &quot;and&quot;<br />#define LED_TOG PORTB ^= LED// &quot;xor&quot;<br /><br />#define WYJSCIE (1&lt;&lt;PC5)<br />#define GRZANIE PORTC |= WYJSCIE<br />#define BRAK_GRZANIA PORTC &amp;= WYJSCIE<br /><br /><br />int main( void ) {<br /><br />DDRB |= LED;<br /><br />// inicjalizacja ADC, przed UART'EM<br />ADCSRA |= (1&lt;&lt;ADEN);// Włącz ADC<br />ADCSRA |= (1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0);// Preskaler = 16 |(ADPS1)|(ADPS0)<br />ADMUX |= REF_256;// Wewnętrzne źródło zasilania 2,56 &#91;V&#93;, dla REF_VCC i tego samego dzielnika napięcia co dla REF_256 maxymalną wartości nie będzie 1023, ani nawet blisko, ponieważ z dzielnika napięcia nie da się takich wartości osiągnąc<br /><br />accu1_vol.ref_adc = 480;// wartośc z ADC dla której mamy 6&#91;V&#93;<br />accu1_vol.ref_v = 5500;// wartośc do podzielenia tak aby zakres wynosił ok 120 st.C<br /><br />uart_init( __UBRR );<br /><br />tr_cls(0);<br />tr_locate(0,3);<br />tr_attr(1,YELLOW,BLACK);<br />uart_puts( &quot;TEST&quot;);<br />_delay_ms( 1000 );<br />tr_cls(1);<br /><br />tr_locate(0,3);<br />tr_attr(1,YELLOW,BLACK);<br />uart_puts( &quot;ATmega32&quot;);<br /><br />uint16_t wynik=0;<br />uint16_t wynik1;<br /><br /><br />//sei();<br />while(1) {<br /><br />porownanie1();<br /><br />wynik = pomiar( PA0 );// w zależności od mikrokontrolera, będzie inny kanał !!!<br /><br />get_vol( wynik, &amp;accu1_vol );<br /><br />tr_locate(2,3);<br />uart_putlong(wynik1, 10);<br />uart_puts(&quot;   &quot;);<br />uart_putlong(cel, 10);<br /><br /><br />max = MAX(max, wynik);<br />min = MIN(min, wynik);<br />diff = max-min;<br /><br /><br />tr_locate(3,3);<br />tr_attr(1,MAGENTA,BLACK);<br />uart_puts( &quot;Wartość ADC: &quot;);<br />tr_pen_color(RED);<br />uart_putlong( wynik, 10 );<br />uart_puts( &quot;/&quot;);<br />uart_putlong( accu1_vol.adc_mid, 10 );<br />uart_puts( &quot;     min: &quot;);<br />uart_putlong( min, 10 );<br />uart_puts( &quot;     max: &quot;);<br />uart_putlong( max, 10 );<br />uart_puts( &quot;     diff: &quot;);<br />uart_putlong( diff, 10 );<br />uart_puts( &quot;       &quot;);<br /><br />tr_locate(5,3);<br />tr_attr(1,WHITE,BLACK);<br />uart_puts( &quot;Nastawa: &quot;);<br />uart_puts( accu1_vol.v1 );// Do porównywania należy wykorzystac całą wartośc &quot;accu1_vol1.v1&quot; czyli wskaźnik razem z rzutowaniem.<br />uart_puts( &quot;.&quot;);<br />uart_puts( accu1_vol.v2 );<br />uart_puts( &quot; C       &quot;);<br /><br />tr_locate(7,3);<br />tr_attr(1,CYAN,BLACK);<br />sensors_init();<br /><br />tr_locate(8,3);<br />tr_attr(1,CYAN,BLACK);<br />display_temp(1);<br />tr_locate(9,3);<br />display_temp(2);<br /><br />//if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) {        //<br /><br />if( wynik1 &gt; cel ) {<br />GRZANIE;<br />tr_locate(11,3);<br />tr_attr(1,RED,WHITE);<br />uart_puts(&quot;GRZANIE&quot;);<br />}<br />else{<br />BRAK_GRZANIA;<br />tr_locate(11,3);<br />tr_attr(1,GREEN,BLUE);<br />uart_puts(&quot;BRAK GRZANIA&quot;);<br />}<br />}<br /><br />LED_TOG;<br />_delay_ms( 250 );<br /><br />}<br /><br /><br /><br />uint16_t pomiar( uint8_t kanal ) {// Zwraca wynik 16-to bitowy<br /><br />ADMUX = (ADMUX &amp; 0b11111000) | kanal;<br /><br />ADCSRA |= (1&lt;&lt;ADSC);<br /><br />while( ADCSRA &amp; (1&lt;&lt;ADSC) );// Tej linni mogłoby nie byc ponieważ w pętli główne programu, jest delay(250), więc nie trzeba czekac na koniec konwersji<br /><br />return ADCW;<br />}<br /><br /><br /><br />void get_vol( uint16_t adc, TVOL * voltage ) {<br /><br />static uint16_t sr&#91;SR&#93;;<br />static uint8_t idx;<br />uint32_t sr1=0;<br />uint8_t i;<br /><br />sr&#91; idx++ &amp; (SR-1) &#93; = adc;<br /><br />//sr&#91;idx&#93; = adc;<br />//idx++;<br />//if(idx&gt;7) idx=0;<br /><br />//if( idx &amp; (SR-1) ) return;<br /><br />for(i=0; i&lt;SR; i++) sr1+=sr&#91;i&#93;;<br />sr1 /= SR;<br /><br />voltage-&gt;adc_mid = sr1;<br /><br />uint16_t wynik = ( sr1 * (uint32_t)voltage-&gt;ref_v ) / voltage-&gt;ref_adc;<br /><br />div_t divmod = div(wynik, 100);<br />itoa( divmod.quot, voltage-&gt;v1, 10 );// skoro jest użyta &quot;itoa&quot;, to trzeba dodac bibliotekę &lt;stdlib.h&gt;<br />itoa( divmod.rem, voltage-&gt;v2, 10);// quot to częsc całkowita i reszta z dzielenia<br />if( divmod.rem &lt; 10 ) {// if polegający na eliminacji tego, że reszta z dzielenia 9 będzie wyświetlana 2,09 a nie 2,9<br />voltage-&gt;v2&#91;0&#93;='0';<br />voltage-&gt;v2&#91;1&#93;=divmod.rem+'0';// dodawanie od razu konwertuja nam to na znak ASCII<br /><br />}<br />voltage-&gt;v1&#91;3&#93;=0;// po to tablica ma 3 elementy, żeby trzeci ustawic zero, żeby nie było jakiś dziwnosci<br />voltage-&gt;v2&#91;3&#93;=0;<br />}<br /><br /><br />void display_temp(uint8_t number)<br />{<br />        if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;number - 1&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) {        //wyśwetlenie temperatury czujnika<br />        uart_puts( &quot;Temp(&quot;);                                                                                 //wyświetlenie &quot;Temp&quot;<br />        uart_putint(number,10);                                                                       //wyświetlenie nr. czujnika (1 lub 2)<br />        uart_puts(&quot;): &quot;);                                                                                        //wyświetlenie &quot;:&quot;<br />        if(subzero) uart_puts(&quot;-&quot;);                                                                   //jeśli subzero==1 wyświetl znak minus (temp. ujemna)<br />        else uart_puts(&quot; &quot;);                                                                            //jeśli subzero==0 wyświetl spację zamiast znaku minus (temp. dodatnia)<br />        uart_putint(cel,10);                                                                            //wyświetlenie temperatury<br />        uart_puts(&quot;.&quot;);                                                                                         //wyświetlenie przecinka &quot;.&quot;<br />        uart_putint(cel_fract_bits,10);                                                         //wyświetlenie temperatury po przecinku (części dziesiętnej)<br />        uart_puts( &quot; C&quot;);                                                                                     //przejście do początku i następnej linii<br />        uart_puts( &quot;\r\n&quot;);        }<br />        else {                                                                                                  //wyświetlenie błedu, gdy brak czujnika<br />                uart_puts(&quot; -- error T&quot;);                                                                       //wyświetlenie &quot;error T&quot;<br />                uart_putint(number, 10);                                                                //wyświetlenie  nr. czujnika (1 lub 2)<br />                uart_puts(&quot; --&quot;);                                                                               //wyświetlenie &quot; --&quot;<br />                uart_puts( &quot;\r\n&quot;);                                                                             //przejście do początku i następnej linii<br />        }<br />}<br /><br />void sensors_init() {<br />        czujniki_cnt = search_sensors();                                                // sprawdzamy ile czujników DS18xxx widocznych jest na magistrali<br /><br />        DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );               //wysyłamy rozkaz wykonania pomiaru temperatury<br />        uart_puts( &quot;Na linii znajduje się &quot;);<br />tr_pen_color(RED);<br />        uart_putlong(czujniki_cnt, 10);<br />tr_pen_color(CYAN);<br />        uart_puts( &quot; czujnik(ów)&quot;);<br />        _delay_ms(750);                                                                 //czekamy 750ms na dokonanie konwersji przez podłączone czujniki<br />}<br /><br />void porownanie1(){<br /><br />uint32_t wynik1;<br /><br />uint32_t wartosc_adc;<br /><br />wartosc_adc = (accu1_vol.v1);<br />accu1_vol.v1 = wynik1;<br /><br />if( DS18X20_OK == DS18X20_read_meas(gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits) ) {        //<br /><br />if( wynik1 &gt; cel ) {<br />GRZANIE;<br />tr_locate(11,3);<br />tr_attr(1,RED,WHITE);<br />uart_puts(&quot;GRZANIE&quot;);<br />}<br />else{<br />BRAK_GRZANIA;<br />tr_locate(11,3);<br />tr_attr(1,GREEN,BLUE);<br />uart_puts(&quot;BRAK GRZANIA&quot;);<br />}<br />}<br />}<br /><br />&#91;/code&#93;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10505">skiero</a> — 23 wrz 2015, o 17:04</p><hr />
]]></content>
</entry>
</feed>