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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-11-01T19:18:35+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=16690&amp;mode</id>
<entry>
<author><name><![CDATA[matigi12]]></name></author>
<updated>2016-11-01T19:18:35+01:00</updated>
<published>2016-11-01T19:18:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16690&amp;p=173397#p173397</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16690&amp;p=173397#p173397"/>
<title type="html"><![CDATA[Problem z WS2812]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16690&amp;p=173397#p173397"><![CDATA[
Witam, mam taki mały, lecz uciążliwy problem. Piszę program do obsługi pasków diod WS2812 po RS232, ale nie do końca działa tak jakbym chciał. W chwili gdy wysyłam bajt dla koloru zielonego to dopóki nie przekroczy on wartości 127 kolor wyświetla się dobrze, natomiast gdy wyślę już 128 to zamiast zielonego robi się żółty. Ale jest też dziwna zależność, że gdy wyślę 1 na bajt koloru czerwonego to zielony wyświetla się poprawie. Zamieszczam wstępny kod jaki udało mi się napisać.<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &quot;ws28x.C&quot;<br /><br />#include &quot;USART.C&quot;<br /><br /><br /><br />TWSRGB ws_rgb_leds&#91; 20 &#93;; <br />uint8_t * pasek = (uint8_t*) ws_rgb_leds;<br />char ramka&#91;99&#93; ;<br />volatile int i=0;<br />uint8_t pocz=0;<br />int main(void)<br />{ <br /><br />DDRD = 0b11111110;<br />PORTD =0;<br />DDRB=0;<br />DDRC=0xff;<br />PORTC=0x0;<br />UART_init(16);<br />_delay_us(50);<br />ws_cls(pasek,0x000000);<br /><br /> while(1)<br />{<br />}<br />}<br /><br />SIGNAL (SIG_UART_RECV)<br />   {<br /><br />ramka&#91;i&#93;=UDR;<br /><br />if((ramka&#91;i-2&#93;==12)&amp;&amp;(ramka&#91;i-1&#93;==0)&amp;&amp;(ramka&#91;i&#93;==19)&amp;&amp;(pocz==0)) <br />{pocz = i; <br />PORTC |= (1&lt;&lt;PC4); <br />ramka&#91;i+1&#93; = 255;<br />}<br />if(((i-pocz)&gt;ramka&#91;pocz+1&#93;*3+1 )&amp;&amp;(pocz&gt;0)) <br />{<br />PORTC &amp;= ~(1&lt;&lt;PC4);<br />for(int j= 0;j&lt;= ramka&#91;pocz+1&#93;-1;j++)<br />{<br />set_pixel(pasek,j+ramka&#91;pocz+2&#93;,((ramka&#91;pocz+3+j*3&#93;)*0x10000)+((ramka&#91;pocz+4+j*3&#93;)*0x100)+((ramka&#91;pocz+5+j*3&#93;)));<br />USART_out('R'); USART_out('G'); USART_out('B'); USART_out(j+ramka&#91;pocz+2&#93;);<br /><br />USART_out(':');<br />USART_out(ramka&#91;pocz+3+j*3&#93;);<br /><br />USART_out(ramka&#91;pocz+4+j*3&#93;);<br /><br />USART_out(ramka&#91;pocz+5+j*3&#93;);<br />}<br />ws281x_asm_send(pasek,WS_LED_CNT,WS_PIN);<br /><br /><br /><br />i=0; <br />pocz=0;<br />}<br /><br /><br />i++;<br />  <br />  <br />  <br />   }[/syntax]<br /><br /><span style="color: #FF0000"><strong><br />Popraw wstawienie listingu ... zgodnie z zasadami , które z racji stażu na forum powinien kolega znać  -- SunRiver</strong></span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2921">matigi12</a> — 1 lis 2016, o 19:18</p><hr />
]]></content>
</entry>
</feed>