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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-11-24T12:19:53+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=4896&amp;mode</id>
<entry>
<author><name><![CDATA[jark]]></name></author>
<updated>2013-11-24T12:19:53+01:00</updated>
<published>2013-11-24T12:19:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58359#p58359</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58359#p58359"/>
<title type="html"><![CDATA[Re: Brak reakcji na zmiany sygnału wejścia analogowego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58359#p58359"><![CDATA[
<div class="quotetitle">matej1410 napisał(a):</div><div class="quotecontent"><br />skoro to wyżej to jest uruchomienie pojedynczego pomiaru, to czy trzeba stosować tą linijkę niżej? Skoro to się wykonuję tylko raz i koniec to trzeba tą drugą dodawać?<br /></div><br />Trzeba poniewaz wpisanie 1 do ADSC tylko uruchamia pomiar a trwa on pewien czas. Zgodnie z nota atmegi do momentu aż pomiar nie zostanie skończony ADSC jest 1 a po zakończeniu pomiaru ustawiany jest na 0 i to jest oznaką poprawnego zakończenia przetwarzania. To właśnie się sprawdza w tej pętli while. Bez niej uruchamiasz pomiar i od razu odczytujesz rejestr ADC więc mogą tam być przypadkowe wartości nie związane z tym co jest na wejściu ADC.<br />Pozdrawiam<br />JArek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=582">jark</a> — 24 lis 2013, o 12:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matej1410]]></name></author>
<updated>2013-11-24T12:13:04+01:00</updated>
<published>2013-11-24T12:13:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58358#p58358</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58358#p58358"/>
<title type="html"><![CDATA[Re: Brak reakcji na zmiany sygnału wejścia analogowego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58358#p58358"><![CDATA[
[syntax=c]ADCSRA |= (1&lt;&lt;ADSC); //ADSC:[/syntax] <br /><br />skoro to wyżej  to jest uruchomienie pojedynczego pomiaru, to czy trzeba stosować tą linijkę niżej? Skoro to się wykonuję tylko raz i koniec to trzeba tą drugą dodawać?<br /><br /> [syntax=c]while(ADCSRA &amp; (1&lt;&lt;ADSC)); //czeka na zakończenie konwersji[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1912">matej1410</a> — 24 lis 2013, o 12:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jark]]></name></author>
<updated>2013-11-24T12:02:46+01:00</updated>
<published>2013-11-24T12:02:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58355#p58355</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58355#p58355"/>
<title type="html"><![CDATA[Re: Brak reakcji na zmiany sygnału wejścia analogowego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58355#p58355"><![CDATA[
Oczekiwanie na pomiar jest teraz ok ale czemu znowu zmieniłeś tą linię:<br /><br /><div class="quotetitle">matej1410 napisał(a):</div><div class="quotecontent"><br />PORTB ^=(1&lt;&lt;PB0);<br /></div><br />Wczesniej juz przeciez pisalem, że zerowanie bitu to:<br />PORTB &amp; =~(1&lt;&lt;PB0)<br />Pozdrawiam<br />Jarek<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br /><div class="quotetitle">matej1410 napisał(a):</div><div class="quotecontent"><br />a może być tak, że jednocześnie nie będzie chciało działać PWM i ADC?<br /></div><br />Używasz PC5 więc co najwyżej nie działało by Ci sprzętowe I2C - PWM powinien działać.<br />pozdrawiam<br />Jarek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=582">jark</a> — 24 lis 2013, o 12:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matej1410]]></name></author>
<updated>2013-11-24T11:36:32+01:00</updated>
<published>2013-11-24T11:36:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58349#p58349</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58349#p58349"/>
<title type="html"><![CDATA[Re: Brak reakcji na zmiany sygnału wejścia analogowego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58349#p58349"><![CDATA[
dziękuję za odpowiedź.<br /><br />Czyli ma być tak?<br />[syntax=c]ADCSRA |= (1&lt;&lt;ADSC);<br /> while( ADCSRA &amp; (1&lt;&lt;ADSC) );<br /><br />       if(ADC&lt;=50)<br />         {<br />        PORTB |= (1&lt;&lt;PB0);<br />         }<br />       if(ADC&gt;50)<br />        {<br />      PORTB ^=(1&lt;&lt;PB0);<br /><br />        }[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br />a może być tak, że jednocześnie nie będzie chciało działać PWM i ADC?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1912">matej1410</a> — 24 lis 2013, o 11:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jark]]></name></author>
<updated>2013-11-24T01:13:16+01:00</updated>
<published>2013-11-24T01:13:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58337#p58337</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58337#p58337"/>
<title type="html"><![CDATA[Re: Brak reakcji na zmiany sygnału wejścia analogowego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58337#p58337"><![CDATA[
Pod względem kasowania czy ustawiania bitu PB0 jest OK. Z tego co napisałeś to wynika że nie znasz tak na prawdę wartości ADC w Twoim programie a odczytujesz wartość na wejściu w innym być może różniącym się trochę od tego co pokazałeś.<br />Jeśli masz możliwość np. wyrzucenia wartości ADC w pokazanym programie np. na LCD to będziesz mógł sprawdzić czy rzeczywiście wartości Ci się zmieniają. Zauważyłem jeszcze, że używasz trybu pojedynczego pomiaru ale nie czekasz na jego zakończenie i być może tu tkwi problem.Wstaw po<br />ADCSRA |= (1&lt;&lt;ADSC);<br />oczekiwanie na zakończenie konwersji czyli to:<br /><br />while( ADCSRA &amp; (1&lt;&lt;ADSC) );<br /><br />a dopiero sprawdzaj wartość ADC<br />Pozdrawiam<br />Jarek<br /><br />ps.<br />To powyżej dotyczy meritum a co do pozostałych poruszanych zagadnień mówiąc o pętli nieskończonej miałem na myśli pętlę dla całego programu. W Twoim przypadku program się kończy i tylko reset spowoduje że znowu zacznie działać. Jeśli spełnia to Twoje oczekiwania to ok ale generalnie czegoś takiego się nie robi. Wszystko to co robisz można zrobić w nieskończonej pętli używając timerów programowych i flag. Nieskończona pętla nie oznacz też że np. pomiar ADC będzie się wykonywał cały czas - przecież można go włączać/wyłączać w zależności od stanu programu np. gdy jest cykl prania adc się wykonuje, gdy inny stan przetwornik jest zatrzymany. Nie da się tak tego opisać w paru zdaniach niestety.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=582">jark</a> — 24 lis 2013, o 01:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matej1410]]></name></author>
<updated>2013-11-24T00:26:23+01:00</updated>
<published>2013-11-24T00:26:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58334#p58334</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58334#p58334"/>
<title type="html"><![CDATA[Re: Brak reakcji na zmiany sygnału wejścia analogowego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58334#p58334"><![CDATA[
Tak to prawda, w pętli k. Jest to zamierzone. Ale przecież w skończonej pętli też będą się odbywały pomiary, tak? a może się mylę?<br />Bo co zrobić jak chcemy, żeby wartość ADC była mierzona tylko w jednej części programu? Nie możemy dać nieskończonej pętli ponieważ pomiar się nie skończy a zależy nam na tym żeby w końcu już nie mierzył. Odnośnie podglądania wartości to przełączam się na inny program który napisałem i sprawdzam czy czujnik zmienia wartość ADC, i zmienia. Robię to jednak w obrębie innego programu i tylko po to, żeby sprawdzić czy czujnik działa.<br /><br />Co do idei działania programu to jest to programator do pralki.<br />Jak widzisz pętla k ma w sobie dwa &quot;ify&quot; które sprawdzają parzystość liczby k. Jesli liczba k jest parzysta to silnik pralki kręci w lewo, jesli nieparzysta w prawo. Poniżej pętla ze zmiennymi q oraz e to pętla płukania czyli silnik obraca się w jedną stronę z przerwami. ostatnia pętla to pętla wirowania.<br />Wracając do tej wartości ADC to chciałbym aby wartość adc była sczytywana w petli k tylko i wyłącznie.<br />Może być nawet tak, że to adc może się wykonać pomiedzy pętlą for nr 1 oraz 2 w tym programie i koniec lub wykonywać się cyklicznie w pętli k co jest odpowiednikiem tego, że woda podgrzeje się raz na całe pranie i koniec lub podgrzewać się cyklicznie z przerwaniami w pętli k.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1912">matej1410</a> — 24 lis 2013, o 00:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jark]]></name></author>
<updated>2013-11-24T00:08:44+01:00</updated>
<published>2013-11-24T00:08:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58332#p58332</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58332#p58332"/>
<title type="html"><![CDATA[Re: Brak reakcji na zmiany sygnału wejścia analogowego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58332#p58332"><![CDATA[
Rzuciłem okiem na resztę programu i tak nie do końca jestem pewien czy dobrze rozumiem ale te zmiany na PB0 odbywają się w pętli<br />  for(int k=1; k&lt;=p; k++)<br />która wykona się tylko &quot;&lt;=p&quot; razy i więcej nie więc później zmiany na PB0 nie będą się dokonywać mimo zman odczytu na ADC.<br />Program w ogóle wygląda jakby miał się tylko jeden raz wykonać (w sensie że nie ma nieskończonej pętli).<br />Może opisz dokładniej co on ma robić do będzie łatwiej pomóc. Pisałeś też że widzisz zmiany wartości ADC - jak je odczytujesz?<br />Pozdrawiam<br />Jarek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=582">jark</a> — 24 lis 2013, o 00:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matej1410]]></name></author>
<updated>2013-11-23T23:22:34+01:00</updated>
<published>2013-11-23T23:22:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58327#p58327</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58327#p58327"/>
<title type="html"><![CDATA[Re: Brak reakcji na zmiany sygnału wejścia analogowego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58327#p58327"><![CDATA[
zmieniłem kod:<br /><br />[syntax=c]ADCSRA |= (1&lt;&lt;ADSC);<br /><br />       if(ADC&lt;=160)<br />         {<br />        PORTB |= (1&lt;&lt;PB0);<br />         }<br />       if(ADC&gt;160)<br />        {<br />      PORTB &amp;=~(1&lt;&lt;PB0);<br /><br />        }[/syntax]<br />teraz się ładnie wyłącza, ale niestety nie włącza się ponownie...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1912">matej1410</a> — 23 lis 2013, o 23:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jark]]></name></author>
<updated>2013-11-23T23:02:01+01:00</updated>
<published>2013-11-23T23:02:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58326#p58326</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58326#p58326"/>
<title type="html"><![CDATA[Re: Brak reakcji na zmiany sygnału wejścia analogowego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58326#p58326"><![CDATA[
<div class="quotetitle">matej1410 napisał(a):</div><div class="quotecontent"><br />PORTB |= (0&lt;&lt;PB0);<br /> <br /><br />.<br /></div><br />Robisz OR z 0 więc jak była jedynka na tym bicie to OR 1 z 0 da już zawsze 1.<br />Musisz tu wyzerować bit czyli <br />PORTB &amp; =~(1&lt;&lt;PB0)<br /><br />Pozdrawiam<br />Jarek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=582">jark</a> — 23 lis 2013, o 23:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matej1410]]></name></author>
<updated>2013-11-23T22:44:14+01:00</updated>
<published>2013-11-23T22:44:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58325#p58325</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58325#p58325"/>
<title type="html"><![CDATA[Brak reakcji na zmiany sygnału wejścia analogowego]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4896&amp;p=58325#p58325"><![CDATA[
[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdlib.h&gt;<br />#define ADCIN PC5   //definicja ADCIN (wejście ADC)<br />int main(void)<br />{<br />   // Konfiguracja portów we/wy<br />   DDRB  = 0xff;                         //ustalenie całego portu B jako portu WYJŚCIOWEGO (1&lt;&lt;2)|(1&lt;&lt;1); OC1A i OC1B  wyjścia PWM<br />   DDRC  = 0x00;     //ustalenie całego portu C jako portu WEJŚCIOWEGO<br />   PORTC = 0xff;   //podciągniecie do VCC<br />   DDRD  = 0x00;  //ustalenie całego portu D jako portu WEJŚCIOWEGO<br />   PORTD = 0xff;     //podciągniecie do VCC<br /><br />   ICR1  = 2000;<br />   OCR1A = 0;<br />   OCR1B = 0;<br /><br />    ADCSRA =   (1&lt;&lt;ADEN) //ADEN: ADC Enable (uruchomienie przetwornika)<br />       |(1&lt;&lt;ADPS2);//ustawienie preskalera, preskaler= 16<br /><br /> ADMUX  =   (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0) //Internal 2.56V Voltage Reference with external capacitor at AREF pin<br />           |(1&lt;&lt;MUX2) | (1&lt;&lt;MUX0); //Input Channel Selections (ADC5 - Pin 5 )<br /><br /><br />  TCCR1A=(1&lt;&lt;COM1A1)|(1&lt;&lt;COM1B1)|(1&lt;&lt;WGM11); // Fast PWM mode, str. 89  atmega8 datasheet<br />  TCCR1B=(1&lt;&lt;WGM13)|(1&lt;WGM12)|(1&lt;&lt;CS10);<br />  int p= 0;                 //liczba cykli pranica<br />  int t= 0;                //temperatura nastawy<br />  int e= 0;               //cykle płukania<br /><br />  for (int a=0; a&lt;1; a++) //pela inicjująca wybór programu<br />  {<br />  _delay_ms(1);<br />     if(!(PIND &amp; 0x01)) p=6, t= 100, e=5;                  //PD0<br />          _delay_ms(1);<br />     if(!(PIND &amp; 0x02)) p=10, t= 120, e=12;   //PD1<br />            _delay_ms(1);<br />     if(!(PIND &amp; 0x04)) p=12, t= 170, e=14;                //PD2<br />          _delay_ms(1);<br />     if(!(PIND &amp; 0x08)) p=14, t= 200, e=16;                //PD3<br />          _delay_ms(1);<br />     if(!(PIND &amp; 0x10)) p=16, t= 100, e=18;                //PD4<br />         _delay_ms(1);<br />     if(!(PIND &amp; 0x20)) p=18, t= 145, e=20;                //PD5<br />          _delay_ms(1);<br />     if(!(PIND &amp; 0x40)) p=20, t= 100, e=22;                //PD6<br />          _delay_ms(1);<br />     if(!(PIND &amp; 0x80)) p=22, t= 120, e=10;                //PD7<br />            _delay_ms(1);<br />     if(!(PINC &amp; 0x01)) p=1, t= 10,   e=20;                //PC0 plukanie<br />            _delay_ms(1);<br />     if(!(PINC &amp; 0x02)) p=1, t= 10,   e=1;                 //PC1 wirowanie<br />            _delay_ms(1);<br />     if(!(PINC &amp; 0x02)) p=1, t= 10,   e=1;                 //PC1 wirowanie<br />            _delay_ms(1);<br />}<br /><br /><br />for(int k=1; k&lt;=p; k++)<br />   {<br /><br /><br />//for(int y=1; y&lt;=2; y++)<br />//   {<br />//if(!(PINC &amp; 0x10)) ;<br />//   }<br /><br /><br />if(k % 2 == 0)<br />{<br /><br /> PORTB= PORTB+0x20;<br /> for(int i=0;i&lt;=10;i++)<br />     {<br /><br />       OCR1B=i;<br />       _delay_ms(2);<br />     }<br />     _delay_ms(12000);<br />     OCR1B=0;<br /><br />     _delay_ms(4000);<br />     PORTB= PORTB-0x20;<br /><br /><br /><br />}<br /><br />if(k % 2 != 0)<br />{<br />for(int i=0;i&lt;=10;i++)<br />     {<br />       OCR1B=i;<br />       _delay_ms(2);<br />     }<br />     _delay_ms(12000);<br />     OCR1B=0;<br />     _delay_ms(4000);<br /><br /><br />}<br /><br /><br />ADCSRA |= (1&lt;&lt;ADSC);<br />           if(ADC&lt;=100)<br />             {<br />            PORTB |= (1&lt;&lt;PB0);<br />             }<br />           if(ADC&gt;100)<br />            {<br />           PORTB |= (0&lt;&lt;PB0);<br />            }<br /><br />   }<br /><br />for(int q=1; q&lt;=e; q++)<br />         {<br />          for(int i=0;i&lt;=10;i++)<br />         {<br />          OCR1B=i;<br />          _delay_ms(2);<br />         }<br />             _delay_ms(12000);<br />             OCR1B=0;<br />             _delay_ms(4000);<br />         }<br /><br /><br />          for(int i=0;i&lt;=1900;i++)<br />         {<br />          OCR1B=i;<br />          _delay_ms(25);<br />         }<br />             _delay_ms(10000);<br />            _delay_ms(10000);<br />             OCR1B=0;<br />             _delay_ms(4000);<br /><br /><br />}[/syntax]<br /><br />Witam serdecznie Forumowiczów.<br />Mam problem z powyższym programem w tym miejscu:<br />[syntax=c]ADCSRA |= (1&lt;&lt;ADSC);<br />           if(ADC&lt;=100)<br />             {<br />            PORTB |= (1&lt;&lt;PB0);<br />             }<br />           if(ADC&gt;100)<br />            {<br />           PORTB |= (0&lt;&lt;PB0);<br />            }[/syntax]<br /><br />na PB0 mam cały czas jedynkę a  wartość ADC zmienia się w zakresie 80-150, więc powinno się na PB0 pojawić 0 w pewnym momencie.<br />Proszę o cenną sugestię.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1912">matej1410</a> — 23 lis 2013, o 22:44</p><hr />
]]></content>
</entry>
</feed>