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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-10-27T21:06:14+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13368&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-10-27T21:06:14+01:00</updated>
<published>2015-10-27T21:06:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13368&amp;p=143507#p143507</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13368&amp;p=143507#p143507"/>
<title type="html"><![CDATA[Re: Pomiar napięcia ADC - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13368&amp;p=143507#p143507"><![CDATA[
tak trzeba to sobie przerobić dla pomiaru kilku różnych kanałów ADC, można np uint16_t sr[SR]; przerzuć sobie do struktury opisującej dany kanał<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 paź 2015, o 21:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Vroobee]]></name></author>
<updated>2015-10-27T20:16:09+01:00</updated>
<published>2015-10-27T20:16:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13368&amp;p=143504#p143504</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13368&amp;p=143504#p143504"/>
<title type="html"><![CDATA[Re: Pomiar napięcia ADC - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13368&amp;p=143504#p143504"><![CDATA[
Podejrzewam, że błąd wynika z tego, że w funkcji get_vol w instrukcjach <br />[syntax=c]sr &#91; idx++ &amp; (SR-1) &#93; = adc &#91;adc_idx&#93;;<br />for ( i=0 ; i&lt;SR; i++ ) sr1 += sr&#91;i&#93;;<br />sr1 /= SR;<br />voltage -&gt; adc_mid = sr1;[/syntax]<br />procek na zmianę będzie odczytywać wyniki z dwóch pinów ADC przez co w rezultacie otrzymam na dobrą sprawę chyba średnią z tych dwóch wartości napięcia, dlatego są dwa te same wyniki <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> ktoś się wypowie na ten temat czy dobrze to widzę ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5942">Vroobee</a> — 27 paź 2015, o 20:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Vroobee]]></name></author>
<updated>2015-10-27T18:46:43+01:00</updated>
<published>2015-10-27T18:46:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13368&amp;p=143497#p143497</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13368&amp;p=143497#p143497"/>
<title type="html"><![CDATA[Pomiar napięcia ADC - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13368&amp;p=143497#p143497"><![CDATA[
Witam,<br />mam pewien problem związany z pomiarem napięcia przez przetwornik ADC. Mam pod ATmegę32 podpięte 2 kanały ADC PA0 i PA1. Na jednym stałe napięcie odpowiednio niższe i wyższe. Program początkowo pisałem dla jednego kanału zgodnie z poradnikiem p. Mirka o przetwornikach ADC odcinek bodaj 4 a i b. Postanowiłem zrobić kanałowanie no i klops. Wartości ADC wyświetla raczej dobrze, natomiast mam problem z przetworzeniem wartości ADC na napięcie. W obu przypadkach terminal wyświetla tą samą wartość. Linijkę w której prawdopodobnie jest problem opisana jest komentarzem. Nie mam pojęcia jak przekazać wynik z tablicy z wartościami ADC do równania :/ czy ktoś jest w stanie ew. mi pomóc ? <br /><br />Mam nadzieję, że wszystko napisałem w miarę jasno.<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 21 paź 2015<br /> *      Author: Mateusz Wróbel<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;UART/uart.h&quot;<br />#include &quot;MK_TERMINAL/mk_term.h&quot;<br /><br />#define SR 8<br /><br />typedef struct<br />{<br />uint16_t adc_mid;<br />uint16_t ref_adc;<br />uint16_t ref_v;<br />char v1 &#91;3&#93;;<br />char v2 &#91;3&#93;;<br />} TVOL;<br /><br />TVOL accu1_vol;<br />TVOL accu2_vol;<br /><br />volatile uint8_t adc_idx = 0;<br />uint16_t adc &#91;2&#93;;<br /><br />uint16_t pomiar ( uint8_t kanal );<br />void get_vol (uint16_t adc &#91;&#93;, TVOL * voltage);<br /><br />int main (void)<br />{<br />DDRA &amp;=~ (1&lt;&lt;PA0);<br />DDRA &amp;=~ (1&lt;&lt;PA1);<br /><br />//ADC init<br />ADCSRA |= (1&lt;&lt;ADEN); //ADC enable<br />ADCSRA |= (1&lt;&lt;ADPS0);//prescaler 16<br />ADCSRA |= (1&lt;&lt;ADPS1);<br />ADCSRA |= (1&lt;&lt;ADPS2);<br />ADMUX |= (1&lt;&lt;REFS0); //wewnętrzne odniesienie 2.56 V<br /><br />accu1_vol.ref_adc = 200;<br />accu1_vol.ref_v = 100;<br /><br />accu2_vol.ref_adc = 200;<br />accu2_vol.ref_v = 100;<br /><br />//UART init<br />uart_init ( __UBRR );<br /><br />tr_cls (0);<br /><br />while (1)<br />{<br />switch (adc_idx)  // zmiana kanałów ADC<br />{<br />case 0:<br />adc &#91;0&#93; = pomiar( PA0 );<br />adc_idx ++;<br />break;<br />case 1:<br />adc &#91;1&#93; = pomiar( PA1 );<br />adc_idx = 0;<br />break;<br />}<br /><br />get_vol ( &amp; adc &#91;0&#93;, &amp;accu1_vol );<br />get_vol ( &amp; adc &#91;1&#93;, &amp;accu2_vol );<br /><br />tr_locate (3,0);<br />tr_attr (1, MAGENTA, BLACK);<br />uart_puts( &quot;ADC1: &quot; );<br />tr_pen_color (RED);<br />uart_put_long( adc &#91;0&#93;, 10 );<br />uart_puts(&quot;       &quot;);<br /><br />tr_locate(4,0);<br />tr_attr(1,WHITE, BLACK);<br />uart_puts(&quot;NAPIECIE U1: &quot;);<br />uart_puts(accu1_vol.v1);<br />uart_puts(&quot;.&quot;);<br />uart_puts(accu1_vol.v2);<br />uart_puts(&quot;       &quot;);<br /><br />tr_locate (6,0);<br />tr_attr (1, MAGENTA, BLACK);<br />uart_puts( &quot;ADC2: &quot; );<br />tr_pen_color (RED);<br />uart_put_long( adc &#91;1&#93;, 10 );<br /><br />tr_locate(7,0);<br />tr_attr(1,WHITE, BLACK);<br />uart_puts(&quot;NAPIECIE U2: &quot;);<br />uart_puts(accu2_vol.v1);<br />uart_puts(&quot;.&quot;);<br />uart_puts(accu2_vol.v2);<br />uart_puts(&quot;       &quot;);<br /><br />_delay_ms( 50 );<br />}<br />}<br /><br />uint16_t pomiar ( uint8_t kanal)<br />{<br />ADMUX = ( ADMUX &amp; 0b11111000 ) | kanal;<br />ADCSRA |= (1&lt;&lt; ADSC);<br />while ( ADCSRA &amp; (1&lt;&lt;ADSC));<br />return ADCW;<br />}<br /><br />void get_vol (uint16_t adc &#91;&#93;, 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 &#91;adc_idx&#93;; // tutaj mam problem prawdopodobnie<br />for ( i=0 ; i&lt;SR; i++ ) sr1 += sr&#91;i&#93;;<br />sr1 /= SR;<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 );<br />itoa ( divmod.rem, voltage -&gt; v2, 10 );<br />if ( divmod.rem &lt; 10)<br />{<br />voltage -&gt; v2 &#91;0&#93; = '0';<br />voltage -&gt; v2 &#91;2&#93; = divmod.rem + '0';<br />}<br />voltage -&gt; v1 &#91;2&#93; = 0;<br />voltage -&gt; v2 &#91;2&#93; = 0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5942">Vroobee</a> — 27 paź 2015, o 18:46</p><hr />
]]></content>
</entry>
</feed>