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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-09-13T20:12:18+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1534&amp;mode</id>
<entry>
<author><name><![CDATA[szopler]]></name></author>
<updated>2012-09-13T20:12:18+01:00</updated>
<published>2012-09-13T20:12:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15077#p15077</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15077#p15077"/>
<title type="html"><![CDATA[Re: Problematyczny pomiar ADC na dwóch kanałach...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15077#p15077"><![CDATA[
Zrobiłem to o czym napisałem w <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic1534.html#p15068" >topic1534.html#p15068</a><!-- l --> i już widzę znaczącą poprawę.<br /><br />PS.<br />Pomiar ADC opanowany.<br />Trzeba jeszcze komparator ruszyć - zabezpieczenie przed przeciążeniem tranzystora sterującego trafem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=82">szopler</a> — 13 wrz 2012, o 20:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-09-13T19:29:43+01:00</updated>
<published>2012-09-13T19:29:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15072#p15072</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15072#p15072"/>
<title type="html"><![CDATA[Re: Problematyczny pomiar ADC na dwóch kanałach...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15072#p15072"><![CDATA[
Hmmm poszukaj w nocie  tabelki ADC Prescaler Sections .<br />co ciekawe podczas doboru częstotliwości taktowania ADC zauważysz lub zauważyłeś że wartości częstotliwości próbkowania są mocno niewygodne, w efekcie czego będziesz musiał się nieco pobawić, albo dobierając odpowiedni<br />kwarc , albo użyć timera.<br /><br />choćby np tak  <br /><br />[syntax=c]<br /> TIMSK |= (1&lt;&lt;TOIE0) | (1&lt;&lt;TOIE1); // irq overflow timera  <br /> TCCR0 |= (1&lt;&lt;CS01); //  CLK, preskaler 8 (2000000 Hz)  <br /> TCNT0 = 155; // wartość startowa licznika   <br />  <br /> DDRC &amp;=~ (1&lt;&lt;ADCIN);  <br /><br />[/syntax]<br /><br />dla oczywiście ADC w trybie freeRun zakładam próbkowanie 20Ksps<br /><br />[syntax=c]<br />ADCSRA = (1&lt;&lt;ADEN)      // ADC Enable <br />          |(1&lt;&lt;ADFR)       //Free run  <br />          |(1&lt;&lt;ADSC)      //start konwersji <br />          |(1&lt;&lt;ADPS2);   //ADPS2: preskaler= 16  <br />  <br /> ADMUX  = (1&lt;&lt;ADLAR)    //wynik do lewej  <br />          |(1&lt;&lt;REFS0)        //VCC = ARef  <br />          |(1&lt;&lt;MUX2) | (1&lt;&lt;MUX0);   //wejście  ADC5<br /><br />[/syntax]<br /><br /> ale nie mam pojęcia czy słusznie rozumuje ....<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 13 wrz 2012, o 19:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szopler]]></name></author>
<updated>2012-09-13T19:35:39+01:00</updated>
<published>2012-09-13T19:12:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15068#p15068</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15068#p15068"/>
<title type="html"><![CDATA[Re: Problematyczny pomiar ADC na dwóch kanałach...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15068#p15068"><![CDATA[
12000000/64 = 187500 i tak mam ustawione <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> przy /128 też o dziwo był &quot;zwis&quot;.<br />Nie bardzo widzę gdzie się wybiera rozdzielczość, ale ADC6 i ADC7 chyba są 10bit na sztywno (te piny nie mają w tym uP innych funkcji jak tylko ADC).<br /><br />Zmieniam częstotliwość sprawdzania napięcia przetwornicy z 10kHz na 1kHz - tak było na płytce testowej i działało dobrze. Nie ma sensu gonić procka tym bardziej, że jeszcze parsowanie danych z GPS i zapis na kartę go czeka... <img src="https://forum.atnel.pl/images/smilies/icon_e_ugeek.gif" alt=":ugeek:" title="Świr, i to jaki!" /><br /><br />No i widzę jeszcze jedną głupotę jaką zrobiłem - sterowanie przetwornicą w przerwaniu... zaraz to zrzucam do zdarzenia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=82">szopler</a> — 13 wrz 2012, o 19:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-09-13T18:36:06+01:00</updated>
<published>2012-09-13T18:36:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15066#p15066</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15066#p15066"/>
<title type="html"><![CDATA[Re: Problematyczny pomiar ADC na dwóch kanałach...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15066#p15066"><![CDATA[
to ciekawe w sumie ...  <br />co piszesz możliwe że coś ci się procek nie wyrabia , ADC masz na 8 czy na 10bit ??<br /><br /><br />niby nota mówi że czas konwersji mieści się w zakresie 13 - 250ms<br />i maxymalnie daje radę wydusić 15kSPS<br /><br />chyba że coś jawnie przeoczam ??<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br />powiedzmy że przy 10 bitach możesz taktować ADC nie więcej niż 200khz <br />i musisz pogrzebać teraz w tabeli w nocie by ustalić sobie preskaler na bitach ADSPn  by uzyskać najbliższą<br />możliwą zbliżoną do 200khz lub innej żądanej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 13 wrz 2012, o 18:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szopler]]></name></author>
<updated>2012-09-13T18:00:16+01:00</updated>
<published>2012-09-13T18:00:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15065#p15065</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15065#p15065"/>
<title type="html"><![CDATA[Re: Problematyczny pomiar ADC na dwóch kanałach...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15065#p15065"><![CDATA[
I chwała za to, bo czasem człowiek się blokuje na jakimś fragmencie kodu tylko dlatego że czegoś nie widzi albo nie do końca rozumie jak to działa...<br /><br />FreeRuning mode jak widziałem włącza się za pomocą sbi(ADCSRA, ADATE); lub jak kto woli: ADCSRA |= (1&lt;&lt;ADATE);<br />Niestety po włączeniu objawy jak napisałem wyżej...<br /><br />Nie do końca rozumiem też wpływ ADPSn w tym rejestrze na szybkość pomiaru...<br />np. przy podziale 12M/128 procesor jakby nie nadążał, podobnie dla wartości /2 i chyba /4. Pośrednie tzn. /8 /16 /32 /64 jakoś działają.<br /><br />Ciekawie jest również gdy zmniejszę prędkość UART'a z 57600 na 9600. Są momenty gdzie wyraźnie widać (choćby po LED, ale w terminalu też), że następuje chwilowe przeciążenie... LED raz na ileś mignięć ma około 2x dłuższą przerwę niż powinien.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=82">szopler</a> — 13 wrz 2012, o 18:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-09-13T17:51:43+01:00</updated>
<published>2012-09-13T17:51:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15064#p15064</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15064#p15064"/>
<title type="html"><![CDATA[Re: Problematyczny pomiar ADC na dwóch kanałach...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15064#p15064"><![CDATA[
oczywiście zgadzam się z tym , bo teraz kod analizuję , choć dziś coś nie mam głowy do myślenia <br />niemniej staram się pomóc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 13 wrz 2012, o 17:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szopler]]></name></author>
<updated>2012-09-13T18:04:07+01:00</updated>
<published>2012-09-13T17:47:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15063#p15063</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15063#p15063"/>
<title type="html"><![CDATA[Re: Problematyczny pomiar ADC na dwóch kanałach...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15063#p15063"><![CDATA[
<div class="quotetitle">SunRiver napisał(a):</div><div class="quotecontent"><br />Hmm, a jak sterujesz pomiarem ??<br />na początek sugerował bym Freeruning mode , wyzwalaj ręcznie wtedy kiedy jest to potrzebne <br />szumy jakieś wystąpią zawsze nasze ADC nie jest specjalnie dokładne , ale w większości przypadków starcza  do zabawy...<br /><br />Niemniej takie wahania mogą wskazywać na 2 problemy <br /><br />1. Programowy  --- Kanały nie pracują jednocześnie i trzeba je przełączać <br />2. Sprzętowy  --- dokładność ADC nie wynika tylko z niego samego , ale tez przede wszystkim ze sposobu podłączenia. I tu chyba masz problem.<br /></div><br />Jak widać w załączonym kodzie steruję ręcznie. FreeRunning powoduje jedno - przez RS232 nic nie leci, a dioda która dodatkowo pokazuje mi że &quot;program żyje&quot; nie zmienia stanu.<br />Co do tego, że zabudowany ADC wystarcza do zabawy się nie zgodzę. Przetwornica napięcia zbudowana na procesorze (PWM + ADC) działa o niebo lepiej niż FlyBack na układzie MC34063!<br /><br /><div class="quotetitle">SunRiver napisał(a):</div><div class="quotecontent"><br />Zobacz sobie do noty  jakie parametry ma określone AVCC  -- zwykle może się różnić o ±0,3V od VCC. Jednakże pod tabelką w nocie jest dodatkowe zastrzeżenie, że AVcc nie może być mniejsze niż 2,7V, i większe niż 5,5V.<br /><br />Sprawdź AREF ...  zwykle jest powiązane z AVCC i nie może go przekroczyć , a dolna granica zwykle to 2V<br />czyli nie tak kolorowo i nie za bardzo możesz sobie AREF mieszać<br /><br />Jeśli korzystasz z wbudowanego źródła odniesienia Vint 2,56V to też miej na uwadze że w zależności od układu , partii układów może się ono znacznie różnić od 2,56V -- typowo może się wahać od 2.3 do 2.9V  najczęściej 2.6V<br />zresztą w nocie znajdziesz dopisek że wartości Vint są tylko wytycznymi --- cokolwiek to znaczy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />kolejny parametr ważny to Vin  tu sprawa jest prosta ...  napięcie powinno być mierzone względem GND do Vref<br /><br />na razie sprawdź podłączenia i filtrowanie , oraz sposób wyzwalania pomiarów na kanałach ADC <br />potem zajmiemy się resztą <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br /><br />Napięcie odniesienia 1.098V - zmierzone.<br />AREF do masy przez 100n jak należy. Do tego 100n na AVCC i drugie 100n na VCC. Dławika na AVCC już nie dawałem bo nie ma sensu skoro pozostałe piny PortC działają jako cyfrowe.<br />Procka do pomiaru też nie usypiam bo ma ważniejsze zadania do wykonania niż pomiar. Z resztą przerwania zewnętrzne w zbyt wielu przypadkach i tak by go budziły zanim pomiar by się zakończył...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=82">szopler</a> — 13 wrz 2012, o 17:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-09-13T17:30:20+01:00</updated>
<published>2012-09-13T17:30:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15062#p15062</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15062#p15062"/>
<title type="html"><![CDATA[Re: Problematyczny pomiar ADC na dwóch kanałach...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15062#p15062"><![CDATA[
Hmm, a jak sterujesz pomiarem ??<br />na początek sugerował bym Freeruning mode , wyzwalaj ręcznie wtedy kiedy jest to potrzebne <br />szumy jakieś wystąpią zawsze nasze ADC nie jest specjalnie dokładne , ale w większości przypadków starcza <br />do zabawy...<br /><br />Niemniej takie wahania mogą wskazywać na 2 problemy <br /><br />1. Programowy  --- Kanały nie pracują jednocześnie i trzeba je przełączać <br />2. Sprzętowy  --- dokładność ADC nie wynika tylko z niego samego , ale tez przede wszystkim ze sposobu<br />podłączenia. I tu chyba masz problem.<br /><br />Zobacz sobie do noty  jakie parametry ma określone AVCC  -- zwykle może się różnić o ±0,3V od VCC. Jednakże pod tabelką w nocie jest dodatkowe zastrzeżenie, że AVcc nie może być mniejsze niż 2,7V, i większe niż 5,5V.<br /><br />Sprawdź AREF ...  zwykle jest powiązane z AVCC i nie może go przekroczyć , a dolna granica zwykle to 2V<br />czyli nie tak kolorowo i nie za bardzo możesz sobie AREF mieszać<br /><br />Jeśli korzystasz z wbudowanego źródła odniesienia Vint 2,56V to też miej na uwadze że w zależności od układu , partii układów może się ono znacznie różnić od 2,56V -- typowo może się wahać od 2.3 do 2.9V  najczęściej 2.6V<br />zresztą w nocie znajdziesz dopisek że wartości Vint są tylko wytycznymi --- cokolwiek to znaczy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />kolejny parametr ważny to Vin  tu sprawa jest prosta ...  napięcie powinno być mierzone względem GND do Vref<br /><br />na razie sprawdź podłączenia i filtrowanie , oraz sposób wyzwalania pomiarów na kanałach ADC <br />potem zajmiemy się resztą <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 13 wrz 2012, o 17:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szopler]]></name></author>
<updated>2012-09-13T17:18:45+01:00</updated>
<published>2012-09-13T17:18:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15061#p15061</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15061#p15061"/>
<title type="html"><![CDATA[Re: Problematyczny pomiar ADC na dwóch kanałach...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15061#p15061"><![CDATA[
Dzięki Mirku... nie wiem jak mi się to przemyciło skoro skopiowałem ze swojego kodu który (jak mi się wydawało) był już poprawiony... :/<br /><br />Zastanawia mnie jeszcze jedna sprawa... czas konwersji podany w dokumentacji 13-260us.<br />Czy wywoływanie pomiaru ADC co 100us nie zrobi mi w końcu &quot;kuku&quot;?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=82">szopler</a> — 13 wrz 2012, o 17:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-13T17:12:11+01:00</updated>
<published>2012-09-13T17:12:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15060#p15060</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15060#p15060"/>
<title type="html"><![CDATA[Re: Problematyczny pomiar ADC na dwóch kanałach...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15060#p15060"><![CDATA[
<div class="codetitle"><b>Code:</b></div><div class="codecontent">ADMUX |= (ADMUX &amp; 0b11100000) | kanal; </div><br /><br />zobacz i poczytaj sobie tutaj:<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/uaktualnienia-programow-do-dvd.html" >http://atnel.pl/uaktualnienia-programow-do-dvd.html</a><!-- m --><br /><br />a jest tam link do naszego forum:<br /><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/post13633.html#p13633" >post13633.html#p13633</a><!-- l --><br /><br />to właśnie pewnie tu masz problem - więc zaglądaj czasem na stronę atnela do aktualizacji i artykułów ok?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 13 wrz 2012, o 17:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szopler]]></name></author>
<updated>2012-09-13T17:23:47+01:00</updated>
<published>2012-09-13T17:03:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15059#p15059</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15059#p15059"/>
<title type="html"><![CDATA[Problematyczny pomiar ADC na dwóch kanałach...]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1534&amp;p=15059#p15059"><![CDATA[
Procesor: ATMega168PA<br />F_CPU = 12 000 000<br />[syntax=c]<br />/* Dolaczenia plikow */<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &quot;MK_USART/mkuart.h&quot;<br /><br />/* Definicje makr i uproszczeń */<br />#define sbi(byte,bit) byte |=  (1&lt;&lt;bit)<br />#define cbi(byte,bit) byte &amp;= ~(1&lt;&lt;bit)<br />#define bit(byte,n) (byte&gt;&gt;n)&amp;1<br />#define _Set1<br />#define _Rst0<br />#define PWM_RegisterOCR0B<br />#define PWM_Value 64<br /><br />typedef uint8_tu08;<br />typedef uint16_tu16;<br />typedef uint32_tu32;<br />typedef struct pulse {<br />    u08 A;<br />    u08 B;<br />    u08 C;<br />    u08 D;<br />} pulse;<br /><br />/* Deklaracje zmiennych */<br />struct _FLAGA {<br />    u08CheckPort:1;<br />    u08SerialSend:1;<br />} _FLAGA;<br /><br />volatile pulsePULSE;<br />charRS232_String[32];<br />volatile u16ADC_Value;<br />volatile u16Pomiar_HV;<br />volatile u16Pomiar_BAT;<br />volatile unsigned charstan_portu, poprzedni_stan;<br />volatile u16 Timer_1s, Timer_1m;<br /><br />/* Deklaracje funkcji */<br />voidobsluga_pulsow(void);<br />voidobsluga_rs232(void);<br />u16obsluga_adc(u08 kanal);<br />/* .... ---- .... */<br /><br />/* .... INICJALIZACJA .... */<br />void _INIT(void) {<br /><br />    /* Konfiguracja wyjsc sterujących osprzetem */<br />    sbi(DDRD,2);//GPS power control<br />    cbi(PORTD,2);//GPS power on(sbi) / off(cbi)<br /><br />    sbi(DDRB,0);//Red LED control<br />    cbi(PORTB,0);//Red LED on(sbi) / off(cbi)<br /><br />    sbi(DDRB,1);//MMC power control<br />    cbi(PORTB,1);//MMC power on(sbi) / off(cbi)<br /><br />    /* Konfiguracja wejsc impulsow */<br />    cbi(DDRC,0); cbi(DDRC,1); cbi(DDRC,2); cbi(DDRC,3);// C0..C3 jako wejscia<br />    sbi(PORTC,0); sbi(PORTC,1); sbi(PORTC,2); sbi(PORTC,3);// C0..C3 Pullup ON<br /><br />    sbi(PCICR, PCIE1);// Włączenie przerwań od PCINT8 (PC0) do PCINT11 (PC3)<br />    sbi(PCMSK1,PCINT8);// Maska zezwalająca na przerwanie od PC0<br />    sbi(PCMSK1,PCINT9);// Maska zezwalająca na przerwanie od PC1<br />    sbi(PCMSK1,PCINT10);// Maska zezwalająca na przerwanie od PC2<br />    sbi(PCMSK1,PCINT11);// Maska zezwalająca na przerwanie od PC3<br /><br />    /* Konfiguracja przycisku */<br />    cbi(DDRD,3);// PD3 jako wejscie<br />    sbi(PORTD,3);// PD3 Pullup ON<br /><br />    /* Konfiguracja Timer2 jako TIMER - odliczanie czasu na potrzeby systemu */<br />    cbi(TCCR2B, CS22); sbi(TCCR2B, CS21); cbi(TCCR2B, CS20);// Konfiguracja na 12MHz/8 = 1.5MHz<br />    OCR2A = 150; // Compare Interrupt co 150/1.5MHz = 100us (10kHz)<br />    sbi(TIMSK2, OCIE2A);// Włączenie przerwania typu compare od rejestru A<br /><br />    /* Konfiguracja Timer0 jako zrodlo sygnalu PWM */<br />    sbi(DDRD,5);// PD5 jako wyjscie<br />    sbi(TCCR0A,COM0B1); cbi(TCCR0A,COM0B0);// Clear OC0B on Compare Match, set OC0B at BOTTOM<br />    cbi(TCCR0B,WGM02); cbi(TCCR0A,WGM01); sbi(TCCR0A,WGM00);// CCS - Mode 1 (Phase Correct) because of Fpwm<br />    cbi(TCCR0B,CS02); cbi(TCCR0B,CS01); sbi(TCCR0B,CS00);// CCS -&gt; 12MHz/1 = 12MHz /2 (Phase Correct -&gt; Fpwm=22059Hz)<br />    PWM_Register = 0;// PWM 0% na starcie (dodane dla bezpieczenstwa)<br /><br />    /* Konfiguracja ADC */<br />    sbi(ADMUX,REFS1); sbi(ADMUX,REFS0);// Wybor napiecia odniesienia - 1.1V<br />    sbi(ADCSRA,ADPS2); sbi(ADCSRA,ADPS1); cbi(ADCSRA,ADPS0);// Fp=12MHz/64 = 187.5kHz<br />    sbi(ADCSRA,ADEN); // Wlaczenie ADC<br /><br />    /* Konfiguracja RS232 */<br />    USART_Init(57600);<br /><br />    sei();<br />}<br />/* .... ---- .... */<br /><br />/* .... PRZERWANIA .... */<br />ISR(TIMER2_COMPA_vect) // Wywoływane co 0,0001s przy OCR2A = 150<br />{<br />    TCNT2 = 0; // Zerowanie timera<br /><br />    Timer_1s++;<br />    if (Timer_1s &gt;= 10000) {<br />Timer_1s = 0;<br />Timer_1m++;<br />if (Timer_1m == 5) {<br />    ADC_Value = obsluga_adc(6);<br />    Pomiar_BAT = ADC_Value * 76;<br />}<br />if (Timer_1m &gt;= 60) {<br />    Timer_1m = 0;<br />}<br /><br />_FLAGA.SerialSend = _Set;<br />    }<br /><br />    // switching DC/DC control<br />    Pomiar_HV = (94*obsluga_adc(7)) / 100;<br />    if ( Pomiar_HV &lt; 400 ) {<br />PWM_Register = PWM_Value;<br />    } else {<br />PWM_Register = 0;<br />    }<br />}<br /><br />ISR(PCINT1_vect)<br />{<br />    _FLAGA.CheckPort = _Set;<br />}<br />/* .... ---- .... */<br /><br />/* .... FUNKCJE .... */<br />void obsluga_rs232(void) {<br />    if (_FLAGA.SerialSend == _Set) {<br /><br />  //sprintf(RS232_String,&quot;%03d %03d %03d %03d\r\n&quot;, PULSE.A, PULSE.B, PULSE.C, PULSE.D);<br />  sprintf(RS232_String,&quot;HV=%03uV BAT=%05uV ADC=%04u\r\n&quot;, Pomiar_HV, Pomiar_BAT, ADC_Value);<br /><br />  uart_puts(RS232_String);<br />  PORTB ^=(1&lt;&lt;PB0); // Miganie ledem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />    }<br />  _FLAGA.SerialSend = _Rst;<br />}<br /><br />u16 obsluga_adc(u08 kanal) {<br />    ADMUX |= (ADMUX &amp; 0b11100000) | kanal; // ADMUX &amp; maska (zachowaj to co już jest ustawione) i ustaw 4 ostatnie bity - nr kanalu<br />    sbi(ADCSRA,ADSC); // Start konwersji ADC<br />    while (ADCSRA &amp; (1&lt;&lt;ADSC)); // Czekaj na koniec konwersji<br />    return ADCW; // Zwroc wynik konwersji<br />}<br /><br />void obsluga_pulsow(void) {<br />    if (_FLAGA.CheckPort == _Set) {<br />stan_portu = (~(PINC) &amp; 0b00001111);<br /><br />        switch ( (stan_portu ^ poprzedni_stan) &amp; stan_portu ) {<br />case 1: PULSE.A++;break;<br />case 2:PULSE.B++;break;<br />case 3:PULSE.A++; PULSE.B++;break;<br />case 4:PULSE.C++;break;<br />case 5:PULSE.A++; PULSE.C++;break;<br />case 6: PULSE.B++; PULSE.C++;break;<br />case 7:PULSE.A++; PULSE.B++; PULSE.C++;break;<br />case 8:PULSE.D++;break;<br />case 9:PULSE.A++; PULSE.D++;break;<br />case 10:PULSE.B++; PULSE.D++;break;<br />case 11:PULSE.A++; PULSE.B++; PULSE.D++;break;<br />case 12:PULSE.C++; PULSE.D++;break;<br />case 13:PULSE.A++; PULSE.C++; PULSE.D++;break;<br />case 14:PULSE.B++; PULSE.C++; PULSE.D++;break;<br />case 15:PULSE.A++; PULSE.B++; PULSE.C++; PULSE.D++;break;<br />}<br />_FLAGA.CheckPort = _Rst;<br />    }<br />    poprzedni_stan = stan_portu;<br />}<br />/* .... ---- .... */<br /><br />/*.... MAIN .... */<br />int main(void)<br />{<br />    _INIT();<br /><br />for (;;)<br />{<br />    obsluga_pulsow();<br />    obsluga_rs232();<br />}<br />return 0;<br />} // End of main<br /><br />[/syntax]<br />Problem polega na fałszowaniu wyniku pomiaru ADC6 gdy dokonuję także pomiaru na ADC7.<br /><br />Szczegóły - zakomentowanie:<br />[syntax=c]<br />    //Pomiar_HV = (94*obsluga_adc(7)) / 100;<br />[/syntax]<br />I w terminalu widnieje: <div class="codetitle"><b>Code:</b></div><div class="codecontent">HV=000V BAT=53428V ADC=0703</div>, gdzie 5.3428V to napięcie zasilania układu przed stabilizatorem 3.3V.<br />Po odkomentowaniu powyższego, czyli włączeniu pomiaru napięcia przetwornicy: <div class="codetitle"><b>Code:</b></div><div class="codecontent">HV=400V BAT=32452V ADC=0427</div>, pokazuje napięcie przetwornicy 400V - wartość poprawna. Natomiast ADC6 pokazuje wartość zaniżoną mimo, że napięcie zasilania nie zmienia się, a już na pewno nie spada o 2V.<br />Gdzie się ukrywa błąd?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=82">szopler</a> — 13 wrz 2012, o 17:03</p><hr />
]]></content>
</entry>
</feed>