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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-07-28T08:51:25+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=22446&amp;mode</id>
<entry>
<author><name><![CDATA[Dawid2379]]></name></author>
<updated>2019-07-28T08:51:25+01:00</updated>
<published>2019-07-28T08:51:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220761#p220761</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220761#p220761"/>
<title type="html"><![CDATA[Re: ws2812 nie działa gradient]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220761#p220761"><![CDATA[
Ach, ja już chciałem wszystko pozamieniać, dobra ok.<br />Coś w tym jest co piszesz, dzisiaj podstawiłem tak jak podpowiedziałeś i cześć kolorów faktycznie działa ale niektóre się kompletnie rozsypuje na pasku albo wychodzą inne kolory, a jeszcze dziwniejsza rzecz się stała kiedy ustawiłem jakiś kolor ( przy podmiance o której napiłeś) i ten kolor się rozsypał, wtedy pomyślałem zobaczę co się stanie jak zamienię Twoje<strong> uinty</strong> na <strong>inty</strong> dokładnie tak jak miałem wcześniej, jak jest w poradniku i okazuje się że działa, nie tylko ten ustawiony kolor ale wszystko działa <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /> Dla mnie zrozumieć co się stało jest niemożliwe, coś się odblokowało, nie wiem może kompilator może coś  procku, nie mam bladego pojęcia..<br />Dzięki bynajmniej dzięki Tobie udało się problem rozwiązać <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=1206">Dawid2379</a> — 28 lip 2019, o 08:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zealota]]></name></author>
<updated>2019-07-27T21:47:18+01:00</updated>
<published>2019-07-27T21:47:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220758#p220758</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220758#p220758"/>
<title type="html"><![CDATA[Re: ws2812 nie działa gradient]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220758#p220758"><![CDATA[
<div class="quotetitle">Dawid2379 napisał(a):</div><div class="quotecontent"><br />masz całkiem inne nazwy, nazwę struktury wiec bez reszty kodu nie będę umiał sobie tego podstawić czy pozamieniać.<br /></div><br />W teście, który wykazał różnice wszystko jest napisane &quot;po Twojemu&quot;, zatem wystarczy, że u siebie zamienisz int32_t na uint32_t i możesz potestować. <br />Moja teza zakłada, że zakres zmiennych int32_t jest za mały, dla niektórych kolorów może być OK, a dla innych nie, ale to tylko teza. Sprawdź, to nic skomplikowanego, zwykła podmianka. Chodzi o ten fragment:<br />[syntax=c]// interpolujemy wartosci na kanalach<br />            AC.cl&#91;cr&#93; = ((((int32_t)AB.cl&#91;cr&#93; - AA.cl&#91;cr&#93;)*(int32_t)pos)/(int32_t)max + AA.cl&#91;cr&#93;);<br />            AC.cl&#91;cg&#93; = ((((int32_t)AB.cl&#91;cg&#93; - AA.cl&#91;cg&#93;)*(int32_t)pos)/(int32_t)max + AA.cl&#91;cg&#93;);<br />            AC.cl&#91;cb&#93; = ((((int32_t)AB.cl&#91;cb&#93; - AA.cl&#91;cb&#93;)*(int32_t)pos)/(int32_t)max + AA.cl&#91;cb&#93;);[/syntax]<br /><br />Zreszta popatrz na to trzeźwo, funkcja przyjmuje parametry typu uint32_t i taką też zwraca wartość.<br />Jaki zatem jest powód, że wewnątrz trzeba operować na zmiennych ze znakiem?<br /><br />Jakimś specjalnym ekspertem w C nie jestem, ale trochę to kłuje w oczy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> i od powyższego bym zaczął.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16487">Zealota</a> — 27 lip 2019, o 21:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Dawid2379]]></name></author>
<updated>2019-07-27T18:53:09+01:00</updated>
<published>2019-07-27T18:53:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220753#p220753</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220753#p220753"/>
<title type="html"><![CDATA[Re: ws2812 nie działa gradient]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220753#p220753"><![CDATA[
Ja nie do końca rozumie zasadę działania tego kodu, tzn gradientu, jest dost skomplikowany jak dla mnie, pierwszy raz go wpisywałem i nie wiem co z czym się je, masz całkiem inne nazwy, nazwę struktury wiec bez reszty kodu nie będę umiał sobie tego podstawić czy pozamieniać. Z drugiej strony Panu Mirkowi działa na tym kodzie, coś jeszcze musi być nie tak. Oglądam po raz kolejny poradnik, może coś &quot;załapie&quot;.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1206">Dawid2379</a> — 27 lip 2019, o 18:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zealota]]></name></author>
<updated>2019-07-26T23:13:57+01:00</updated>
<published>2019-07-26T23:13:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220720#p220720</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220720#p220720"/>
<title type="html"><![CDATA[Re: ws2812 nie działa gradient]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220720#p220720"><![CDATA[
Stawiam na to, że mogą być problemy z rzutowaniami, które robisz.<br />U siebie mam oczywiście ten sam wzór z poradnika ale rzutuję inaczej i mam poprawne kolory (tak mi się wydaje <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ):<br />[syntax=c]uint32_t color_interpolate( uint32_t minColor, uint32_t maxColor, uint8_t pos, uint8_t posMax ) {<br />T_RGB ColorMin, ColorMax;<br />ColorMin.color24bit = minColor;<br />ColorMax.color24bit = maxColor;<br /><br />ColorMin.R = (uint8_t)ColorMin.R + ( (uint32_t)ColorMax.R - (uint32_t)ColorMin.R  )*pos / posMax;<br />ColorMin.G = (uint8_t)ColorMin.G + ( (uint32_t)ColorMax.G - (uint32_t)ColorMin.G  )*pos / posMax;<br />ColorMin.B = (uint8_t)ColorMin.B + ( (uint32_t)ColorMax.B - (uint32_t)ColorMin.B  )*pos / posMax;<br /><br />return ColorMin.color24bit;<br />}[/syntax]<br /><br />Ty rzutujesz na <strong>int32 </strong> to wartość działań spokojnie może przekroczyć wartość typu, w końcu kolor to 24 bit, a może dojść do mnożeń przez duży zakres np 0xFF, czy jeszcze więcej.<br />Spróbuj rzutowania, które podałem a zobaczymy czy to pomoże.<br /><br />Zrobiłem również dodatkowy test:<br />[syntax=c]typedef struct{<br />        uint8_t g;<br />        uint8_t r;<br />        uint8_t b;<br />} TWSRGB;<br />typedef union {<br />        uint32_t color;<br />        uint8_t cl&#91;4&#93;;<br />}TCLU;<br /><br />enum {cb,cg,cr};<br />volatile uint32_t color1 = 0x00FF0000;<br />volatile uint32_t color2 = 0x00FFFF00;<br />volatile uint32_t wynik = 0;<br /><br />uint32_t Interpolate2Colors(uint32_t A, uint32_t B, uint16_t pos, uint16_t max){<br /><br />TCLU AA, AB, AC;<br />        AA.color = A;<br />        AB.color = B;<br /><br />            // interpolujemy wartosci na kanalach<br />            AC.cl&#91;cr&#93; = AA.cl&#91;cr&#93; + ( ( (int32_t)AB.cl&#91;cr&#93; - AA.cl&#91;cr&#93; )*(int32_t)pos)/(int32_t)max;<br />            AC.cl&#91;cg&#93; = AA.cl&#91;cg&#93; + ( ( (int32_t)AB.cl&#91;cg&#93; - AA.cl&#91;cg&#93; )*(int32_t)pos)/(int32_t)max;<br />            AC.cl&#91;cb&#93; = AA.cl&#91;cb&#93; + ( ( (int32_t)AB.cl&#91;cb&#93; - AA.cl&#91;cb&#93; )*(int32_t)pos)/(int32_t)max;<br /><br />            return AC.color;<br />}<br />uint32_t Interpolate3Colors(uint32_t A, uint32_t B, uint16_t pos, uint16_t max){<br /><br />TCLU AA, AB, AC;<br />        AA.color = A;<br />        AB.color = B;<br /><br />            // interpolujemy wartosci na kanalach<br />            AC.cl&#91;cr&#93; = AA.cl&#91;cr&#93; + ( ( (uint32_t)AB.cl&#91;cr&#93; - AA.cl&#91;cr&#93; )*(uint32_t)pos)/(uint32_t)max;<br />            AC.cl&#91;cg&#93; = AA.cl&#91;cg&#93; + ( ( (uint32_t)AB.cl&#91;cg&#93; - AA.cl&#91;cg&#93; )*(uint32_t)pos)/(uint32_t)max;<br />            AC.cl&#91;cb&#93; = AA.cl&#91;cb&#93; + ( ( (uint32_t)AB.cl&#91;cb&#93; - AA.cl&#91;cb&#93; )*(uint32_t)pos)/(uint32_t)max;<br /><br />            return AC.color;<br />}<br />wynik = Interpolate2Colors( color2, color1, 127, 255 );<br />wynik = Interpolate3Colors( color2, color1, 127, 255 );[/syntax]<br />Wyniki różnią się, najpierw jest 0xff8100, a z drugiej funkcji 0xff8000, zatem stawiam, że jest coś na rzeczy <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=16487">Zealota</a> — 26 lip 2019, o 23:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Dawid2379]]></name></author>
<updated>2019-07-26T21:37:10+01:00</updated>
<published>2019-07-26T21:37:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220719#p220719</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220719#p220719"/>
<title type="html"><![CDATA[ws2812 nie działa gradient]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22446&amp;p=220719#p220719"><![CDATA[
Obejrzałem kilka poradników Magic Led. Zatrzymałem się na gradiencie, wszystkie poprzednie funkcje działają bez problemu, analizowałem kod wszystko mam przepisane tak jak w poradniku, a wychodzi mi takie coś jak na zdjęciu. Myślałem ze może coś z Eclipse znowu, więc zaś wszystko zainstalowałem od nowa i nic, szukam w kodzie i tez nic, dziwne tym bardziej że wszystkie inne funkcje działają bez problemu od ''asm send'' po wszystkie poprzednie efekt. Co jeszcze ewentualnie może powodować taki problem?<br />Zmieniałem już procesor , fakt tez Atmega8 ale nic się nie zienia, wiec odpada ze coś nie tak z prockiem,<br />zmieniałem tez piny i dalej ten sam problem świecą jak chcą te diody, nie wiem co jeszcze mogłabym zrobić<br /><br /><a href="https://obrazkiforum.atnel.pl/1206/5e3d2b45a74b6922bf086f2da5a42033.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/1206/5e3d2b45a74b6922bf086f2da5a42033.jpg" alt="Obrazek" /></a><br />main.c<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;avr/pgmspace.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;ws281x.h&quot;<br /><br /><br />TWSRGB ws_rgb_leds &#91;WS_LED_CNT&#93;; //tworzenie tablicy<br />uint8_t * pasek = (uint8_t*)ws_rgb_leds;<br /><br />int main(void){<br /><br /><br />    ws_cls ( ws_rgb_leds,0 ) ;<br />            _delay_ms(2000);<br />              gradient2c(pasek, 10, 25, 0xaf0000, 0x0000af);<br />               ws281x_asm_send(pasek, WS_LED_CNT, WS_PIN);<br /><br /><br />            while(1){<br /><br /><br />     }<br /><br />}[/syntax]<br /><br />ws281x.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;string.h&gt;<br /><br />#include &quot;ws281x.h&quot;<br /><br />const uint8_t gamma_correctionR&#91;&#93; PROGMEM = {<br />  0,  1,  1,  1,  2,  3,  5,  7, 10, 13, 17, 21, 26, 32, 38, 45, 52, 60,<br /> 69, 78, 88, 99,111,124,137,151,166,182,199,217,235,255<br />};<br /><br />const uint8_t gamma_correctionG&#91;&#93; PROGMEM = {<br />  0,  1,  1,  1,  2,  3,  5,  7, 10, 13, 17, 21, 26, 32, 38, 45, 52, 60,<br /> 69, 78, 88, 99,111,124,137,151,166,182,199,217,235,255<br />};<br /><br />const uint8_t gamma_correctionB&#91;&#93; PROGMEM = {<br />  0,  1,  1,  1,  2,  3,  5,  7, 10, 13, 17, 21, 26, 32, 38, 45, 52, 60,<br /> 69, 78, 88, 99,111,124,137,151,166,182,199,217,235,255<br />};<br /><br />#define GAMMAR(a) (pgm_read_byte(&amp;gamma_correctionR&#91;a&#93;))  // macro for RED<br />#define GAMMAG(a) (pgm_read_byte(&amp;gamma_correctionG&#91;a&#93;))  // macro for GREEN<br />#define GAMMAB(a) (pgm_read_byte(&amp;gamma_correctionB&#91;a&#93;))  // macro for BLUE<br /><br /><br /><br />void ws_cls( void * line, uint32_t color ){<br /><br />        if( !color ) memset(line, 0, WS_LED_CNT*3);<br />        else {<br />        uint16_t x,i;<br />                for( i=0; i&lt;WS_LED_CNT;i++){<br /><br />                        x=i*3;<br />                        *((uint8_t*)line + x)   = color &gt;&gt; 8;   //zielony<br />                        *((uint8_t*)line + x+1) = color &gt;&gt; 16;  //czerwony<br />                        *((uint8_t*)line + x+2) = color;        //niebieski<br /><br />                }<br />        }<br />        ws281x_asm_send( (uint8_t*)line, WS_LED_CNT, WS_PIN );<br /><br />}<br /><br />void ws_set_pixel ( void * line, int x, uint32_t color){<br /><br />        if( x&lt;0 ) return;<br />        if( x &gt;= WS_LED_CNT) return;<br /><br />        *((uint8_t*)line + x*3)         = color &gt;&gt; 8;   //zielony<br />        *((uint8_t*)line + x*3+1)   = color &gt;&gt; 16;      //czerwony<br />        *((uint8_t*)line + x*3+2)       = color;                //niebieski<br />}<br /><br /><br />void ws_line ( void * line, int x, uint16_t len, uint32_t color){<br /><br />        int i;<br />        for(i=x; i&lt;(int)(x+len); i++){<br />                ws_set_pixel( line,i, color );<br />        }<br />}<br /><br />static uint32_t Interpolate2Colors(uint32_t A, uint32_t B, uint16_t pos, uint16_t max){<br /><br />    TCLU AA, AB, AC;<br />        AA.color = A;<br />        AB.color = B;<br /><br />    // interpolujemy wartosci na kanalach<br />    AC.cl&#91;cr&#93; = ((((int32_t)AB.cl&#91;cr&#93; - AA.cl&#91;cr&#93;)*(int32_t)pos)/(int32_t)max + AA.cl&#91;cr&#93;);<br />    AC.cl&#91;cg&#93; = ((((int32_t)AB.cl&#91;cg&#93; - AA.cl&#91;cg&#93;)*(int32_t)pos)/(int32_t)max + AA.cl&#91;cg&#93;);<br />    AC.cl&#91;cb&#93; = ((((int32_t)AB.cl&#91;cb&#93; - AA.cl&#91;cb&#93;)*(int32_t)pos)/(int32_t)max + AA.cl&#91;cb&#93;);<br /><br />    return AC.color;<br />}<br /><br />void gradient2c (void * line, int x, int len, uint32_t A, uint32_t B) {<br />int i;<br />int alen = (int)(x+len);<br /><br />TCLU col;<br />TWSRGB * aline = line;<br /><br />for ( i = x; i &lt; alen; i++ ) {<br />if ( i&lt;0 ) continue;<br />if ( i&gt;=WS_LED_CNT+1 ) continue;<br /><br />col.color = Interpolate2Colors(A, B, i-x, len);<br /><br />aline&#91;i&#93;.r = GAMMAR( col.cl&#91;cr&#93; );<br />aline&#91;i&#93;.g = GAMMAG( col.cl&#91;cg&#93; );<br />aline&#91;i&#93;.b = GAMMAB( col.cl&#91;cb&#93; );<br /><br /><br />}<br />}<br /><br /><br /><br /><br />void ws281x_asm_send( void *data, uint16_t datlen, uint8_t pin ) {<br /><br />uint8_t databyte=0, cnt, pinLO=~pin;<br />WS_DIR |= pin;<br />datlen *= 3;<br /><br />#if F_CPU == 16000000<br /><br />asm volatile(<br />&quot;lds%&#91;cnt&#93;,%&#91;ws_port&#93;\n\t&quot;<br />&quot;or%&#91;pinHI&#93;,%&#91;cnt&#93;\n\t&quot;<br />&quot;and%&#91;pinLO&#93;,%&#91;cnt&#93;\n\t&quot;<br />&quot;mPTL%=:subi%A6,1\n\t&quot;<br />&quot;sbci%B6,0\n\t&quot;<br />&quot;brcsexit%=\n\t&quot;<br />&quot;ld%&#91;databyte&#93;,X+\n\t&quot;<br />&quot;ldi%&#91;cnt&#93;,8\n\t&quot;<br /><br />&quot;oPTL%=:sts%&#91;ws_port&#93;,%&#91;pinHI&#93;\n\t&quot;<br />&quot;rjmp .+0\n\t&quot;<br /><br />&quot;lsl%&#91;databyte&#93;\n\t&quot;<br />&quot;brcs.+2\n\t&quot;<br />&quot;sts%&#91;ws_port&#93;,%&#91;pinLO&#93;\n\t&quot;<br />&quot;rjmp .+0\n\t&quot;<br />&quot;rjmp .+0\n\t&quot;<br /><br />&quot;dec%&#91;cnt&#93;\n\t&quot;<br />&quot;sts%&#91;ws_port&#93;,%&#91;pinLO&#93;\n\t&quot;<br />&quot;breqmPTL%=\n\t&quot;<br />&quot;rjmp .+0\n\t&quot;<br /><br />&quot;rjmpoPTL%=\n\t&quot;<br />&quot;exit%=:\n\t&quot;<br />:&#91;cnt&#93;&quot;=&amp;d&quot; (cnt)<br />:&#91;databyte&#93;&quot;r&quot; (databyte), &#91;ws_port&#93;&quot;M&quot; (_SFR_MEM_ADDR(WS_PORT)),<br /> &#91;pinHI&#93;&quot;r&quot; (pin), &#91;pinLO&#93;&quot;r&quot; (pinLO), &#91;data&#93;&quot;x&quot; (data), &#91;datlen&#93;&quot;r&quot; (datlen)<br />);<br /><br />#endif<br /><br />}[/syntax]<br /><br />ws281x.h<br /><br />[syntax=c]#ifndef WS281X_H_<br />#define WS281X_H_<br /><br />#define WS_PIN_NR PB5<br />#define WS_PIN ( 1&lt;&lt;WS_PIN_NR)<br />#define WS_PORT PORTB<br />#define WS_DIR DDRB<br /><br />#define WS_LED_CNT 60<br /><br />typedef struct{<br />        uint8_t g;<br />        uint8_t r;<br />        uint8_t b;<br />} TWSRGB;<br /><br />typedef union {<br />uint32_t color;<br />uint8_t cl&#91;4&#93;;<br />}TCLU;<br /><br /><br />enum {cb,cg,cr};<br /><br /><br />void ws_cls( void *line, uint32_t color );<br />void ws_set_pixel ( void * line, int x, uint32_t color);<br />void ws_line ( void *line, int x, uint16_t len, uint32_t color);<br />void gradient2c (void * line, int x, int len, uint32_t A, uint32_t B);<br /><br />void ws281x_asm_send( void *data, uint16_t datlen, uint8_t pin);<br /><br />#endif /* WS281X_H_ */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1206">Dawid2379</a> — 26 lip 2019, o 21:37</p><hr />
]]></content>
</entry>
</feed>