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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-12-30T18:16:19+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9939&amp;mode</id>
<entry>
<author><name><![CDATA[Zombol]]></name></author>
<updated>2014-12-30T18:16:19+01:00</updated>
<published>2014-12-30T18:16:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9939&amp;p=111320#p111320</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9939&amp;p=111320#p111320"/>
<title type="html"><![CDATA[Re: Problem z pomiarem na 2 kanałach ADC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9939&amp;p=111320#p111320"><![CDATA[
No masakra ten mój błąd. A sprawdzałem czy nie zrobiłem literówki, bo bałem się przy tych zmiennych dla części dziesiętnej i ułamkowej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />No cóż, najadłem się wstydu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Na drugi raz będę dokładniej sprawdzał <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Wielkie dzięki za pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6251">Zombol</a> — 30 gru 2014, o 18:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kiellbasa]]></name></author>
<updated>2014-12-30T17:15:57+01:00</updated>
<published>2014-12-30T17:15:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9939&amp;p=111309#p111309</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9939&amp;p=111309#p111309"/>
<title type="html"><![CDATA[Re: Problem z pomiarem na 2 kanałach ADC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9939&amp;p=111309#p111309"><![CDATA[
Ja myślę, że błąd jest gdzieś indziej, a w sumie to w 3 miejscach na raz<br /><br /><div class="quotetitle">Zombol napisał(a):</div><div class="quotecontent"><br />                               <strong> <span style="color: #FF0000">napiecie</span></strong>=( pomiar (5) );<br />                                <br />                                wynik_u=<strong><span style="color: #FF0000">napiecie</span></strong> *25;<br />                                cz_d_u= wynik_u / 10000;<br />                                cz_u_u= wynik_u % 1000;<br /> <br />                              [...]<br />                               <br />                               <strong> <span style="color: #FF0000">prad</span></strong>=( pomiar (3) );<br /> <br />                                wynik_i=<strong><span style="color: #FF0000">napiecie </span></strong>*25;<br />                                cz_d_i= wynik_i / 10000;<br />                                cz_u_i= wynik_i % 1000;<br /> <br /> <br /></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7458">kiellbasa</a> — 30 gru 2014, o 17:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-12-30T16:59:46+01:00</updated>
<published>2014-12-30T16:59:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9939&amp;p=111307#p111307</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9939&amp;p=111307#p111307"/>
<title type="html"><![CDATA[Re: Problem z pomiarem na 2 kanałach ADC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9939&amp;p=111307#p111307"><![CDATA[
Z tego co zauważyłem to w pętli <strong>while</strong> funkcji <strong>show_adc</strong> ciągle<br />odblokowujesz ADC nie wiem czy to może być przyczyną<br />błędu ale spróbuj przenieść włączenia ADC do funkcji main<br />zaraz po ustawieniu rejestrów ADC.<br /><br />O ile się nie mylę to wystarczy ADC włączyć tylko raz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 30 gru 2014, o 16:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zombol]]></name></author>
<updated>2014-12-30T16:01:08+01:00</updated>
<published>2014-12-30T16:01:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9939&amp;p=111297#p111297</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9939&amp;p=111297#p111297"/>
<title type="html"><![CDATA[Problem z pomiarem na 2 kanałach ADC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9939&amp;p=111297#p111297"><![CDATA[
Witam<br />Próbuję napisać program do pomiaru prądu, napięcia i temperatury. I udawało mi się do momentu, w którym podłączyłem drugi kanał ADC. Program ma wyświetlać odczyty co sekundę (temp. co 3) i nie robi tego poprawnie. Obie wartości ADC są takie same i zależą tylko od potencjometru podłączonego do kanału 5. Pomiar jest dokonywany na tym kanale jako pierwszy. <br />Próbowałem dawać jakieś opóźnienia ale to nie pomogło. Wydaje mi się, że problem tkwi w tym, że uC ma za mało czasu na wykonanie pomiaru i przełączenie się na drugi kanał. <br />Procesor to ATmega8, taktowana wew. rezonatorem 8MHz.<br /><br />Z góry dziękuję za wszelką pomoc.<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 29-12-2014<br /> *      Author: Dawid<br /> */<br /><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;avr/delay.h&gt;<br />#include &quot;mkuart.h&quot;//dolaczenie pliku obslugi transmisji USART<br />#include &quot;term.h&quot;//dolaczenie pliku obslugi terminala<br />#include &lt;string.h&gt;//dolaczenie pliku obslugi dzialan na stringach<br />#include &quot;ds18x20.h&quot;//dolaczenie pliku obslugi czujnika temperatury<br /><br />void rysuj_menu();<br />void show_adc( void ) ;<br />void show_counter( void );<br /><br />uint16_t pomiar(uint8_t kanal);//deklaracja funkcji pomiaru na wybranym kanale ADC<br /><br />uint8_t licznik;<br /><br />//zmienne do pomiaru napiecia<br />uint16_t napiecie;<br />uint32_t wynik_u;<br />uint8_t cz_d_u;<br />uint8_t cz_u_u;<br /><br />//zmienne do pomiaru pradu<br />uint16_t prad;<br />uint32_t wynik_i;<br />uint8_t cz_d_i;<br />uint8_t cz_u_i;<br /><br /><br />//zmienne do pomiaru temp<br />uint8_t czujniki_cnt;//liczba czujników DS18B20 na magistrali<br />volatile uint8_t s1_flag;//flaga tykniecia timera co 1 sekundę<br />volatile uint8_t sekundy;//licznik sekund 0-59<br />uint8_t subzero, cel, cel_fract_bits;//zmienne przechowujące znak, częsć dziesiętną temp, częsć ułamkową temp<br /><br /><br />char c;<br /><br /><br />// Poczatek main =========================================================================<br />int main(void)<br />{<br />ADMUX |= ( (1&lt;&lt;REFS1) | (1&lt;&lt;REFS1) );//Wewnętrzne Vref i zew. kondensator do pinu Vref<br />ADCSRA |= ( (1&lt;&lt;ADPS2) | (1&lt;&lt;ADPS1) );//wybór preskalera ADC na 64<br /><br />//ustawienie timera0 dla pomiarow temp<br />TCCR0 |= ( (1&lt;&lt;CS02) | (1&lt;&lt;CS00));//preskaler timera 1024<br />TCNT0= 178;//wartosc poczatkowa licznika<br />TIMSK |= (1&lt;&lt;TOIE0);<br /><br />sei();//wlaczenie przerwan<br />USART_Init( __UBRR);//inicjalizacja USART<br /><br /><br />czujniki_cnt = search_sensors();//sprawdzenie ile czujników DS18B20 jest na magistrali<br /><br />DS18X20_start_meas (DS18X20_POWER_EXTERN, NULL);//wyslanie rozkazu wykonania pomiaru przez wszystkie czujniki na magistrali podlaczone w trybie normal<br />_delay_ms(750);//czekamy 750ms na wykonanie pomiaru i konwersję wyniku<br /><br /><br />//odczyt temperatury z czujnika o ile został wykryty i wyswietlamy ją<br />if(DS18X20_OK == DS18X20_read_meas ( gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits    )   ) ;<br />else<br />{<br />uart_puts(&quot;BLAD\r \n&quot;);<br />}<br /><br /><br /><br />rysuj_menu();//rysowanie menu<br /><br />while(1)<br />{<br />c=uart_getc();<br />if(c == '1') show_adc();<br />if(c == '2') show_counter();<br />if(c == '3')<br />{<br />tr_cls(0);<br />uart_puts(&quot;Wylacz urzadzenie lub nacisnij reset&quot;);<br />while(1);<br />}<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />}// koniec main<br />//=====================================================<br /><br /><br /><br /><br /><br /><br /><br /><br />//funkcja do rysowania menu<br />void rysuj_menu (void)<br />{<br />tr_cls(0);<br /><br />tr_attr(0, BLACK, YELLOW);<br />tr_locate(2,5); uart_puts(&quot;     M E N U     &quot;);<br /><br />tr_attr(0, CYAN, BLACK);<br />tr_locate(4,5); uart_puts(&quot;1. Pokaz wartosc z ADC&quot;);<br />tr_locate(5,5); uart_puts(&quot;2. Pokaz licznik&quot;);<br />tr_locate(6,5); uart_puts(&quot;3. Zakoncz program&quot;);<br /><br />tr_attr(0, WHITE, BLACK);<br />tr_locate(8,5); uart_puts(&quot;Wybierz opcje: &quot;);<br /><br />}<br /><br /><br />//funkcja do pokazania wartosci ADC<br />void show_adc( void )<br />{<br /><br />char c;<br /><br />tr_cls(1);<br /><br />while(1)<br />{<br /><br />ADCSRA|= (1&lt;&lt;ADEN);//włączenie przetwornika ADC<br /><br /><br />if(s1_flag) //sprawdzanie flagi tykniec timera programowego co 1 sekunde<br />{<br />if(0 == sekundy  )<br />{czujniki_cnt = search_sensors();<br /><br />//tr_attr( 0, YELLOW, BLACK );<br />tr_locate(6,7);<br />uart_puts(&quot;Temperatura:&quot;);<br />tr_locate(6,24);<br />//tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot; &quot;);<br />uart_putint( cel, 10 );<br />uart_puts(&quot;,&quot;);<br />uart_putint( cel_fract_bits, 10 );<br />uart_puts(&quot; &quot;);<br />//tr_attr( 0, YELLOW, BLACK );<br />uart_puts(&quot;*C    &quot;);<br /><br />napiecie=( pomiar (5) );<br /><br />wynik_u=napiecie *25;<br />cz_d_u= wynik_u / 10000;<br />cz_u_u= wynik_u % 1000;<br /><br /><br />//tr_attr( 0, YELLOW, BLACK );<br />tr_locate(4,7);<br />uart_puts(&quot;Napiecie:&quot;);<br />tr_locate(4,24);<br />//tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot; &quot;);<br />uart_putint( cz_d_u, 10 );<br />uart_puts(&quot;,&quot;);<br />uart_putint( cz_u_u, 10 );<br />uart_puts(&quot; &quot;);<br />//tr_attr( 0, YELLOW, BLACK );<br />uart_puts(&quot;V    &quot;);<br /><br /><br />prad=( pomiar (3) );<br /><br />wynik_i=napiecie *25;<br />cz_d_i= wynik_i / 10000;<br />cz_u_i= wynik_i % 1000;<br /><br /><br />//tr_attr( 0, YELLOW, BLACK );<br />tr_locate(5,7);<br />uart_puts(&quot;Prad:&quot;);<br />tr_locate(5,24);<br />//tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot; &quot;);<br />uart_putint( cz_d_i, 10 );<br />uart_puts(&quot;,&quot;);<br />uart_putint( cz_u_i, 10 );<br />uart_puts(&quot; &quot;);<br />//tr_attr( 0, YELLOW, BLACK );<br />uart_puts(&quot;A    &quot;);<br />}<br /><br />if(1 == sekundy )<br />{<br />DS18X20_start_meas ( DS18X20_POWER_EXTERN, NULL);<br /><br />//tr_attr( 0, YELLOW, BLACK );<br />tr_locate(6,7);<br />uart_puts(&quot;Temperatura:&quot;);<br />tr_locate(6,24);<br />//tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot; &quot;);<br />uart_putint( cel, 10 );<br />uart_puts(&quot;,&quot;);<br />uart_putint( cel_fract_bits, 10 );<br />uart_puts(&quot; &quot;);<br />//tr_attr( 0, YELLOW, BLACK );<br />uart_puts(&quot;*C    &quot;);<br /><br />napiecie=( pomiar (5) );<br /><br />wynik_u=napiecie *25;<br />cz_d_u= wynik_u / 10000;<br />cz_u_u= wynik_u % 1000;<br /><br />//tr_attr( 0, YELLOW, BLACK );<br />tr_locate(4,7);<br />uart_puts(&quot;Napiecie:&quot;);<br />tr_locate(4,24);<br />//tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot; &quot;);<br />uart_putint( cz_d_u, 10 );<br />uart_puts(&quot;,&quot;);<br />uart_putint( cz_u_u, 10 );<br />uart_puts(&quot; &quot;);<br />//tr_attr( 0, YELLOW, BLACK );<br />uart_puts(&quot;V    &quot;);<br /><br /><br />prad=( pomiar (3) );<br /><br />wynik_i=napiecie *25;<br />cz_d_i= wynik_i / 10000;<br />cz_u_i= wynik_i % 1000;<br /><br /><br />//tr_attr( 0, YELLOW, BLACK );<br />tr_locate(5,7);<br />uart_puts(&quot;Prad:&quot;);<br />tr_locate(5,24);<br />//tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot; &quot;);<br />uart_putint( cz_d_i, 10 );<br />uart_puts(&quot;,&quot;);<br />uart_putint( cz_u_i, 10 );<br />uart_puts(&quot; &quot;);<br />//tr_attr( 0, YELLOW, BLACK );<br />uart_puts(&quot;A    &quot;);<br /><br />}<br /><br />if(2 == sekundy )<br />{<br /> if(DS18X20_OK == DS18X20_read_meas (gSensorIDs&#91;0&#93;, &amp;subzero, &amp;cel, &amp;cel_fract_bits ) )<br />   {<br /><br />//tr_attr( 0, YELLOW, BLACK );<br />tr_locate(6,7);<br />uart_puts(&quot;Temperatura:&quot;);<br />tr_locate(6,24);<br />//tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot; &quot;);<br />uart_putint( cel, 10 );<br />uart_puts(&quot;,&quot;);<br />uart_putint( cel_fract_bits, 10 );<br />uart_puts(&quot; &quot;);<br />//tr_attr( 0, YELLOW, BLACK );<br />uart_puts(&quot;*C    &quot;);<br /><br /><br />napiecie=( pomiar (5) );<br /><br />wynik_u=napiecie *25;<br />cz_d_u= wynik_u / 10000;<br />cz_u_u= wynik_u % 1000;<br /><br />//tr_attr( 0, YELLOW, BLACK );<br />tr_locate(4,7);<br />uart_puts(&quot;Napiecie:&quot;);<br />tr_locate(4,24);<br />//tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot; &quot;);<br />uart_putint( cz_d_u, 10 );<br />uart_puts(&quot;,&quot;);<br />uart_putint( cz_u_u, 10 );<br />uart_puts(&quot; &quot;);<br />//tr_attr( 0, YELLOW, BLACK );<br />uart_puts(&quot;V   &quot;);<br /><br /><br />prad=( pomiar (3) );<br /><br />wynik_i=napiecie *25;<br />cz_d_i= wynik_i / 10000;<br />cz_u_i= wynik_i % 1000;<br /><br /><br />//tr_attr( 0, YELLOW, BLACK );<br />tr_locate(5,7);<br />uart_puts(&quot;Prad:&quot;);<br />tr_locate(5,24);<br />//tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot; &quot;);<br />uart_putint( cz_d_i, 10 );<br />uart_puts(&quot;,&quot;);<br />uart_putint( cz_u_i, 10 );<br />uart_puts(&quot; &quot;);<br />//tr_attr( 0, YELLOW, BLACK );<br />uart_puts(&quot;A    &quot;);<br />   }<br /><br />else<br /> {<br />//tr_attr( 0, YELLOW, BLACK );<br />tr_locate(5,24);<br />//tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot;BLAD \r \n&quot;);<br /><br /> }<br /><br />}<br /><br /><br />if(3 == sekundy )<br />{<br />//tr_attr( 0, YELLOW, BLACK );<br />tr_locate(6,7);<br />uart_puts(&quot;Temperatura:&quot;);<br />tr_locate(6,24);<br />//tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot; &quot;);<br />uart_putint( cel, 10 );<br />uart_puts(&quot;,&quot;);<br />uart_putint( cel_fract_bits, 10 );<br />uart_puts(&quot; &quot;);<br />//tr_attr( 0, YELLOW, BLACK );<br />uart_puts(&quot;*C    &quot;);<br /><br /><br />napiecie=( pomiar (5) );<br /><br />wynik_u=napiecie *25;<br />cz_d_u= wynik_u / 10000;<br />cz_u_u= wynik_u % 1000;<br /><br />//tr_attr( 0, YELLOW, BLACK );<br />tr_locate(4,7);<br />uart_puts(&quot;Napiecie:&quot;);<br />tr_locate(4,24);<br />//tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot; &quot;);<br />uart_putint( cz_d_u, 10 );<br />uart_puts(&quot;,&quot;);<br />uart_putint( cz_u_u, 10 );<br />uart_puts(&quot; &quot;);<br />//tr_attr( 0, YELLOW, BLACK );<br />uart_puts(&quot;V    &quot;);<br /><br /><br />prad=( pomiar (3) );<br /><br />wynik_i=napiecie *25;<br />cz_d_i= wynik_i / 10000;<br />cz_u_i= wynik_i % 1000;<br /><br /><br />//tr_attr( 0, YELLOW, BLACK );<br />tr_locate(5,7);<br />uart_puts(&quot;Prad:&quot;);<br />tr_locate(5,24);<br />//tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot; &quot;);<br />uart_putint( cz_d_i, 10 );<br />uart_puts(&quot;,&quot;);<br />uart_putint( cz_u_i, 10 );<br />uart_puts(&quot; &quot;);<br />//tr_attr( 0, YELLOW, BLACK );<br />uart_puts(&quot;A    &quot;);<br />}<br /><br />s1_flag=0;<br /><br /><br /><br />}//koniec if<br /><br />//powrot do glownego menu<br />c = uart_getc();<br />if( c=='q')<br />{<br />rysuj_menu();<br />break;<br />}<br /><br />}//koniec while<br />}//koniec funkcji<br /><br />//funkcja do pokazania licznika<br />void show_counter( void )<br />{<br /><br />char c;<br /><br />tr_cls(1);<br /><br />tr_attr( 0, WHITE, BLACK );<br />tr_locate(2,5);<br />uart_puts(&quot; Licznik - ATmega8&quot;);<br />tr_locate(3,5); fill_line('-',21);<br />tr_locate(5,5); fill_line('-',21);<br /><br />while(1) {<br /><br />tr_attr( 0, YELLOW, BLACK );<br />tr_locate(4,7);<br />uart_puts(&quot;Wartość:&quot;);<br />tr_locate(4,17);<br />tr_attr( BOLD, RED, BLUE );<br />uart_puts(&quot; &quot;);<br />uart_putint( licznik++, 10 );<br />uart_puts(&quot; &quot;);<br />tr_attr( 0, YELLOW, BLACK );<br />uart_puts(&quot;    &quot;);<br />_delay_ms(300);<br /><br />c = uart_getc();<br />if( c=='q') {<br />rysuj_menu();<br />break;<br />}<br /><br />}<br />}<br /><br /><br />//definicja funkcji, która dokonuje pomiaru na wybranym kanale ADC<br />uint16_t pomiar (uint8_t kanal)<br />{<br />ADMUX = (ADMUX &amp; 0xF8) | kanal;//ustawienie wybranego kanalu ADC w rejestrze MUX<br />ADCSRA |= (1&lt;&lt;ADSC);//start pomiaru, poprzez wpisanie1 do tego bitu<br /><br />while (ADCSRA &amp; (1&lt;&lt;ADSC) );//po zakończeniu pomiaru, gdy bit ADSC=0 zwrócenie wyniku w postaci<br />//16-bitowej wartoci z rejestrów ADCH i ADCL<br />return ADCW;//ADCW to para rejestrów ADCH i ADCL<br /><br />}<br /><br />//licznik sekund dla pomiaru temp<br />ISR(TIMER0_OVF_vect)<br />{<br />static uint8_t cnt=0;//statyczna zmienna cnt do odliczania setnych ms<br />if( ++cnt &gt; 99)//gdy licznik &gt;99 minęła 1 sekunda<br />{<br />s1_flag=1;//ustaw flage tykniecia sekundy<br />sekundy++;//zwieksz licznik sekund<br /><br />if(sekundy&gt; 3 ) sekundy= 0; //jesli minelo wiecej niz 59 sekund, wyzeruj sekundy<br />cnt= 0;//wyzeruj licznik setnych ms<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6251">Zombol</a> — 30 gru 2014, o 16:01</p><hr />
]]></content>
</entry>
</feed>