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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-09-04T18:46:37+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=4062&amp;mode</id>
<entry>
<author><name><![CDATA[paladyn]]></name></author>
<updated>2013-09-04T18:46:37+01:00</updated>
<published>2013-09-04T18:46:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48181#p48181</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48181#p48181"/>
<title type="html"><![CDATA[Re: ADC pomiar 2 kanałów = te same wartości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48181#p48181"><![CDATA[
Również i ten problem rozwiązałem, wystarczyło dodać <div class="codetitle"><b>Code:</b></div><div class="codecontent">uart_puts( &quot;     &quot;);</div> po wysłaniu wartości rejestru ADCW. Jak się nie mylę w 3 części poradnika wspominałeś coś o tym, ale jakoś mi to umknęło. Za mało razy podkreślałeś, że to ważne.  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> Dopiero jak analizuje Twój kod i porównuje ze swoim, to natrafiam na babole, które popełniam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=468">paladyn</a> — 4 wrz 2013, o 18:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-09-04T07:09:28+01:00</updated>
<published>2013-09-04T07:09:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48101#p48101</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48101#p48101"/>
<title type="html"><![CDATA[Re: ADC pomiar 2 kanałów = te same wartości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48101#p48101"><![CDATA[
wartość 8874 na 1000000% nie pochodzi z ADCW, chociaż nie wiem co byś robił źle i jak byś robił źle <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> więc mam nadzieję, że to już dla ciebie jakiś trop .... <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> wszędzie dalej w kodzie po odczycie ADCW masz coś źle ... bo ADCW zawsze ale to zawsze zatrzyma się na 1023. Tu nie ma wyjątków.<br /><br />Prześledź więc dokładnie co dalej robisz z tą wartością.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 wrz 2013, o 07:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[paladyn]]></name></author>
<updated>2013-09-03T23:33:00+01:00</updated>
<published>2013-09-03T23:33:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48098#p48098</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48098#p48098"/>
<title type="html"><![CDATA[Re: ADC pomiar 2 kanałów = te same wartości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48098#p48098"><![CDATA[
Dzięki Ci za Twoje trudy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> problem rozwiązany. Nigdy nie sądziłem, że kupując niebieską książkę dostane aż taki support. <img src="https://forum.atnel.pl/images/smilies/icon_twisted.gif" alt=":twisted:" title="Szalony" /> <br /><br />Mam jeszcze takie pytanie: dlaczego wartość rejestru ADCW skaczę do niebiańskich wartości gdy nóżka od przetwornika wisi w powietrzu? Rozumiem, że dojdzie do 1023 ale zobacz co u mnie się wyprawia:<br /><br />Cinquecento ECU_ver1<br /><br />Obroty/min:  0<br />Wypełnienie wtryskiwacza:  0<br />Czujnik położenia przepustnicy:  4.91 V<br />Czujnik położenia przepustnicy(ADC):  1023<br />Sonda Lambda:  4.33 V<br />Sonda Lambda(ADC):  8874<br /><br />Gdy już taki babol mi wyskoczy i podłącze np baterie 1,5V do pinu sondy, to wartość napięcia się zgadza, ale wartość ADC to jakaś dziwna 4-cyfrowa liczba<br />Najprawdopodobniej znaki nakładają się na siebie, tylko jak sobie z tym brzydkim babolem poradzić ? <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=468">paladyn</a> — 3 wrz 2013, o 23:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-09-03T22:24:19+01:00</updated>
<published>2013-09-03T22:24:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48089#p48089</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48089#p48089"/>
<title type="html"><![CDATA[Re: ADC pomiar 2 kanałów = te same wartości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48089#p48089"><![CDATA[
no to w 5 części masz DOKŁADNIE rozwiązanie swojej zagadki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> gwarantuję ci to<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 wrz 2013, o 22:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[paladyn]]></name></author>
<updated>2013-09-03T22:08:14+01:00</updated>
<published>2013-09-03T22:08:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48084#p48084</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48084#p48084"/>
<title type="html"><![CDATA[Re: ADC pomiar 2 kanałów = te same wartości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48084#p48084"><![CDATA[
No właśnie 5 części jeszcze nie oglądałem, bo wczoraj koło północy skończyłem oglądać 4 <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Dziś nie miałem nawet kiedy włączyć część 5, ale da się nadrobić straty <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=468">paladyn</a> — 3 wrz 2013, o 22:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-09-03T22:03:12+01:00</updated>
<published>2013-09-03T22:03:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48081#p48081</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48081#p48081"/>
<title type="html"><![CDATA[Re: ADC pomiar 2 kanałów = te same wartości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48081#p48081"><![CDATA[
To co zrobiłeś pokazuje tylko, że nie do końca poradnik chyba obejrzałeś <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> bo bardzo wyraźnie w 5 części mówię co zrobić gdy chcemy mieć dwa albo więcej kanałów ... a ty pozostałeś przy wersji kodu z obsługą tylko jednego.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 wrz 2013, o 22:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[paladyn]]></name></author>
<updated>2013-09-03T21:06:54+01:00</updated>
<published>2013-09-03T21:06:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48070#p48070</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48070#p48070"/>
<title type="html"><![CDATA[ADC pomiar 2 kanałów = te same wartości]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4062&amp;p=48070#p48070"><![CDATA[
Witam. <br /><br />Jestem zmuszony prosić Was o pomoc, bo sam nie potrafię rozwiązać problemu. Otóż jestem w trakcie pisania wsadu do Atmegi8, której zadaniem jest sterowanie wtrysku w samochodzie Cinquecento 700  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Czyli przeróbka gaźnika na wtrysk + sonda lambda. Oglądając poradniki Mirka odnośnie ADC natrafiłem na ciekawy sposób zamiany wartości ADC na napięcie i postanowiłem wypróbować w praktyce. Faktycznie fajnie działa, ale jest pewien szkopuł z pracą ADC. Mimo że zmieniam kanały, a przynajmniej tak mi się wydaje, to wartości rejestru ADCW są takie same dla obu kanałów.  Czyli problem leży gdzieś w pomiarze ADC, tylko gdzie ?<br /><br />Bardzo prosił bym o pomoc. Mirek Was bardzo chwali w videoporadnikach <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /> <br /><br /><strong><span style="font-size: 150%; line-height: normal"><span style="color: #FF0000">EDYCJA:</span></span></strong><br />Zrobiłem jeszcze mały test, który wypadł pozytywnie.<br />Do kanału PC0(Lambda) podłączyłem baterie &quot;paluszek&quot; natomiast kanał PC1(TPS) zwarłem do 5V i ku mojemu zaskoczeniu wartość ADC(PC0) równa była 253, a wartość ADC(PC1)= 1023. Natomiast napięcia, które są przeliczane przez funkcje z bloga Mirka wynoszą tyle samo. <br /><br />Gdzie zrobiłem błąd ?<br /><br />main.c<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2013-08-21<br /> *      Author: Tomek<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;uart.h&quot;<br />#include &quot;main.h&quot;<br />#include &quot;mk_term.h&quot;<br />#include &quot;adc.h&quot;<br /><br /><br />#define SR 8// rozmar bufora do celów uśredniania<br /><br />// typ strukturalny na potrzeby przeliczania napięć z ADC do stringów<br />// v1 - część przed przecinkiem<br />// v2 - część po przecinku<br />typedef struct {<br />uint16_t adc_mid;// uśredniona wartość ADC<br />uint16_t ref_adc;// środkowy zakres wartości ADC odpowiadającej zmierzonemu niżej napięciu<br />uint16_t ref_v;// środkowy zakres napięcia * 100 (czyli np dla 6,5V ---&gt; 650)<br />char v1&#91;3&#93;;<br />char v2&#91;3&#93;;<br />} TVOL;<br /><br />TVOL lambda_voltage;// zmienna strukturalna na potrzeby np jednego kanału<br />TVOL tps_voltage;<br /><br /><br />void get_vol( uint16_t adc, TVOL * voltage );<br /><br />int main(void)<br />{<br /><br />uart_init( __UBRR );<br />adc_init();<br /><br />lambda_voltage.ref_adc = 208;// zmierzona wartość ADC dla środkowego mierzonego napięcia<br />lambda_voltage.ref_v = 100;// wartość środkowa mierzonego napięcia<br />tps_voltage.ref_adc = 208;<br />tps_voltage.ref_v = 100;<br /><br /><br /><br /><br />/* Konfiguracja przerwania INT0 */<br />MCUCR |= (1&lt;&lt;ISC01);//Konfiguracja INT0 na opadające zobocze<br />GICR |= (1&lt;&lt;INT0);//Włączenie przerwania na INT0<br /><br />/* Konfiguracja Timera0 */<br />TCCR0 |= (1&lt;&lt;CS01) | (1&lt;&lt;CS00); // Preskaler 64;<br />TCNT0 = 70; // Licznie do 70, 1000Hz;<br />TIMSK |= (1&lt;&lt;TOIE0); //Zezwolenie na przerwanie<br /><br />/* Konfiguracja Timera1 */<br />TCCR1B |= (1&lt;&lt;WGM12); //CTC<br />TCCR1B |= (1&lt;&lt;CS11) | (1&lt;&lt;CS10); //Preskaler 64<br />OCR1A = 11; // Około 10 000Hz<br />TIMSK |= (1&lt;&lt;OCIE1A); //Zezwolenie na przerwanie CompareMatch<br /><br />/* Konfiguracja Timera2- Wtrysk */<br />TCCR2 |= (1&lt;&lt;WGM21) | (1&lt;&lt;WGM20) | (1&lt;&lt;COM21) ; //Fast PWM<br />TCCR2 |= (1&lt;&lt;CS22) | (1&lt;&lt;CS21); //Preskaler 256; około 200Hz<br /><br /><br /><br /><br />/* Konfiguracja rejestrów DDR */<br />DDRB |= (INJECTION_PIN);<br />//DDRC &amp;= ~((1&lt;&lt;LAMBDA_PIN) | (1&lt;&lt;TPS_PIN)); //Wejscia<br />DDRC |= (B1 | A1 | B2 | A2); //Wyjscia silnik krokowy<br />DDRD |= (LAMBDA_HEATER_PIN);<br /><br />motor_timer = 0;<br />INT0_counter = 0;<br />LAMBDA_HEATER_ON;<br />tr_cls(1);<br />sei();<br />while(1){<br /><br />if((RPM&gt;50) &amp;&amp; (RPM&lt;500)){//odpalanie<br />if(!motor_timer){<br />motor_timer=MOTORSPEED;<br />open_bias();<br />OCR2 = 10;<br /><br />}<br />}<br /><br />if((RPM&gt;500) &amp;&amp; (tps_value&lt;110)){ //bieg jałowy<br />if(RPM&lt;IDLE_RPM){<br />if(!motor_timer){<br />motor_timer=MOTORSPEED;<br />open_bias();<br />}<br />if(lambda_value&lt;LAMBDA05V){<br />if(OCR2&lt;11)OCR2++;<br />}<br />}<br />if(RPM&gt;IDLE_RPM){<br />if(!motor_timer){<br />motor_timer=MOTORSPEED;<br />close_bias();<br />}<br />if(lambda_value&lt;LAMBDA05V){<br />if(OCR2&gt;1)OCR2--;<br />}<br />}<br /><br />}<br /><br />if(tps_value&gt;110){ // praca<br />silnik_stop();<br />if(lambda_value&lt;LAMBDA05V){<br />if(OCR2&lt;21)OCR2++;<br />}<br />else{<br />if(OCR2&gt;1)OCR2--;<br />}<br />}<br /><br />if(!uart_timer){<br />uart_timer=5000; //500ms<br />show_info();<br />}<br />if(!adc_timer){<br />adc_timer=50; //5ms<br />//tps_voltage = (read_adc(TPS_PIN) * VREF / 1024)*100;<br />tps_value = read_adc(TPS_PIN);<br />get_vol( tps_value, &amp;tps_voltage );<br />lambda_value = read_adc(LAMBDA_PIN);<br />get_vol( lambda_value, &amp;lambda_voltage );<br /><br />}<br /><br />}<br /><br />}<br /><br />/* Przerwanie zewnętrzne INT0 */<br />ISR(INT0_vect){<br />INT0_counter++;<br />}<br />/* Przerwanie Timer0 */<br />ISR(TIMER0_OVF_vect){<br />TCNT0 = 70;<br />static uint8_t INT0_timer=0;<br />if(INT0_timer == 200){<br />RPM = INT0_counter * 50;<br />INT0_counter = 0;<br />INT0_timer = 0;<br />}<br />INT0_timer++;<br />}<br /><br />/* Przerwanie Timer1 */<br />ISR(TIMER1_COMPA_vect){<br />uint16_t x;<br />x = motor_timer;<br />if(x) motor_timer = --x;<br />x = uart_timer;<br />if(x) uart_timer = --x;<br />x = adc_timer;<br />if(x) adc_timer = --x;<br />}<br /><br /><br />/*SILNIK KROKOWY*/<br />void silnik_stop(void) {<br />PORTD &amp;= ~(A1|A2|B1|B2);<br />}<br /><br /><br />/* Zamknięcie kanału powietrza */<br />void close_bias(void) {<br />static uint8_t kr;<br />if( kr == 0 ) { KROK1; }<br />if( kr == 1 ) { KROK2; }<br />if( kr == 2 ) { KROK3; }<br />if( kr == 3 ) { KROK4; }<br /><br />if( ++kr &gt; 3 ) kr=0;<br />}<br /><br /><br />/* Otwarcie kanału powietrza */<br />void open_bias(void) {<br />static uint8_t kr;<br />if( kr == 0 ) { KROK4; }<br />if( kr == 1 ) { KROK3; }<br />if( kr == 2 ) { KROK2; }<br />if( kr == 3 ) { KROK1; }<br /><br />if( ++kr &gt; 3 ) kr=0;<br />}<br /><br /><br />void show_info(void){<br />tr_locate(0,0);<br />uart_puts(&quot;Cinquecento ECU_ver1&quot;);<br />tr_locate(3,0);<br />uart_puts(&quot;Obroty/min:  &quot;);<br />uart_putlong(RPM,10);<br />tr_locate(4,0);<br />uart_puts(&quot;Wypełnienie wtryskiwacza:  &quot;);<br />uart_putlong(OCR2,10);<br />tr_locate(5,0);<br />uart_puts(&quot;Czujnik położenia przepustnicy:  &quot;);<br />uart_puts(tps_voltage.v1);<br />uart_puts( &quot;.&quot;);<br />uart_puts(tps_voltage.v2);<br />uart_puts( &quot; V       &quot;);<br />tr_locate(6,0);<br />uart_puts(&quot;Czujnik położenia przepustnicy(ADC):  &quot;);<br />uart_putlong(tps_value,10);<br />tr_locate(7,0);<br />uart_puts(&quot;Sonda Lambda:  &quot;);<br />uart_puts( lambda_voltage.v1 );// jednostki i dziesiątki zmierzonego napięcia<br />uart_puts( &quot;.&quot;);<br />uart_puts( lambda_voltage.v2 );// część ułamkowa zmierzonego napięcia<br />uart_puts( &quot; V       &quot;);<br />tr_locate(8,0);<br />uart_puts(&quot;Sonda Lambda(ADC):  &quot;);<br />uart_putlong(lambda_value,10);<br /><br /><br /><br />}<br /><br />// zamiana ADC na napięcie i uśrednianie<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 /><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 />voltage-&gt;v2&#91;0&#93;='0';<br />voltage-&gt;v2&#91;1&#93;=divmod.rem+'0';<br />}<br /><br />voltage-&gt;v1&#91;2&#93;=0;<br />voltage-&gt;v2&#91;2&#93;=0;<br />}[/syntax]<br /><br />main.h<br />[syntax=c]/*<br /> * main.h<br /> *<br /> *  Created on: 2013-08-21<br /> *      Author: Tomek<br /> */<br /><br />#ifndef MAIN_H_<br />#define MAIN_H_<br /><br />volatile uint16_t INT0_counter;<br />volatile uint16_t motor_timer;<br />volatile uint16_t RPM;<br />volatile uint16_t uart_timer;<br />volatile uint16_t adc_timer;<br />uint16_t tps_value;<br />#define VREF 5 //5V<br />uint16_t lambda_value;<br />#define IDLE_RPM 1000<br />#define MOTORSPEED 50 //5ms<br />#define LAMBDA05V 104 //LAMBDA = 0,5V 1KG paliwa /14,7 powietrza<br /><br />/*Konfiguracja I/O*/<br /><br />#define LAMBDA_PIN (PC0)<br />#define TPS_PIN (PC1)<br />#define LAMBDA_HEATER_PIN (1&lt;&lt;PD0)<br />#define LAMBDA_HEATER_ON PORTD |=(LAMBDA_HEATER_PIN)<br />#define LAMBDA_HEATER_OFF PORTD &amp;= ~(LAMBDA_HEATER_PIN)<br />#define INJECTION_PIN (1&lt;&lt;PB3)<br /><br />/*SILNIK KROKOWY*/<br />/* przydatne definicje pinów sterujących */<br />#define B1 (1&lt;&lt;PC2)<br />#define A1 (1&lt;&lt;PC4)<br />#define A2 (1&lt;&lt;PC5)<br />#define B2 (1&lt;&lt;PC3)<br /><br />/* definicje kroków sterujących pracą silnika */<br />#define KROK1 PORTC |= A1|B1; PORTC &amp;= ~(A2|B2)<br />#define KROK2 PORTC |= A2|B1; PORTC &amp;= ~(A1|B2)<br />#define KROK3 PORTC |= A2|B2; PORTC &amp;= ~(A1|B1)<br />#define KROK4 PORTC |= A1|B2; PORTC &amp;= ~(A2|B1)<br /><br />void silnik_stop(void);<br />void close_bias(void);<br />void open_bias(void);<br />void show_info(void);<br /><br /><br /><br /><br /><br /><br /><br /><br />#endif /* MAIN_H_ */[/syntax]<br /><br />adc.c<br />[syntax=c]/*<br /> * adc.c<br /> *<br /> *  Created on: 22-08-2013<br /> *      Author: Tomek<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br /><br /><br /><br />void adc_init(void){<br />/* Ustawienia napięcia referencyjnego oraz preskalera */<br />ADMUX |= (1&lt;&lt;REFS0); //5V<br />ADCSRA |= (1&lt;&lt;ADEN) | (1&lt;&lt;ADPS2) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS0); // ADC ON, prescaler 128, 93 750Hz<br /><br />}<br /><br /><br /><br /><br />uint16_t read_adc(uint8_t channel)<br />{<br />ADMUX = (ADMUX &amp; 0b11111000) | channel; //set input to adc<br />ADCSRA |= (1&lt;&lt;ADSC); //start mes<br />while(ADCSRA &amp; (1&lt;&lt;ADSC)); // waiting for convert<br />return ADCW; // return 16 bit<br /><br /><br />}[/syntax]<br /><br />adc.h<br />[syntax=c]/*<br /> * adc.h<br /> *<br /> *  Created on: 22-08-2013<br /> *      Author: Tomek<br /> */<br /><br />#ifndef ADC_H_<br />#define ADC_H_<br /><br /><br />uint16_t read_adc(uint8_t channel);<br />void adc_init(void);<br /><br /><br /><br /><br /><br /><br />#endif /* ADC_H_ */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=468">paladyn</a> — 3 wrz 2013, o 21:06</p><hr />
]]></content>
</entry>
</feed>