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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-11-04T15:10:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=4664&amp;mode</id>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2013-11-04T15:10:01+01:00</updated>
<published>2013-11-04T15:10:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4664&amp;p=55361#p55361</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4664&amp;p=55361#p55361"/>
<title type="html"><![CDATA[Re: Problem z płynnym przejsciem diody RGB w inny kolor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4664&amp;p=55361#p55361"><![CDATA[
To jest moja funkcja realizujaca losowe przejścia.<br /><br />Akurat przystosowana jest do użycia z inną funkcją, używającą przestrzeni HSB zamiast RGB.<br /><br />Możliwe jest losowanie zarówno w zakresie zadanych kolorów jak i w zakresach jasności i jaskrawości.<br />[syntax=c]void ran_col_sweep(uint16_t h_start, uint16_t h_end, // wartosci graniczne H<br />uint8_t s_start, uint8_t s_end, // wartosci graniczne S<br />uint8_t b_start, uint8_t b_end, // wartosci graniczne B<br />uint16_t time) {// czas trwania koloru ms<br /><br />volatile uint16_t y,x,h;<br />volatile uint8_t s,b,red,green,blue;<br /><br /><br />if (h_end==h_start) {<br />y= h_start;<br />}<br />else {<br />y= (rand() / (RAND_MAX / (h_end - h_start)))+h_start;<br />}<br />if (y&lt;x) {<br /><br />h=y;<br />while (h&lt;x) {<br />if (timer1==time) {<br />//wywołanie funkcji przeliczającej HSB na RGB i przypisanie licznikom PWM wartosci dla kolorów<br />hsv_to_rgb_8_n(h, s, b, &amp;red, &amp;green, &amp;blue);<br />OCR2 = red;<br />OCR1A = green;<br />OCR1B = blue;<br />h++;<br />timer1=0;<br />}<br />} // koniec while<br /><br />} // koniec IF<br /><br />else {<br />h=y;<br />while (h&gt;x) {<br />if (timer1==time) {<br />//wywołanie funkcji przeliczającej HSB na RGB i przypisanie licznikom PWM wartosci dla kolorów<br />hsv_to_rgb_8_n(h, s, b, &amp;red, &amp;green, &amp;blue);<br />OCR2 = red;<br />OCR1A = green;<br />OCR1B = blue;<br />h--;<br />timer1=0;<br />}<br />} // koniec while<br /><br />} // koniec ELSE<br /><br />// Losujemy wartosc HUE z podanego zakresu<br />if (h_end==h_start) {<br />x= h_start;<br />}<br />else {<br />x= (rand() / (RAND_MAX / (h_end - h_start)))+h_start;<br />}<br /><br />// Losujemy wartosc BRI z podanego zakresu<br />if (b_end==b_start) {<br />b= b_start;<br />}<br />else {<br />b= (rand() / (RAND_MAX / (b_end - b_start)))+b_start;<br />}<br /><br />// Losujemy wartosc SAT z podanego zakresu<br />if (s_end==s_start) {<br />s= s_start;<br />}<br />else {<br />s= (rand() / (RAND_MAX / (s_end - s_start)))+s_start;<br />}<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 4 lis 2013, o 15:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2013-11-04T14:57:31+01:00</updated>
<published>2013-11-04T14:57:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4664&amp;p=55360#p55360</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4664&amp;p=55360#p55360"/>
<title type="html"><![CDATA[Re: Problem z płynnym przejsciem diody RGB w inny kolor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4664&amp;p=55360#p55360"><![CDATA[
Masz błąd w algorytmie.<br />[syntax=c]if(licz1&lt;=licz11 || licz2&lt;=licz22 || licz3&lt;=licz33){ ...[/syntax]<br />Wystarczy że tylko jeden z powyższych warunków zostanie spełniony i będzie wszystkie kolory liczyło w górę.<br />Zrób funkcję i dla każdego koloru licz oddzielnie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 4 lis 2013, o 14:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atmegowiec]]></name></author>
<updated>2013-11-03T20:58:49+01:00</updated>
<published>2013-11-03T20:58:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=4664&amp;p=55300#p55300</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=4664&amp;p=55300#p55300"/>
<title type="html"><![CDATA[Problem z płynnym przejsciem diody RGB w inny kolor]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=4664&amp;p=55300#p55300"><![CDATA[
Witam, postanowiłem stworzyć program który byvby losował jakis kolor diody RGB i płynnie do neigo przechodził. Poczyniłem taki oto kod:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#define R (1&lt;&lt;PA0)<br />#define G (1&lt;&lt;PA1)<br />#define B (1&lt;&lt;PA2)<br /><br />// definicje zmiennych do sterowania 3 kanałami programowych PWM - RGB<br />// zmienne typu uint8_t, rozdzielczość 8-bitowa<br />volatile uint8_t pwm1, pwm2, pwm3;<br />uint8_t licz1,licz11,licz2,licz22, licz3, licz33;<br /><br /><br />// główna funkcja programu main()<br />int main(void)<br />{<br /><br />// ustawienie pinów kanałów programowych PWM jako WYJŚCIA<br />DDRA |= R | G | B;<br /><br />// wyłączenie diod LED podłączonych katodami do wyjść<br />PORTA |= R | G | B;<br /><br /><br />// ustawienia TIMER2 w tryb CTC<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb  CTC<br />TCCR2 |= (1&lt;&lt;CS20);// preskaler = 1<br />OCR2 = 200;// dodatkowy podział częsttotliwości przez 200<br />TIMSK |= (1&lt;&lt;OCIE2);// zezwolenie na przerwanie CompareMatch<br /><br /><br />sei();// odblokowanie globalne przerwań<br />uint8_t r,g,b;// definicja zmiennej i na potrzeby pętli for()<br /><br />while(1)<br />{<br /><br />licz1=rand();<br />licz2=rand();<br />licz3=rand();<br /><br />//********** Jeśli liczba1,2 lub 3 jest mniejsze od licz11,2,33 to  dodawaj do czasu osiągniecia tych liczb<br />if(licz1&lt;=licz11 || licz2&lt;=licz22 || licz3&lt;=licz33){<br />for(r=licz1,g=licz2,b=licz3;r&lt;licz11,g&lt;licz22,b&lt;licz33;r++,g++,b++){<br />pwm1=r;<br />pwm2=g;<br />pwm3=b;<br />_delay_ms(10);<br />}<br />licz11=licz1;<br />licz22=licz2;<br />licz33=licz3;<br /><br />//**********W przeciwnym razie jeśli liczba1,2 lub 3 jest wieksze od licz11,2,33 to  odejmuj do czasu osiągniecia tych liczb<br />} else{<br />for(r=licz1,g=licz2,b=licz3;r&gt;licz11,g&gt;licz22,b&gt;licz33;r--,g--,b--){<br />pwm1=r;<br />pwm2=g;<br />pwm3=b;<br />_delay_ms(10);<br />}<br />licz1=licz11;  //przypisz licz1 wartość licz11   aby w kolejnym przebiegu ta wartośc była wartością poczatkową i przynnie przechodizła w inny kolor bez skoków<br />licz2=licz22;<br />licz3=licz33;<br />}<br />}<br />}<br />ISR( TIMER2_COMP_vect )<br />{<br />static uint8_t cnt;<br /><br />if(cnt&gt;=pwm1) PORTA |= (R); else PORTA &amp;= ~(R);<br />if(cnt&gt;=pwm2) PORTA |= (G); else PORTA &amp;= ~(G);<br />if(cnt&gt;=pwm3) PORTA |= (B); else PORTA &amp;= ~(B);<br /><br />cnt++;<br />}[/syntax]<br /><br />Program działa w ten sposób ze gdy w petli dolicz do warosci liczXX to nastepuje skokowa zmiana koloru. Jak myslicie czy da sie to napisac krócej i zeby kolor całkowicie płynnie przechodizł w inny?<br /><br />Program zabiera prawie 1kB pamieci!!!... zapewne przez funkcje rand();<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1123">Atmegowiec</a> — 3 lis 2013, o 20:58</p><hr />
]]></content>
</entry>
</feed>