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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-09-02T21:59:20+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1491&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-02T21:59:20+01:00</updated>
<published>2012-09-02T21:59:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14306#p14306</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14306#p14306"/>
<title type="html"><![CDATA[Re: Atmega8 dwa kanały ADC – problem z wartością ADCW]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14306#p14306"><![CDATA[
No i bardzo fajnie wygląda - sam wiem jak to jest <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i ile radochy jak się samemu coś uruchamia ....<br /><br />a nawet nie wiesz jak miło autorowi jest usłyszeć że książka chociaż w minimalnym stopniu pomogła w rozwijaniu pasji - bo taki jest GŁÓWNY cel tego co piszę .... i jak słyszę takie słowa to aż chce się dalej to robić ...<br /><br />Więc jak będziesz oczywiście miał pytanka to dawaj śmiało starając się jednak jakoś lepiej je precyzować - aby można było z chirurgiczną precyzją szybko pomóc <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=54">mirekk36</a> — 2 wrz 2012, o 21:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tomiplis]]></name></author>
<updated>2012-09-02T21:50:12+01:00</updated>
<published>2012-09-02T21:50:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14304#p14304</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14304#p14304"/>
<title type="html"><![CDATA[Re: Atmega8 dwa kanały ADC – problem z wartością ADCW]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14304#p14304"><![CDATA[
Lekcja się przydała  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Czasami wpadam w nieskończoną pętle i pomimo błahego problemu zaczynam kombinować w najróżniejsze strony oprócz właściwej  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Poskładałem dzisiaj wszystkie elementy na prototypową płytkę i spróbuje przeprowadzić testy w aucie. Jak wszystko będzie grać to przejdę do napisania wszystkiego w jedna spójną całość i popróbuję sił w eaglu (gratuluje nagrania świetnego kursu)  i trawieniu płytki. Nie polecam nikomu lutowania na dziurawce którą miałem bo z każdym elementem zaczyna być ciaśniej i kosztuje to bardzo dużo pracy i nerwów gdy się rozleje cyna po różnych zakończeniach.<br /><br />Komputerek który wykonuje jest tak prosty z świadomego wyboru, montuje go w dosyć starym aucie które wykorzystuje do worzenia najróżniejszych rzeczy i będzie idealnie pasował do wystroju japońskiego auta z lat dziewięćdziesiątych <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  <br /> <br />Co najśmieszniejsze to dzięki komputerkowi jaki kupiłem wcześniej jako gotowy i zamontowałem w innym autku dotarło do mnie jakie możliwości daje umiejętność programowania i znajomość elektroniki. Jak chyba większość poczatkujących rozpocząłem zabawę w bascomie i nie do opisania jest radość pierwszego odpalenia własnego programu który miga diodą  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  Potem natrafiłem na Twój blog i dzięki  temu postanowiłem rozstać się z bascomem i przejść na C czego nie żałuje. Książkę dostałem na święta i pomalutku próbuje się rozwijać, miałem po zimie przerwę i dopiero w sierpniu ruszyłem  ponownie dozbrajając się w stacje lutownicza bo stara transformatorówka jest mało wygodna  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  A pomysłów z zastosowaniem mikrokontrolerów nie brakuje, pozostaje tylko się uczyć aby je zrealizować.<br /><br />Tak wygląda mój dzisiejszy „Frankenstein” <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><img src="https://lh4.googleusercontent.com/-mh0-rv1nDK8/UEPEgu4sn3I/AAAAAAAAIDQ/Kz6lV3hn3MM/s480/2.jpg" alt="Obrazek" /><br /><br /><img src="https://lh6.googleusercontent.com/-eUr5Bwqp5UM/UEPEhIWQE2I/AAAAAAAAIDU/mCNam87JKkU/s480/1.jpg" alt="Obrazek" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=538">Tomiplis</a> — 2 wrz 2012, o 21:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-02T13:21:24+01:00</updated>
<published>2012-09-02T13:21:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14266#p14266</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14266#p14266"/>
<title type="html"><![CDATA[Re: Atmega8 dwa kanały ADC – problem z wartością ADCW]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14266#p14266"><![CDATA[
O widzisz i to są najlepsze lekcje <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> na błędach ....<br /><br />a na poważnie to bardzo fajnie że udało ci się samemu rozwikłać swoją zagadkę <br /><br />super też, że np korzystasz z zewnętrznego źródła taktowania ..... ale mam nadzieję, że zrozumiałeś też teraz dobitnie, iż aby otrzymać czasem dobrą podpowiedź na forum to trzeba jeszcze umiejętnie zadać pytanie ....<br /><br />skąd ktoś miałby się spodziewać że u ciebie jest tak a nie inaczej skoro nie pokazujesz np schematu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />dlatego mam nadzieję że na przyszłość będzie lepiej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 2 wrz 2012, o 13:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tomiplis]]></name></author>
<updated>2012-09-02T01:58:50+01:00</updated>
<published>2012-09-02T01:58:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14240#p14240</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14240#p14240"/>
<title type="html"><![CDATA[Re: Atmega8 dwa kanały ADC – problem z wartością ADCW]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14240#p14240"><![CDATA[
To mi nie poszło na forum    <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" />   Nie jestem testerem „googlowych” teorii i nie testuję bezmyślnie tego co ktoś opublikował z pretensjami, że nie działa. Wiem, że tak mój wpis wygląda i chciałem to sprostować bo działam w dobrej wierze. Co najgorsze to kod który napisałem był mój o czy później.<br /><br />To, że napisałem o poszukiwaniu podobnego tematu odnosiło się jedynie do atmegi8 i kilku kanałów odczytywanych bezpośrednio po sobie bez wychodzenia z funkcji.  Po prostu nie potrafię napisać o co mi chodzi a znalazłem podobnych do mnie  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />A teraz najlepsze, chciałem przeprosić za własna głupotę bo z powodu wpisania „!” w pętli sprawdzającej koniec konwersji  doprowadziłem do natychmiastowego wyjścia z pętli  <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br /><br />Zawracam głowę na forum i tracę czas innych. Ja straciłem kilka dni  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Co do źródła REF to mam zewnętrzne tylko i wyłącznie z powodów poznawczych bo jak pisałem nie jestem elektronikiem a próbuję się czegoś nauczyć. Opisane w książce zagadnienie ADC przerobiłem i działa bez zastrzeżeń od zimy w woltomierzu który zrobiłem do auta.  Teraz chciałem sam cos napisać i wyszło jak zawsze <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Z pokazaniem schematu może być ciężko bo dopiero ogarniam eagle i wszystko masakruje w zeszycie i na stykówce. Wiem, że to nie elegancki sposób ale tak na razie robię.  Zastosowałem LM385Z-1.2 bo taki miałem, środkowa nóżka do procka i rezystora który idzie do VCC a dwie zewnętrzne do masy. Na mierniku mam dokładnie 1,235V i tu chyba wszystko gra.<br /><br />Wkleję kod który męczę i jakoś działa, ale dostane zaraz opr bo opisy robiłem tylko dla siebie i nie wszystko jest logiczne a znam nastawienie autora książki  <img src="https://forum.atnel.pl/images/smilies/icon_e_confused.gif" alt=":?" title="Boi się" />  Dodatkowo kod jest pisany w sposób mocno przypadkowy, gdyż szukałem sposobów na ogarniecie impulsów VSS i wtrysku tak, aby uzyskać wynik (impulsy generuje tym samym procesorem bo nie mam generatora). Wszystko będę zmieniał i wrzucał do funkcji z wieloma argumentami a nie jak jest teraz  każda zmienna żyje własnym życiem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Tak to wygląda na biurku <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  <br /><a href="http://www.youtube.com/watch?v=xw2z3GF0wmM&amp;feature=youtu.be"  class="postlink">http://www.youtube.com/watch?v=xw2z3GF0wmM&amp;feature=youtu.be</a><br /><br /><br />Jak pisałem wcześniej, chciałem tylko zapytać czy atmega8 może bezpośrednio po konwersji ADC z jednego kanału rozpocząć kolejną bez wpływu na wynik (kolejny oczywiście).  I żył bym z tym pytaniem nadal gdyby nie ten zimny prysznic który mnie uświadomił. Najgorsze jest to, że zdołałem sobie poradzić z problemem robiąc jakieś dziwne pętle które poniekąd były substytutem  _delay  i wszystko mi niby działało.<br /><br />Mam jeszcze jedno głupie pytanie,  w „ADMUX = (ADMUX &amp; 0xF8) | kanal;” jest f8 a nie f0. Efekt generalnie ten sam bo bit MUX3 jest nie wykorzystany, ale gdy przypadkiem będzie miał 1 to może coś się pokrzaczyć, chociaż tylko ja mógł bym tam wpisać 1  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Jedno małe „!” zniszczyło mi  życie  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Dziękuje za pomoc, teraz się dwa razy zastanowię zanim coś nowego odkryję odnośnie AVR  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br />Pozdrawiam <br /><br /><br />Kod w wersji z odczytem ADC w petli, PWN_LED nie oznacza PWN bo na multipleksie nie działa (włącza tylko dodatkowy rezystor na anody)<br />Proszę go traktowac jako przestrogę a nie przykład  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2012-08-05<br /> *      Author: Tomasz Pliszczak<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;avr/eeprom.h&gt;<br />#include &lt;avr/wdt.h&gt;<br /><br />#include &quot;d_led.h&quot;<br /><br />#define KEY_PIN1 (1&lt;&lt;PC3)<br />#define KEY_DOWN1 !(PINC &amp; KEY_PIN1)<br />#define KEY_PIN2 (1&lt;&lt;PC2)<br />#define KEY_DOWN2 !(PINC &amp; KEY_PIN2)<br />#define PWM_PIN (1&lt;&lt;PD4)<br /><br /><br />void przelicz();//przeliczenie<br />void display_manu();//wyswietla konfiguracje<br />void display_tripkm(); // trip km<br />void display(uint8_t m); // wszystko<br />uint8_t przycisk();  //klawisze<br /><br /><br />extern volatile uint8_t cy1;<br />extern volatile uint8_t cy2;<br />extern volatile uint8_t cy3;<br />extern volatile uint8_t cy4;<br />extern volatile uint8_t kr1;<br />extern volatile uint8_t kr2;<br />extern volatile uint8_t kr3;<br />extern volatile uint8_t kr4;<br />extern volatile uint16_t Timer1, Timer2, Timer3;<br /><br /><br />volatile uint32_t VSS_CZAS; //licznik czasu co 100us<br />volatile uint32_t VSS_OBLICZ;<br /><br />volatile uint32_t INJ_OBL;<br />volatile uint16_t INJ_CZAS;<br /><br />uint8_t DISP_NAPIECIE;<br />uint8_t DISP_PRETKOSC;<br />uint16_t DISP_CHWIL;<br />uint16_t DISP_TRIP;<br />uint16_t DISP_TRIP_KM;<br />uint16_t ADC_LED;<br /><br />enum {nap,pre,chwil,trip,tripkm}; // nazwy manu<br /><br /> typedef struct  {<br />      uint16_t stala_drogi;<br />      uint16_t stala_wtrysku;<br />      uint16_t pwm_led;<br />      uint32_t inj_trip1;<br />      uint32_t vss_trip1;<br />      uint8_t manu;<br /> } CONFIG;<br /><br /> CONFIG EEMEM ee_config;    // definiujemy strukturę w pamięci EEPROM<br /> CONFIG ram_config;  // definiujemy strukturę w pamięci RAM<br /><br /><br />int main(void){<br />d_led_init();<br /><br />if(MCUSR&amp;(1&lt;&lt;WDRF)) kr4=1;   //  pies<br />MCUSR&amp;=~(1&lt;&lt;WDRF);<br />wdt_reset();<br />wdt_enable(WDTO_2S);<br />WDTCR |= (1&lt;&lt;WDCE) | (1&lt;&lt;WDE);<br />WDTCR |= (1&lt;&lt;WDP2) | (1&lt;&lt;WDP1)| (1&lt;&lt;WDP0);<br /><br />eeprom_read_block(&amp;ram_config, &amp;ee_config, sizeof(ram_config));  // odczyt bloku eeprom<br />if(ram_config.stala_drogi==0)ram_config.stala_drogi=784;     //po pierwszym wlaczeniu<br />if(ram_config.stala_wtrysku==0)ram_config.stala_wtrysku=320;<br />if(ram_config.pwm_led==0)ram_config.pwm_led=700;<br /><br />//ustawienie TIMER0<br />TCCR0 |= (1&lt;&lt;CS01);// preskaler = 8<br />TCNT0=156;                              // co 0,0001s 10000hz<br />TIMSK |= (1&lt;&lt;TOIE0);// zezwolenie na przerwanie CompareMatch<br /><br />//ustawienie TIMER1<br />TCCR1B |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10);// preskaler = 1024 0,000128s<br />//TCCR1B |= (1&lt;&lt;CS12);// preskaler = 256 0,000032s<br />TCCR1B|=(1&lt;&lt;ICNC1);                //redukcaja Noise Canceler<br />TIMSK |= (1&lt;&lt;TICIE1);        // Przerwanie od ICP1<br />TCCR1B &amp;= ~(1&lt;&lt;ICES1);      // Zbocze opadające na ICP1<br /><br />//Przerwanie INT0<br />MCUCR |= (1&lt;&lt;ISC01);// wyzwalanie zboczem opadajacym<br />GICR |= (1&lt;&lt;INT0);// odblokowanie przerwania<br />ADMUX = 0;     //ADC<br />ADMUX &amp;= ~((1&lt;&lt;REFS1)|(1&lt;&lt;REFS0));  //zew ref 1,235v<br />ADCSRA = (1&lt;&lt;ADEN)|(1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0); //128 preskaler<br /><br />// ************pomocnicza testowa************<br />DDRC|=(1&lt;&lt;PC5)|(1&lt;&lt;PC4);<br />PORTC|=(1&lt;&lt;PC5)|(1&lt;&lt;PC4);<br />//*******************************************<br /><br />DDRC&amp;=~(KEY_PIN1|KEY_PIN2|(1&lt;&lt;PC0)|(1&lt;&lt;PC1));  // przyciski wejscia<br />PORTC|=KEY_PIN1|KEY_PIN2;  // przyciski do vcc<br />//PORTC&amp;=~((1&lt;&lt;PC0)|(1&lt;&lt;PC1));<br />DDRD|=PWM_PIN; // wyjscie podswietlenia<br />PORTD|=PWM_PIN;<br /><br /><br /><br />DDRD&amp;=~((1&lt;&lt;PD2)|(1&lt;&lt;PD3));  //PRZERWANIA WEJSCIA<br />PORTD|=(1&lt;&lt;PD2);  // PRZERWANIA DO VSS<br />DDRB&amp;=~(1&lt;PB0);  // ICP1 wtrysk<br />PORTB|=(1&lt;&lt;PB0); //ICP1 wtrysk<br /><br />sei();<br /><br />while(1){<br />static uint8_t start=1;<br />while(start){//start zawsze napiecie<br />przelicz();<br />display(nap);<br />PORTD&amp;=~PWM_PIN;  // podswietlenie max<br />if(przycisk(10))start=0;<br />if(DISP_NAPIECIE&gt;140||DISP_CHWIL&gt;0){<br />uint16_t x=1;<br />while(x){<br />przelicz();<br />display(nap);<br />x++;<br />if(x&gt;50)x=0;<br />_delay_ms(100);<br />wdt_reset();<br />}<br />start=0;<br />}<br />_delay_ms(100);<br />wdt_reset();<br />}<br /><br />if(przycisk(50)){<br />if(przycisk(25)==1){<br />if(ram_config.manu==nap)ram_config.manu=tripkm;<br />else ram_config.manu--;<br />//_delay_ms(20);<br />}<br />if(przycisk(25)==2){<br />if(ram_config.manu==tripkm)ram_config.manu=nap;<br />else ram_config.manu++;<br />//_delay_ms(20);<br />}<br />if(przycisk(50)==3){<br />_delay_ms(50);<br />if(przycisk(30)==3){<br />if(ram_config.manu==nap)ram_config.pwm_led=ADC_LED;<br />Timer2=500;<br />_delay_ms(50);<br />while(Timer2&gt;0){<br />if(ram_config.manu==trip||ram_config.manu==tripkm){<br />wdt_reset();<br />_delay_ms(1500);<br />wdt_reset();<br />if(przycisk(30)==3){<br />ram_config.vss_trip1=0;<br />ram_config.inj_trip1=0;<br />cy1=14;cy2=14;cy3=14;cy4=14;<br />kr1=0;kr2=0;kr3=0; //zerowanie kropek<br />_delay_ms(500);<br />break;<br />}<br />}<br />display_manu();<br />if(przycisk(40)==1){<br />Timer2=500;<br />if(ram_config.manu==nap){<br />ram_config.pwm_led-=1;<br />if(ram_config.pwm_led&lt;1)ram_config.pwm_led=1023;<br />if(KEY_DOWN1){<br />_delay_ms(100);<br />while(KEY_DOWN1){<br />ram_config.pwm_led-=1;<br />if(ram_config.pwm_led&lt;1)ram_config.pwm_led=1023;<br />_delay_ms(15);<br />display_manu();<br />Timer2=500;<br />wdt_reset();<br />}<br />}<br />}<br />if(ram_config.manu==pre)--ram_config.stala_drogi;<br />if(ram_config.manu==chwil)--ram_config.stala_wtrysku;<br />//_delay_ms(10);<br />}<br />if(przycisk(40)==2){<br />Timer2=500;<br />if(ram_config.manu==nap){<br />ram_config.pwm_led+=1;<br />if(ram_config.pwm_led&gt;1023)ram_config.pwm_led=0;<br />if(KEY_DOWN2){<br />_delay_ms(100);<br />while(KEY_DOWN2){<br />ram_config.pwm_led+=1;<br />if(ram_config.pwm_led&gt;1023)ram_config.pwm_led=0;<br />_delay_ms(15);<br />display_manu();<br />Timer2=500;<br />wdt_reset();<br />}<br />}<br />}<br />if(ram_config.manu==pre)++ram_config.stala_drogi;<br />if(ram_config.manu==chwil)++ram_config.stala_wtrysku;<br />//_delay_ms(10);<br />}<br />if(Timer2&lt;10){   // do testow<br />eeprom_update_block(&amp;ram_config, &amp;ee_config, sizeof(ram_config));<br />Timer2=0;<br />}<br />wdt_reset();<br />}<br />}<br />}<br />}<br />//***********************************************************************************<br />if(!Timer3){                 //co 100ms przelicz i wyswietl<br />przelicz();<br />display(ram_config.manu);<br />Timer3=10;<br />}<br />//zerowanie tripow po przed przepelnieniem  okolo 2000km<br />if(ram_config.inj_trip1&gt;310000000UL||ram_config.vss_trip1&gt;5000000UL){<br />ram_config.vss_trip1=0;<br />ram_config.inj_trip1=0;<br />}<br />//jasnosc*****************************************<br />if(ADC_LED&gt;ram_config.pwm_led)PORTD&amp;=~PWM_PIN;<br />if(ADC_LED&lt;(ram_config.pwm_led-100))PORTD|=PWM_PIN;<br /><br /><br />//if(DISP_TRIP_KM&gt;999&amp;&amp;!(DISP_TRIP_KM-1000))<br /><br />wdt_reset();<br />}<br />}<br />//*******************************funkcje****************************************************<br />uint8_t przycisk(uint16_t ms){<br />_delay_ms(ms);<br />if(KEY_DOWN1&amp;&amp;KEY_DOWN2)return 3;<br />else{<br />if(KEY_DOWN1)return 1;<br />if(KEY_DOWN2)return 2;<br />}<br />return 0;<br />}<br />void display_manu(){<br />kr1=0;kr2=0;kr3=0; //zerowanie kropek<br />if(ram_config.manu==nap){<br />cy4=ram_config.pwm_led%10;<br />cy3=(ram_config.pwm_led/10)%10;<br />cy2=(ram_config.pwm_led/100)%10;<br />cy1=(ram_config.pwm_led/1000)%10;<br />}<br />if(ram_config.manu==pre){<br />cy4=ram_config.stala_drogi%10;<br />cy3=(ram_config.stala_drogi/10)%10;<br />cy2=(ram_config.stala_drogi/100)%10;<br />cy1=(ram_config.stala_drogi/1000)%10;<br />}<br />if(ram_config.manu==chwil){<br />cy4=ram_config.stala_wtrysku%10;<br />cy3=(ram_config.stala_wtrysku/10)%10;<br />cy2=(ram_config.stala_wtrysku/100)%10;<br />cy1=(ram_config.stala_wtrysku/1000)%10;<br />}<br />}<br />void display(uint8_t m){<br />kr1=0;kr2=0;kr3=0; //zerowanie kropek<br />if(m==nap){<br />kr2=1;  // kropka 2<br />cy4=13; // wyswietla u<br />cy3=DISP_NAPIECIE%10;<br />cy2=(DISP_NAPIECIE/10)%10;<br />cy1=DISP_NAPIECIE/100;if(cy1==0)cy1=11;<br />}<br />if(m==pre){<br />cy4=12; // h<br />cy3=DISP_PRETKOSC%10;<br />cy2=(DISP_PRETKOSC/10)%10;<br />if(cy2==0&amp;&amp;DISP_PRETKOSC&lt;100)cy2=11,cy1=11;<br />else cy1=DISP_PRETKOSC/100;if(!cy1)cy1=11;<br />}<br />if(m==chwil){<br /><br />kr2=1;  // kropka 2<br />cy4=10; // wyswietla L<br />cy3=DISP_CHWIL%10;<br />cy2=(DISP_CHWIL/10)%10;<br />cy1=DISP_CHWIL/100;if(cy1==0)cy1=11;<br />}<br />if(m==trip){<br /><br />kr2=1;  // kropka 2<br />cy4=10; // wyswietla L<br />cy3=DISP_TRIP%10;<br />cy2=(DISP_TRIP/10)%10;<br />cy1=DISP_TRIP/100;if(cy1==0)cy1=11;<br />}<br />if(m==tripkm){<br />kr3=1;  // kropka 2<br />if(DISP_TRIP_KM&gt;9999){<br />DISP_TRIP_KM/=10;<br />kr3=0;<br />}<br />//DISP_TRIP_KM=ADC_LED;<br />cy4=DISP_TRIP_KM%10;<br />cy3=(DISP_TRIP_KM/10)%10;<br />cy2=(DISP_TRIP_KM/100)%10;<br />cy1=(DISP_TRIP_KM/1000)%10;<br /><br />}<br />}<br />void przelicz(){<br />//****************napiecie***********************************************<br /><br />static uint8_t adc_nr;<br />static uint8_t flagaadc;<br />static uint8_t flagaadc2;<br /><br />if(adc_nr&lt;2){<br />//static uint8_t srednia_led[5]={0,0,0,0,0};<br />//static uint8_t n_led, s_led;<br />//uint16_t wynik_led=0;<br />ADMUX |=(1&lt;&lt;MUX0);     //ADC<br />ADCSRA |= (1&lt;&lt;ADSC);            //odczyt ADC<br />while( !(ADCSRA &amp; (1&lt;&lt;ADSC)) );<br />while( (ADCSRA &amp; (1&lt;&lt;ADIF)) );<br />if(flagaadc){<br />ADC_LED=ADCW;<br />/*srednia_led[n_led]=ADC_LED;   // srednia 5 pomiarow<br />for(uint8_t i=0;i&lt;5;i++){<br />wynik_led=wynik_led+srednia_led[i];<br />}<br />n_led++;<br />if(n_led&gt;4)n_led=0,s_led=1;<br />if(s_led)ADC_LED=wynik_led/5;  // po 5 pomiarach usrednianie<br />if(!ADC_LED){n_led=0;s_led=0;}*/<br />}<br />flagaadc++;<br />flagaadc2=0;<br />}<br />else{<br />ADMUX &amp;=~(1&lt;&lt;MUX0);<br />static uint8_t srednia[10]={0,0,0,0,0,0,0,0,0,0}; //adc<br />static uint8_t n, s;<br />uint16_t wynik1=0;<br />ADCSRA |= (1&lt;&lt;ADSC);            //odczyt ADC<br />while( !(ADCSRA &amp; (1&lt;&lt;ADSC)) );<br />while( (ADCSRA &amp; (1&lt;&lt;ADIF)) );<br />if(flagaadc2){<br />DISP_NAPIECIE = (ADCW*1206UL*13)/100000UL; //obliczenie napiecia dzielnik 13<br />srednia[n]=DISP_NAPIECIE;   // srednia 10 pomiarow<br />for(uint8_t i=0;i&lt;10;i++){<br />wynik1=wynik1+srednia[i];<br />}<br />n++;<br />if(n&gt;9)n=0,s=1;<br />if(s)DISP_NAPIECIE=wynik1/10;  // po 10 pomiarach usrednianie<br />}<br />flagaadc2++;<br />flagaadc=0;<br />}<br />++adc_nr;<br />if(adc_nr&gt;9)adc_nr=0;<br /><br />//**************predkosc*******************************************************<br /><br />DISP_PRETKOSC=(((ram_config.stala_drogi*1000UL)/VSS_OBLICZ)*36)/1000;   //km/h<br />if(VSS_CZAS&gt;28200)DISP_PRETKOSC=0; //gdy brak impulsow  v=0<br /><br />static uint8_t srednia_pr[10]={0,0,0,0,0,0,0,0,0,0};<br />static uint8_t n_pr, s_pr;<br />uint16_t wynik_pr=0;<br />srednia_pr[n_pr]=DISP_PRETKOSC;   // srednia 10 pomiarow<br />for(uint8_t i=0;i&lt;10;i++){<br />wynik_pr=wynik_pr+srednia_pr[i];<br />}<br />n_pr++;<br />if(n_pr&gt;9)n_pr=0,s_pr=1;<br />if(s_pr)DISP_PRETKOSC=wynik_pr/10;  // po 10 pomiarach usrednianie<br />if(!DISP_PRETKOSC){n_pr=0;s_pr=0;}<br /><br /><br /><br /><br />//**************spalanie chwilowe**************************************************<br /><br />if(TCNT1&gt;6000)INJ_OBL=0;<br />DISP_CHWIL=(((ram_config.stala_wtrysku*INJ_OBL)/100)*128UL*(36000000UL/(INJ_CZAS*128UL)))/1000000UL;  //l/h preskaler 1024<br />if(DISP_PRETKOSC&gt;5)DISP_CHWIL=((100000UL/DISP_PRETKOSC)*DISP_CHWIL)/1000;  //ponizej 5km/h l/h<br /><br />static uint8_t srednia_chwil[10]={0,0,0,0,0,0,0,0,0,0};<br />static uint8_t n_ch, s_ch;<br />uint16_t wynik_ch=0;<br />srednia_chwil[n_ch]=DISP_CHWIL;   // srednia 10 pomiarow<br />for(uint8_t i=0;i&lt;10;i++){<br />wynik_ch=wynik_ch+srednia_chwil[i];<br />}<br />n_ch++;<br />if(n_ch&gt;9)n_ch=0,s_ch=1;<br />if(s_ch)DISP_CHWIL=wynik_ch/10;  // po 10 pomiarach usrednianie<br />if(!DISP_CHWIL){n_ch=0;s_ch=0;}<br /><br /><br />//**************spalanie srednie trip*****************************************************<br /><br />uint32_t vss_na1m=(ram_config.vss_trip1*ram_config.stala_drogi)/100; //pelne metry<br />uint32_t inj_trip1sek=ram_config.inj_trip1*10/78125UL; // pelne sekundy wtrysku<br />DISP_TRIP=(ram_config.stala_wtrysku*inj_trip1sek*100)/vss_na1m;<br /><br />static uint8_t srednia_trip[10]={0,0,0,0,0,0,0,0,0,0};<br />static uint8_t n_tr, s_tr;<br />uint16_t wynik_tr=0;<br />srednia_trip[n_tr]=DISP_TRIP;   // srednia 10 pomiarow<br />for(uint8_t i=0;i&lt;10;i++){<br />wynik_tr=wynik_tr+srednia_trip[i];<br />}<br />n_tr++;<br />if(n_tr&gt;9)n_tr=0,s_tr=1;<br />if(s_tr)DISP_TRIP=wynik_tr/10;  // po 10 pomiarach usrednianie<br />if(!DISP_TRIP){n_tr=0;s_tr=0;}<br /><br />//**********************km trip*************************************************************<br /><br />DISP_TRIP_KM=ram_config.vss_trip1*ram_config.stala_drogi/100000UL;  //100 000<br />}<br /><br /><br />//*********************przerwania************************************************************<br /><br />//przerwanie INT0 VSS**************************************<br />ISR(INT0_vect) {<br />if(!Timer1){<br />Timer1=1;<br />VSS_OBLICZ=VSS_CZAS;<br />VSS_CZAS=0;<br />++ram_config.vss_trip1;<br />}<br />}<br />// procedura obsługi przerwania ICP1 wtrysk**************************<br />ISR(TIMER1_CAPT_vect){<br />static uint8_t zbocze;<br />static uint16_t icrp,icrk,icrwynik;<br />static uint32_t INJ_POMOC;<br /><br />if(!zbocze){      //gdy wejscie opadajacym<br />//kr1=1;<br />icrp=ICR1;<br />TCCR1B |= (1&lt;&lt;ICES1);      // Zbocze wzrastajace na ICP<br />zbocze=1;<br />}<br />else{<br />//kr1=0;<br />icrk=ICR1;<br />icrwynik=icrk-icrp;<br />if(icrwynik&gt;6000)icrwynik=0;<br />ram_config.inj_trip1+=icrwynik;<br />if(TCNT1&gt;3906){<br />INJ_OBL=ram_config.inj_trip1-INJ_POMOC;<br />INJ_POMOC=ram_config.inj_trip1;<br />INJ_CZAS=TCNT1;<br />TCNT1=0;<br />}<br />TCCR1B &amp;= ~(1&lt;&lt;ICES1);      // Zbocze opadające na ICP<br />zbocze=0;<br />}<br />}<br />//TIMER  10 000 HZ********************************<br />//SIGNAL(SIG_OVERFLOW0){<br />ISR(TIMER0_OVF_vect){<br /><br />TCNT0=156;<br />//TCNT0=246;<br />++VSS_CZAS;//co 100us<br /><br /><br />//*************************************************************************testy<br /><br />//test predkosci pinc<br />static uint32_t cnt1;    //co 100 us<br />if(cnt1&gt;69)PORTC|=(1&lt;&lt;PC5);<br />if(++cnt1&gt;199){ //699 = 40<br />PORTC&amp;=~(1&lt;&lt;PC5);// co 20 ms<br />cnt1=0;<br />}<br />//test predkosci pinc<br />static uint32_t cnt2;    //co 100 us<br />if(cnt2&gt;79)PORTC|=(1&lt;&lt;PC4);<br />if(++cnt2&gt;149){<br />PORTC&amp;=~(1&lt;&lt;PC4);// co 20 ms<br />cnt2=0;<br />}<br />}<br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=538">Tomiplis</a> — 2 wrz 2012, o 01:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-01T21:23:06+01:00</updated>
<published>2012-09-01T21:23:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14236#p14236</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14236#p14236"/>
<title type="html"><![CDATA[Re: Atmega8 dwa kanały ADC – problem z wartością ADCW]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14236#p14236"><![CDATA[
Wiesz co chciałbym ci pomóc ale w ogóle nie rozumiem co ty robisz <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .... przede wszystkim skąd ci np takie pomysły do głowy przychodzą ?<br /><br />[syntax=c]ADMUX &amp;= ~((1&lt;&lt;REFS1)|(1&lt;&lt;REFS0));  //zew. ref. 1,235v[/syntax]<br /><br />co to jest ??? Korzystasz z ZEWNĘTRZNEGO źródła odniesienia ????? ... jeśli tak to może pokaż jakiś schemat jak to podłączyłeś ?<br /><br />jeśli chcesz żeby ci pomóc - to po pierwsze troszkę się uspokój i zdecyduj na jedno źródło - bo jak troszkę poczytasz w mojej książce, troszkę w jednym googlu troszkę w innym googlu a potem piszesz takie niestworzone fragmenty kodu - i to z komentarzami które nic nie mówią to nie dziw się że nie można zrozumieć co ty chcesz osiągnąć <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />A jeśli nie korzystasz z zewn. źródła odniesienia to robisz już jakieś totalne krzaki w kodzie i dlatego tym bardziej - jeśli chcesz abyśmy mogli sprowadzić dyskusję do tego samego poziomu to trzymajmy się wspólnego podstawowego kodu z książki inaczej nic nie uda mi się podpowiedzieć....<br /><br />masz tu poniżej funkcję z książki do pomiaru na wybranym kanale - dlaczego nie zajrzysz do niej na stronę nr.238<br /><br />[syntax=c]// DEFINICJA funkcji, która dokonuje pomiaru na wybranym kanale/wejściu<br />uint16_t pomiar(uint8_t kanal) {<br />// ustawienie wybranego kanału ADC w rejestrze ADMUX<br />ADMUX = (ADMUX &amp; 0xF8) | kanal;<br />// START pomiaru przez ustawienie bitu ADSC w rejestrze ADCSR<br />ADCSR |= (1&lt;&lt;ADSC);<br />// oczekiwanie na koniec pomiaru (dopóki bit ADSC jest = 1)<br />while( ADCSR &amp; (1&lt;&lt;ADSC) );<br />// po zakończeniu pomiaru, gdy bit ADSC=0, zwrócenie wyniku w postaci<br />// 16-to bitowej wartości z rejestrów ADCH oraz ADCL<br />return ADCW;<br />}[/syntax]<br /><br />zobacz jak się robi komentarze - spróbuj tak samo zrobić w swoim kodzie ale przede wszystkim skorzystaj z tej właśnie funkcji zamiast się miotać i próbować 100x na sekundę różnych rozwiązań z gooogla<br /><br />no i jak pisałem na początku<br /><br />1. pokaż schemat żeby było widać z jakiego napięcia odniesienia korzystasz<br />2. pokaż kompletny kod<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 1 wrz 2012, o 21:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tomiplis]]></name></author>
<updated>2012-09-01T20:44:51+01:00</updated>
<published>2012-09-01T20:44:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14234#p14234</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14234#p14234"/>
<title type="html"><![CDATA[Re: Atmega8 dwa kanały ADC – problem z wartością ADCW]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14234#p14234"><![CDATA[
Dzięki za odpowiedź.<br />Przejrzałem cały projekt i na spokojnie poustawiałem wszystko co potrafiłem ustawić <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />O maskowaniu bitów i zerowaniu MUX3-0 miałem świadomość, tylko mogłem coś pokręcić bo czas na hobby znajduje tylko późnym wieczorem i najczęściej mocno się wszystko przedłuża jak coś nie idzie  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Dzisiaj po pracy miałem trochę czasu i porobiłem eksperymenty, niestety nie udało mi się dokonać odczytów bezpośrednio po sobie na dwóch kanałach bez zakłóceń w wyniku pomimo zakończenia konwersji. Czekałem też na flagę przerwania która następnie kasowałem, ale to tez nic nie zmieniało. Może to wina mojego „laboratorium” bo wszystko jest na pająku ze skrętki na stykówce i może coś się wzbudza.  W przypadku Atmegi8 czas jaki uzyskałem pomiędzy kolejnymi odczytami to jakieś 10-20 ms, poniżej tego co jakiś czas wyniki się miksują i występują nagłe skoki odczytu. W sumie nie ma to znaczenia dla mojego projektu bo odczyt z fotorezystora potrzebuje co jakiś czas w celu sprawdzenia oświetlenia, ale w przyszłości może zajść potrzeba szybkiego multipleksowania kanałów z ADC i będę miał problem.  Poszukałem też trochę w googlu i znalazłem kilka wątków z podobnym problemem ale nikt tego dalej nie ciągną. Musze pobawić się ADC na atmedze32, może będzie jakaś różnica, albo popróbować free running.<br /><br />Kod jak poniżej działa bez problemów, _delay wstawiony tylko do testów bo w programie oddzielam pomiary flagami. <br /><br />Ustawienie ADC:<br />[syntax=c]<br />        ADMUX = 0;     //wyzerowanie ADMUX<br />ADMUX &amp;= ~((1&lt;&lt;REFS1)|(1&lt;&lt;REFS0));  //zew. ref. 1,235v<br />ADCSRA = (1&lt;&lt;ADEN)|(1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0); //128 preskaler[/syntax]<br /><br />Wynik:<br />[syntax=c]<br />                        ADMUX&amp;=0xF0;  // ADMUX&amp;=11110000  -  maska MUX3..0 = 0000 czyli ADC 0<br />ADCSRA |= (1&lt;&lt;ADSC);    //konwersja kanału 0<br />while( !(ADCSRA &amp; (1&lt;&lt;ADSC)) );<br />ADC_0 = ADCW; //zmienna z pomiarem ADC0<br />_delay_ms(20);<br />ADMUX |=(1&lt;&lt;MUX0);     // MUX3..0 = 0001 czyli ADC 1<br />ADCSRA |= (1&lt;&lt;ADSC);//konwersja kanału 1<br />while( !(ADCSRA &amp; (1&lt;&lt;ADSC)) );<br />ADC_1=ADCW;  // zmienna z pomiarem ADC1[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=538">Tomiplis</a> — 1 wrz 2012, o 20:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-08-31T23:26:26+01:00</updated>
<published>2012-08-31T23:26:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14198#p14198</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14198#p14198"/>
<title type="html"><![CDATA[Re: Atmega8 dwa kanały ADC – problem z wartością ADCW]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14198#p14198"><![CDATA[
Witamy gorąco <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />jak chcesz wybierać inny kanał to zawsze musisz zamaskować najpierw bity odpowiedzialne za wybór kanału, np<br /><br /><br />[syntax=c]ADMUX = (ADMUX &amp; 0xF8) | kanal;[/syntax]<br /><br />zakładając że w zmiennej kanał będziesz miał wartości od 0 do 7 możesz w ten sposób prawidłowo przełączać się pomiędzy kanałami. Bo chyba tutaj coś ci nie wychodzi prawda ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 31 sie 2012, o 23:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tomiplis]]></name></author>
<updated>2012-08-31T23:15:14+01:00</updated>
<published>2012-08-31T23:15:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14194#p14194</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14194#p14194"/>
<title type="html"><![CDATA[Atmega8 dwa kanały ADC – problem z wartością ADCW]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1491&amp;p=14194#p14194"><![CDATA[
Witam.<br /><br />Z racji tego, że jest to mój pierwszy post na forum chciałem wszystkich serdecznie przywitać.<br /><br />Ponieważ stawiam pierwsze kroki w programowaniu proszę o wyrozumiałość  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  Dość późno zafascynował mnie  świat  programowania i elektroniki więc mam bardzo dużo do nadgonienia  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Jestem po lekturze (kilkukrotnej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  ) książki Pana Mirka i jest to w moim odczuciu najprzyjaźniej napisany „poradnik” jaki miałem okazję studiować i jeden z lepszych prezentów które sobie wybrałem (bo znałem Mikołaja  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  )<br /><br />Wracając do sedna postu, mam pytanie odnośnie zmiany kanałów ADC (atmega8) w trybie pojedynczego odczytu. Prowadzę pracę nad mini komputerem do autka i napotkałem na problem z brakiem zmiany wartości w rejestrze ADCW. Pierwotnie robiłem w jednym przejściu funkcji (co 200ms) odczyty jeden po drugim i zawsze uzyskiwałem wartość pierwszego odczytu która była przypisywana do zmiennej ADC_LED i DISP_NAPIECIE . Po kilkugodzinnej walce doszedłem do poprawnego odczytu, lecz robię to w sposób „łopatologiczny” wykonując dwa odczyty z każdego kanału z czego tylko drugi jest przypisywany do zmiennej. Wszystko działa, jest napięcie a fotorezystor reaguje i zmniejsza podświetlenie, ale nurtuje mnie pytanie dlaczego pierwszy odczyt po zmianie kanału nie jest wpisywany do ADCW a dopiero drugi. Zapewne jest to gdzieś zapisane w PDF, lecz nie udało mi się tego odnaleźć.  Kombinowałem z flagą ADIF ale to też nie przynosiło skutku, dawałem _delay pomiędzy odczyty.  Zrobiłem też całkowite wyłączanie i ponowną inicjacje ADC pomiędzy odczytami, skutkowało to tylko problemami z multipleksowaniem wyświetlacza a wynik był z pierwszego odczytu w dwóch zmiennych.<br />Szukałem podobnego problemu na forum i nie udało mi się odnaleźć.<br /><br />Kod jest trochę zaśmiecony bo ciągle cos dopisuję i kasuję  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  W takiej postaci działa poprawnie.<br />[syntax=c]void przelicz(){<br />//****************napiecie***********************************************<br /><br />static uint8_t adc_nr;<br />static uint8_t flagaadc;<br />static uint8_t flagaadc2;<br /><br />if(adc_nr&lt;2){<br />ADMUX |=(1&lt;&lt;MUX0);     //ADC<br />ADCSRA |= (1&lt;&lt;ADSC);            //odczyt ADC<br />while( !(ADCSRA &amp; (1&lt;&lt;ADSC)) );<br />//while( (ADCSRA &amp; (1&lt;&lt;ADIF)) );<br />if(flagaadc){<br />ADC_LED=ADCW;<br />}<br />flagaadc++;<br />flagaadc2=0;<br />}<br />else{<br />ADMUX &amp;=~(1&lt;&lt;MUX0);<br />static uint8_t srednia[10]={0,0,0,0,0,0,0,0,0,0}; //adc<br />static uint8_t n, s;<br />uint16_t wynik1=0;<br />ADCSRA |= (1&lt;&lt;ADSC);            //odczyt ADC<br />while( !(ADCSRA &amp; (1&lt;&lt;ADSC)) );<br />//while( (ADCSRA &amp; (1&lt;&lt;ADIF)) );<br />if(flagaadc2){<br />DISP_NAPIECIE = (ADCW*1206UL*13)/100000UL; //obliczenie napiecia dzielnik 13<br />srednia[n]=DISP_NAPIECIE;   // srednia 10 pomiarow<br />for(uint8_t i=0;i&lt;10;i++){<br />wynik1=wynik1+srednia[i];<br />}<br />n++;<br />if(n&gt;9)n=0,s=1;<br />if(s)DISP_NAPIECIE=wynik1/10;  // po 10 pomiarach usrednianie<br />}<br />flagaadc2++;<br />flagaadc=0;<br />}<br />++adc_nr;<br />if(adc_nr&gt;3)adc_nr=0;<br /><br />//**************predkosc*******************************************************[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=538">Tomiplis</a> — 31 sie 2012, o 23:15</p><hr />
]]></content>
</entry>
</feed>