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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-02-24T10:46:14+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=10793&amp;mode</id>
<entry>
<author><name><![CDATA[j23]]></name></author>
<updated>2015-02-24T10:46:14+01:00</updated>
<published>2015-02-24T10:46:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120691#p120691</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120691#p120691"/>
<title type="html"><![CDATA[Re: Problem z adc/ lcd]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120691#p120691"><![CDATA[
Kolego kojot90, a to nie jest tak przypadkiem, że to miganie, brak wyświetlania jest przez to, że z ADC za szybko następuje zmiana wartości i po prostu LCD nie nadąża? Nie wiem, może jakieś dodatkowe opóźnienie zastosować, albo przynajmniej spróbować jak zachowuje się wyświetlacz przy zwiększaniu opóźnienia z odczytu ADC? -tzn. mam na myśli zmniejszenie próbkowania.<br /><br />Pozdrawiam! j23 Jarek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4504">j23</a> — 24 lut 2015, o 10:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kojot90]]></name></author>
<updated>2015-02-24T09:25:41+01:00</updated>
<published>2015-02-24T09:25:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120687#p120687</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120687#p120687"/>
<title type="html"><![CDATA[Re: Problem z adc/ lcd]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120687#p120687"><![CDATA[
<div class="quotetitle">k_lukasik napisał(a):</div><div class="quotecontent"><br />Witam,<br /><br />2. Czy chcesz by dioda migała płynnie z odpowiednią częstotliwością zależną od ADC.<br /></div><br /><br />Tak <br />Buduje sterowany PWM czyli taki generator funkcyjny. <br />w zależnosci od ustawien potencjometru zmienia sie wyjscie OCR1A <br /><br />dlatego musi być tak jak jest.<br /><br />Twoje ustawienia sie prawie niczym nie różnią jedynie korzystasz z wewnętrznego źródła odniesienia.<br /><br /><br />Dalej nie wiem czemu lcd przygasa<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8243">kojot90</a> — 24 lut 2015, o 09:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[k_lukasik]]></name></author>
<updated>2015-02-24T06:18:10+01:00</updated>
<published>2015-02-24T06:18:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120681#p120681</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120681#p120681"/>
<title type="html"><![CDATA[Re: Problem z adc/ lcd]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120681#p120681"><![CDATA[
Witam,<br />Nie wiem co chcesz osiągnąć dokładnie na tej diodzie:<br />1. Czy chcesz by po odczycie ADC dioda świeciła na stałe z odpowiednią jasnością, dokładnie rzecz ujmując dioda ma świecić z jasnością odpowiadającą wartości ADC?<br />2. Czy chcesz by dioda migała płynnie z odpowiednią częstotliwością zależną od ADC.<br />W przypadku pierwszym nie potrzebny Ci jest Timer odczytujący wartości ADC, Ja do tego przypadku ( regulacja podświetlenia LCD, ale nie na ADC wykorzystuje taki fragment kodu):<br />INICJALIZACJA TIMERA1 PWM14<br />[syntax=c]TCCR1A |= (1&lt;&lt;COM1A1)//WŁĄCZENIE PRZERWANIA NA LOW NA PORCIE PB1<br />| (1&lt;&lt;WGM11);//TRYB 14 FAST PWM<br />TCCR1B |= (1&lt;&lt;WGM12) | (1&lt;&lt;WGM13) | (1&lt;&lt;CS10);<br />TCNT1 = 0;<br />ICR1 = 1000;//wart maksymalna czestotliwosc = CLK/ICR1<br />OCR1A = 0;[/syntax]<br />Proste ustawianie wartości po naciśnięciu klawisza:<br />[syntax=c]if(!keylock &amp;&amp; !(PINB &amp; KEY_LCD))<br />{<br />keylock = 1;<br />//proste rozjaśnianie diody<br />if (OCR1A &lt; ICR1) OCR1A += 250;<br />else OCR1A = 0;<br />}<br />else if( keylock &amp;&amp; (PINB &amp; KEY_LCD) ) keylock = 0;[/syntax]<br />U mnie to powoduje zmiane jasności świecenia diody podświetlającej LCD.<br /><br />Jako że robię miernik to Ci podrzucę konfigurację ADC na multichannel i auto odczyt ADC dla Atmega328 dla Atmega8 musisz przerobić rejestry:<br />[syntax=c]//---------INICJALIZACJA ADC- TRYB FREE RUN PRESKALER 128, REF V:1.11<br />void adc_init()<br />{<br />ADCSRA |= (1&lt;&lt;ADEN);//ADC on<br />ADCSRA |= (1&lt;&lt;ADPS2) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS0);//preskaler 16<br />ADMUX |= (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0);// napiecie odniesienia 1.1V dla at328<br />ADCSRA |=(1&lt;&lt;ADIE);//włączenie Free Running<br />}[/syntax]<br /><br />[syntax=c]//----------PRZERWANIE ADC------------<br />volatile uint16_t wyniki&#91;ILOSC_KANALOW_VOLT&#93;;<br />ISR(ADC_vect)<br />{<br />static uint8_t idxs;<br /><br />wyniki&#91;idxs&#93; = ADCW;<br />idxs++;<br />if (idxs == ILOSC_KANALOW_VOLT) idxs = 0;<br />set_chanel(idxs);<br />ADCSRA |= (1&lt;&lt;ADSC);<br />}[/syntax]<br /><br />[syntax=c]//Funkcja do przełączania kanałów<br />inline void set_chanel( uint8_t kanal )<br />{<br />ADMUX = (ADMUX &amp; 0b11111000) | kanal;<br />}[/syntax]<br />Tylko musisz odpowiednio przerobić pod to co chcesz osiągnąć.<br />W main dodatkowo musisz po kolei zrobić tak:<br />[syntax=c]adc_init();//inicjalizacja ADC<br />set_chanel( PC0 );//ustawienie kanalu<br />sei();//włączenie przerwań<br />ADCSRA |= (1&lt;&lt;ADSC); //włączenie konwersji adc[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3791">k_lukasik</a> — 24 lut 2015, o 06:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kojot90]]></name></author>
<updated>2015-02-23T22:10:45+01:00</updated>
<published>2015-02-23T22:10:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120661#p120661</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120661#p120661"/>
<title type="html"><![CDATA[Re: Problem z adc/ lcd]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120661#p120661"><![CDATA[
<div class="quotetitle">PJS napisał(a):</div><div class="quotecontent"><br />A nie jest to czasem przypadek, gdy ADC=0? Dzielić przez 0 nie można. Może warto dodać warunek:<br />[syntax=c]if(ADC=0)<br />   {<br />     ADC=2;<br />   }[/syntax]<br /></div><br /><br />nie pomogło <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> to samo<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 19 minutach ]</span></strong><br /><br /><div class="quotetitle">j23 napisał(a):</div><div class="quotecontent"><br />Niewiele się znam na elektronice analogowej, ale nie pasuje mi w tym układzie cewka. Wydaje mi się, że robi ona tutaj za taki filtr dolnoprzepustowy, chociaż -jak zakładam- jej rola ma być inna -ale jeśli tak, to należy odseparować masy: analogową (tam gdzie jest cewka) i cyfrową czyli wszystkie połączenia LCD z masą + reszta sygnałów, która korzysta z dobrodziejstw wartości dyskretnych. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Pozdrawiam! j23 Jarek<br /></div><br /><br />W chwili obecnej mam wszystko na płytce stykowej i mam zasilanie z USBsap i następnie rodzielają sie masy na analogową (potencjometr ) i cyfrową. Brak zakłucen na AVCC, AREF = 4,71 - 4,70<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8243">kojot90</a> — 23 lut 2015, o 22:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[j23]]></name></author>
<updated>2015-02-23T22:12:07+01:00</updated>
<published>2015-02-23T22:09:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120660#p120660</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120660#p120660"/>
<title type="html"><![CDATA[Re: Problem z adc/ lcd]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120660#p120660"><![CDATA[
Niewiele się znam na elektronice analogowej, ale nie pasuje mi w tym układzie cewka. Wydaje mi się, że robi ona tutaj za taki filtr dolnoprzepustowy, chociaż -jak zakładam- jej rola ma być inna -ale jeśli tak, to należy odseparować masy: analogową (tam gdzie jest cewka) i cyfrową czyli wszystkie połączenia LCD z masą + reszta sygnałów, która korzysta z dobrodziejstw wartości dyskretnych. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Pozdrawiam! j23 Jarek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4504">j23</a> — 23 lut 2015, o 22:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kojot90]]></name></author>
<updated>2015-02-23T21:56:52+01:00</updated>
<published>2015-02-23T21:56:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120655#p120655</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120655#p120655"/>
<title type="html"><![CDATA[Re: Problem z adc/ lcd]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120655#p120655"><![CDATA[
Dokładnie co sie dzieje pokażę na zdjęciach <br /><br />Jezli adc jest  małe 0, 1, 2 ,3 - około 100 to na wyjsciu uzyskuje wtedy małe czestotliwosci 0-500Hz wtedy jeszcze sie wyswietla w momencie kiedy krece potencjometrem i adc 111++ to zaczyna powoli znikać aż potem całkiem znika, i nawet jak powróce do adc = 0, 1 ,2 ,3 to i tak nic nie pokazuje<br /><br />Pierwsza po lewej wartość 65535 to wartość ICR1  dziwne ( ona sie nie zgadza bo wpisuje ICR1=62500/adc1; ) <br />poniżej wartość OCR1A= ICR1/2   a z boku wartość adc <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/8243/843b2e1727dee0b10bee0d6687755059.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/8243/843b2e1727dee0b10bee0d6687755059.jpg" alt="Obrazek" /></a><br /><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/8243/46f8c588db83f21a9d4ae3f8d3e6035b.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/8243/46f8c588db83f21a9d4ae3f8d3e6035b.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8243">kojot90</a> — 23 lut 2015, o 21:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PJS]]></name></author>
<updated>2015-02-23T21:36:57+01:00</updated>
<published>2015-02-23T21:36:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120652#p120652</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120652#p120652"/>
<title type="html"><![CDATA[Re: Problem z adc/ lcd]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120652#p120652"><![CDATA[
A nie jest to czasem przypadek, gdy ADC=0? Dzielić przez 0 nie można. Może warto dodać warunek:<br />[syntax=c]if(ADC=0)<br />   {<br />     ADC=1;<br />   }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1614">PJS</a> — 23 lut 2015, o 21:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[majster]]></name></author>
<updated>2015-02-23T21:29:01+01:00</updated>
<published>2015-02-23T21:29:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120648#p120648</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120648#p120648"/>
<title type="html"><![CDATA[Re: Problem z adc/ lcd]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120648#p120648"><![CDATA[
Wgraj jeszcze schemat by widziec jak vcc leci.<br /><br />Ad2 ja bym zastosował eliminację drgań no chyba że sprawdzasz po adc ale też nie wiem jak go laczysz i czytasz.<br /><br />Namazane ze smarta.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1628">majster</a> — 23 lut 2015, o 21:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kojot90]]></name></author>
<updated>2015-02-24T09:22:50+01:00</updated>
<published>2015-02-23T21:21:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120645#p120645</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120645#p120645"/>
<title type="html"><![CDATA[Problem z adc/ lcd]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10793&amp;p=120645#p120645"><![CDATA[
Witam <br />Robie PWM ( tryb 14 -atmega8) jego sterowanie odbywa sie za pomocą 16 bitowego rejestru ICR1 który to odpowiada za uzyskaną częstotliwość na wyjściu OCR1A (PB1) . <br /><br />Jezeli do rejestru ICR1 przypisuje stała wartość to wszystko jest ok, dioda poprawnie swieci, wynik na lcd jest OK. <br />W momencie kiedy rejestr ICR1 zależy od adc1 to wtedy wyswietlacz Pada kreski..., miga itp brak wyniku. <br />Sprawdzałem czy pobór prądu nie przekracza maksymalnej wartosci jaką daje USBsap czylu port USB w laptopie i jest OK. czyli wina programu, tylko problem w tym żę nie widze tego błedu <br /><br />do rejestru ICR1 (16 bitowego) wpisuje 65500/adc1    adc1 jest 10 bitowe,  uzyskuje w nim wartości od 0-1023<br /><br />Moje drugie pytanie to czy należy stosować eliminacje drgań styków przy przełaczniku obrotowym. Pan Mirek tylko o klawiszach wspomina one są małostabilne, a ten przełacznik już jest solidniejszy. (Nie sprawdzałem na oscyloskopie co sie dzieje) <br /><br /><br /><br />[syntax=cpp-qt]<br />#define F_CPU 16000000UL<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;HD44780.h&quot;<br />#include &lt;stdlib.h&gt; <br />#define KEY1 (1&lt;&lt;PORTD2)<br />#define KEY2 (1&lt;&lt;PORTD4)<br />#define wej_1 PORTC2<br />#define wej_2 PORTC3<br /><br /><br />volatile uint16_t adc1;//zmienna do pomiaru ADC wej_1<br />volatile uint16_t adc2;//zmienna do pomiaru ADC wej_2<br />volatile uint16_t wejscie=2;//zmienna do zmiany wejścia, początkowo pc2<br />volatile int y;<br />volatile int x;<br /><br />int main(void)<br /> {<br />//Inicjalizacja ADC<br /><br />ADCSRA = (1&lt;&lt;ADEN) // ADC Enable (uruchomienie przetwornika)<br />|(1&lt;&lt;ADFR) //tryb Free run<br />|(1&lt;&lt;ADSC) //rozpoczęcie konwersji<br />|(1&lt;&lt;ADPS2);//ADPS2: (ustawienie preskalera) preskaler= 16<br /><br />ADMUX  =//Wyrównanie wyniku do lewej<br />(1&lt;&lt;REFS0)//VCC jako napięcie referencyjne<br />|wejscie;//Wybór wejścia początkowego czyli PC2<br /><br />//Inicjalizacja Timera<br />TIMSK |= (1&lt;&lt;TOIE0) | (1&lt;&lt;TOIE1);//Przerwanie overflow przepełnienie timera<br />TCCR0 |= (1&lt;&lt;CS01); // źródłem CLK, preskaler 8 (2000000 Hz)<br />TCNT0 = 150;//Początkowa wartość licznika<br /><br />DDRC &amp;=~ (1&lt;&lt;wej_1);  //Ustawienie pinów wejściowych ADC<br />DDRC &amp;=~ (1&lt;&lt;wej_2);   //Ustawienie pinów wejściowych ADC<br /><br /><br />sei();<br /><br /><br />PORTD |= KEY1; // podciąganie klawiszy do VCC<br />PORTD |= KEY2; <br />LCD_Initalize();<br /><br />_delay_ms(10); // oczekiwanie na ustalenie się stanu wysokiego na wejściu klawisza<br /><br /><br />DDRB =(1&lt;&lt;PORTB1);  <br />TCCR1A =(1&lt;&lt;COM1A1)|(1&lt;&lt;COM1B1)|(1&lt;&lt;WGM11);   //PRESCALER=256 MODE 14(FAST PWM)<br />TCCR1B =(1&lt;&lt;WGM13)|(1&lt;&lt;WGM12)|(1&lt;&lt;CS12);<br /><br />ICR1=20000;// Początkowa wartość tylko na chwile. <br />OCR1A=10000;<br /><br />while(1) {<br />                              // Dla prescalera 256.<br />if(bit_is_clear(PIND,2))  // Zastosowany PRZEŁACZNIK OBROTOWY zawsze któryś PIN jest aktywny <br />{             <br />      <br />char wynik[]=&quot;      &quot;;<br /><br /> // TU jest zgon <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />((( <br />ICR1=62500/adc1;  // czestotliwość <br />OCR1A=0.5*ICR1;  // Wypełnienie od 1 do 100 <br /><br />LCD_GoTo(0, 0);           <br />LCD_WriteText(&quot;   &quot;);  <br />utoa(ICR1,wynik,10);     <br />LCD_GoTo(0, 0);        <br />LCD_WriteText(wynik);  <br /><br />LCD_GoTo(0, 1);         <br />LCD_WriteText(&quot;   &quot;);  <br />utoa(OCR1A,wynik,10);    <br />LCD_GoTo(0, 1);         <br />LCD_WriteText(wynik);  <br /><br />LCD_GoTo(8, 1);<br />LCD_WriteText(&quot;   &quot;);<br />utoa(adc1,wynik,10);<br />LCD_GoTo(8, 1);<br />LCD_WriteText(wynik);<br />_delay_ms(1000);<br /><br />LCD_Clear();<br /><br />}<br />if(bit_is_clear(PIND,4))<br />{<br /><br />TCCR1B =(1&lt;&lt;WGM13)|(1&lt;&lt;WGM12)|(1&lt;&lt;CS11);    // prescaler ustawiam na 8<br /><br /><br />char wynik[]=&quot;      &quot;;<br />// W ten sposób działa poprawnie. <br />ICR1=62500;        // czestotliwość<br />OCR1A=0.5*ICR1;    // wypelnienie    sterowane adc2<br /><br />LCD_GoTo(0, 0);<br />LCD_WriteText(&quot;   &quot;);<br />utoa(ICR1,wynik,10);<br />LCD_GoTo(0, 0);<br />LCD_WriteText(wynik);<br /><br />LCD_GoTo(8, 1);<br />LCD_WriteText(&quot;   &quot;);<br />utoa(adc1,wynik,10);<br />LCD_GoTo(8, 1);<br />LCD_WriteText(wynik);<br />_delay_ms(1000);<br /><br />LCD_Clear();<br />}<br /><br />}<br /><br /> }<br /><br /><br />ISR(TIMER0_OVF_vect)<br />{<br />switch(wejscie)<br />{<br />case 2:<br />adc1=ADC;    <br />break;<br /><br />case 3:<br />adc2=ADC;     <br />break;<br />}<br /><br />if(wejscie&lt;3)<br />wejscie++;<br />else<br />wejscie=2;<br /><br />ADMUX = 0;  //kasowanie rejestru<br /><br />ADMUX  =  (1&lt;&lt;REFS0)| wejscie; //Ustawianie nowych wartości<br /><br />TCNT0 = 150;  //Początkowa wartość licznika<br />}<br /><br /><br />[/syntax]<br /><br /><br />Buduje generator PWM<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8243">kojot90</a> — 23 lut 2015, o 21:21</p><hr />
]]></content>
</entry>
</feed>