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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-11-19T15:56:49+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9263&amp;mode</id>
<entry>
<author><name><![CDATA[jan mazur]]></name></author>
<updated>2014-11-19T15:56:49+01:00</updated>
<published>2014-11-19T15:56:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104910#p104910</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104910#p104910"/>
<title type="html"><![CDATA[Re: Niedziałajacy kod ASM dla magicled w ATMega328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104910#p104910"><![CDATA[
Super! Coś mi świtało z tym rzutowaniem ale próbowałem w inny sposób <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ...a co do Twego artykułu to czytałem jakiś rok temu, no ale widać wypadło z głowy <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> Zaraz siadam i czytam od nowa.<br /><br />Dziękuję Bardzo Mirek!<br /><br />P.S. Dzięki za informację o Eclipse... cenna!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=566">jan mazur</a> — 19 lis 2014, o 15:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-11-19T15:00:25+01:00</updated>
<published>2014-11-19T15:00:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104894#p104894</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104894#p104894"/>
<title type="html"><![CDATA[Re: Niedziałajacy kod ASM dla magicled w ATMega328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104894#p104894"><![CDATA[
[syntax=c](red_color&lt;&lt;16)[/syntax]<br /><br />widzisz jakbyś poczytał to:<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/domyslna-promocja-do-typu-int.html" >http://atnel.pl/domyslna-promocja-do-typu-int.html</a><!-- m --><br /><br />to wiedziałbyś dlaczego masz z tym problem .... i dlaczego trzeba to zrobić tak:<br /><br />[syntax=c]( (uint32_t)red_color&lt;&lt;16 )[/syntax]<br /><br />przy czym poczytanie o domyślnej promocji do int uratuje ci skórę i włosy na głowie w milionach innych sytuacji podczas programowania w C, więc &quot;do lektury&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><div class="quotetitle">jan mazur napisał(a):</div><div class="quotecontent"><br />i co drugą kompilację Eclipse wyrzuca błąd,<br /></div><br />No tu znowu opowiadasz rzeczy które mówią że nie wiesz jak działa kompilacja w C a warto jednak się dowiedzieć bo bez tego znowu - będziesz sobie często rwał włosy z głowy<br /><br />panie kochany jak masz jakiegoś warninga po kompilacji (czyli po BUILD) ... to jest RZECZĄ NORMALNĄ jak jedzenie chleba ze smalcem, że gdy wykonasz kolejny BUILD to warning czy warningi znikną .... co więcej każda następna kompilacja (BUILD) bez zmiany w kodzie będzie też już bez warningów ze strony kompilatora ale czy to znaczy że ich nie ma ???? NIE nieeee <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> są panie kolego tylko kompilator reaguje tak:<br /><br />1. po zmianie w kodzie i PIERSZEJ kompilacji kompilator pokaże wszystkie warningi<br />2. po drugiej i KAŻDEJ następnej kompilacji jeśli nic nie zmienisz w kodzie - kompilator nie pokaże (schowa) warningi bo uzna że nie chcesz ich widzieć bo wiesz co robisz i wg ciebie powinno być dobrze <br /><br />rozumiesz ?<br /><br />3. jeśli jednak dokonasz zmiany w kodzie - to kolejna kompilacja będzie uznana znowu za tę pierwszą i sytuacja powtórzy się znowu jak z punktów 1 i 2<br /><br /><br />4. Jeśli nie chcesz zmieniać kodu a PONOWNIE zobaczyć warningi to wykonaj Pan czyszczenie projektu czyli CLEAN + BUILD i wtedy NAGLE cudownie znowu zobaczysz warningi<br /><br />wbrew pozorom to bardzo dobrze przemyślana strategia i jeśli się wie jak działa to później bardzo się to przydaje<br /><br />za to już więcej człowiek nie pisze albo nie opowiada że co drugi raz są warningi albo że czasem są a czasem nie ma <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 19 lis 2014, o 15:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jan mazur]]></name></author>
<updated>2014-11-19T14:48:50+01:00</updated>
<published>2014-11-19T14:48:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104891#p104891</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104891#p104891"/>
<title type="html"><![CDATA[Re: Niedziałajacy kod ASM dla magicled w ATMega328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104891#p104891"><![CDATA[
Postanowiłem nie zakładać wątku nowego, bo to o co pytam jest z założenia proste i powinno działać ale...<br /><br />Pobieram z czujnika koloru dane i wrzucam je do trzech zmiennych (niby czterech ale 'clear color' jest nieważny). Później zwracam je w postaci <em>uint32_t</em> jednak z tego co widzę nie &quot;wychodzi&quot; mi kolor czerwony. Zawsze ma wartość 0 i co drugą kompilację Eclipse wyrzuca błąd, że niby przesunięcie jest większe niż typ zwracanej zmiennej <em>left shift count &gt;= width of type</em>.<br /><br />Kod dla tej funkcji wygląda tak:<br />[syntax=c]uint32_t read_color(void)<br />{<br />uint8_t clear_color = 0;<br />uint8_t red_color = 0;<br />uint8_t green_color = 0;<br />uint8_t blue_color = 0;<br /><br />uint8_t color_data&#91;8&#93;;<br /><br />TWI_read_buf(TCS34725_ADDR, (TCS34725_COMMAND_BIT | CDATAL), 8, color_data);<br /><br />        clear_color = (color_data&#91;1&#93;&lt;&lt;8) + color_data&#91;0&#93;;<br /><br />red_color = (color_data&#91;3&#93;&lt;&lt;8) + color_data&#91;2&#93;;<br />uart_puts(&quot;R: &quot;);<br />uart_putint(red_color, 16);<br />uart_puts(&quot;\r\n&quot;);<br /><br />green_color = (color_data&#91;5&#93;&lt;&lt;8) + color_data&#91;4&#93;;<br />uart_puts(&quot;G: &quot;);<br />uart_putint(green_color, 16);<br />uart_puts(&quot;\r\n&quot;);<br /><br />blue_color = (color_data&#91;7&#93;&lt;&lt;8) + color_data&#91;6&#93;;<br />uart_puts(&quot;B: &quot;);<br />uart_putint(blue_color, 16);<br />uart_puts(&quot;\r\n&quot;);<br /><br />uart_puts(&quot;Common: &quot;);<br />uart_putint((red_color&lt;&lt;16) + (green_color&lt;&lt;8) + blue_color, 16);<br />uart_puts(&quot;\r\n&quot;);<br /><br />//nie przenosi 'red_color'<br />return ((red_color&lt;&lt;16) + (green_color&lt;&lt;8) + blue_color);<br />}[/syntax]<br /><br />W konsoli widzę poprawne dane aż do momentu sekcji <strong><em>Common:</em></strong>, oraz także po wywołaniu widać, że <strong>Red:</strong> jest O<br /><br /><strong>R: 8b<br />G: 1c<br />B: 1d<br />Common: 1c1d<br />Red: 0<br />Green: 1c<br />Blue: 1d</strong><br /><br />Jak to jest z tym przesunięciem? Wydaje się, że dobrze to jest zrobione, a coś nie gra...<br /><br />Dziękuję!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=566">jan mazur</a> — 19 lis 2014, o 14:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jan mazur]]></name></author>
<updated>2014-11-16T08:30:20+01:00</updated>
<published>2014-11-16T08:30:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104227#p104227</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104227#p104227"/>
<title type="html"><![CDATA[Re: Niedziałajacy kod ASM dla magicled w ATMega328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104227#p104227"><![CDATA[
No i działa! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Właśnie takiego oka mi było potrzeba.<br /><br />Dziękuję Bardzo!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=566">jan mazur</a> — 16 lis 2014, o 08:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xor]]></name></author>
<updated>2014-11-16T00:27:53+01:00</updated>
<published>2014-11-16T00:27:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104206#p104206</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104206#p104206"/>
<title type="html"><![CDATA[Re: Niedziałajacy kod ASM dla magicled w ATMega328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104206#p104206"><![CDATA[
<div class="quotetitle">jan mazur napisał(a):</div><div class="quotecontent"><br />[syntax=c]ws281x_asm_send(ws_rgb_leds, WS_LED_CNT, WS_PIN_NR);[/syntax]<br /></div><br /><br />Błąd w 3. argumencie, powinna być maska (czyli WS_PIN) a nie nr pinu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1774">xor</a> — 16 lis 2014, o 00:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jan mazur]]></name></author>
<updated>2014-11-15T23:49:57+01:00</updated>
<published>2014-11-15T23:49:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104199#p104199</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104199#p104199"/>
<title type="html"><![CDATA[Re: Niedziałajacy kod ASM dla magicled w ATMega328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104199#p104199"><![CDATA[
No to teraz zagadka - gdzie? Może coś w Eclipse?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=566">jan mazur</a> — 15 lis 2014, o 23:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matw]]></name></author>
<updated>2014-11-15T18:42:04+01:00</updated>
<published>2014-11-15T18:42:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104132#p104132</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104132#p104132"/>
<title type="html"><![CDATA[Re: Niedziałajacy kod ASM dla magicled w ATMega328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104132#p104132"><![CDATA[
Wersja MkAvrCalculatora nie ma znaczenia do tej funkcjonalności, sprawdziłem twój kod i ten z kalkulatora i nie ma żadnych różnic, poza spacjami i tabulatorami.<br />Problem zatem musi leżeć gdzieś indziej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2394">matw</a> — 15 lis 2014, o 18:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jan mazur]]></name></author>
<updated>2014-11-15T18:39:56+01:00</updated>
<published>2014-11-15T18:39:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104131#p104131</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104131#p104131"/>
<title type="html"><![CDATA[Re: Niedziałajacy kod ASM dla magicled w ATMega328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104131#p104131"><![CDATA[
Dzięki za poradę... wygenerowałem dla ATmega128P 20MHz (nie mam płatnej wersji MKAvrCalculator'a). Wkleiłem dane i nie ma poprawy... może jednak warto pełną wersję użyć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=566">jan mazur</a> — 15 lis 2014, o 18:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matw]]></name></author>
<updated>2014-11-15T18:28:07+01:00</updated>
<published>2014-11-15T18:28:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104128#p104128</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104128#p104128"/>
<title type="html"><![CDATA[Re: Niedziałajacy kod ASM dla magicled w ATMega328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104128#p104128"><![CDATA[
W, MkAvrCalculator masz narzędzie do generowania tej funkcji wysyłającej dane w ASM, weź pobierz stamtąd kod i sprawdź.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2394">matw</a> — 15 lis 2014, o 18:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jan mazur]]></name></author>
<updated>2014-11-15T18:05:17+01:00</updated>
<published>2014-11-15T18:05:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104126#p104126</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104126#p104126"/>
<title type="html"><![CDATA[Niedziałajacy kod ASM dla magicled w ATMega328P]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9263&amp;p=104126#p104126"><![CDATA[
Witam,<br /><br />Po obejrzeniu genialnych poradników Mirka na temat MagicLED postanowiłem pobawić się jedną linijką. Pojawił mi się w głowie pewien pomysł, w którym mógłbym wykorzystać diody WS2812B, jednak pojawiła się pewna przeszkoda... i to tak na początek przygody z linikją :/<br /><br />Problem jest zapewne prosty ale mimo iż spędziłem nad inwestygacja mnóstwo czasu nie odnalazłem błędu.<br />Od razu piszę, że dla kodu <span style="text-decoration: underline">bez</span> asemblera w stylu poradników dla MagicLED część 4 lub 5 diody świecą poprawnie. Problem się pojawia gdy chcę korzystać ze wstawek asemblerowych.<br /><br /><strong>Problem:</strong> ATMega328P (F_CPU = 20MHz) nie wysyła żadnych danych na port określony jako wyjściowy - PB0 (sprawdzane oscyloskopem).<br /><br />Poniżej jest mój kod, który jest (tak mi się przynajmniej wydaje) identyczny z filmu <strong>06b</strong>.<br /><br /><em>main.c</em><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br /><br />#include &quot;ws281x.h&quot;<br /><br />TWSRGB ws_rgb_leds&#91;WS_LED_CNT&#93;;<br /><br />int main(void)<br />{<br /><br />memset(ws_rgb_leds, 200, WS_LED_CNT * 3);<br />ws281x_asm_send(ws_rgb_leds, WS_LED_CNT, WS_PIN_NR);<br /><br />while(1) {<br /><br />}<br /><br />return 0;<br />}[/syntax]<br /><br /><em>ws281x.h</em><br /><br />[syntax=c]#ifndef WS281X_H_<br />#define WS281X_H_<br /><br />//konfiguracja pinu sterujacego<br />#define WS_PIN_NR PB0<br />#define WS_PIN(1&lt;&lt;WS_PIN_NR)<br />#define WS_PORTPORTB<br />#define WS_DIRDDRB<br /><br />//ilosc swiecacych diod<br />#define WS_LED_CNT 10<br /><br />typedef struct {<br />uint8_t g;<br />uint8_t r;<br />uint8_t b;<br />} TWSRGB;<br /><br />void ws2812_init(void);<br />void ws281x_asm_send(void *data, uint16_t datlen, uint8_t pin);<br /><br />#endif /* WS281X_H_ */[/syntax]<br /><br /><em>ws281x.c</em><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;string.h&gt;<br /><br />#include &quot;ws281x.h&quot;<br /><br />void ws2812_init(void)<br />{<br />WS_DIR |= WS_PIN;<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 />//&quot;pin&quot; jako wyjscie<br />WS_DIR |= pin;<br />//mnozenie przez 3 (RGB)<br />datlen *= 3;<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 />//podwojny skok w te samo miejsce w celu wydluzenia czasu<br />&quot;rjmp .+0\n\t&quot;<br />&quot;rjmp .+0\n\t&quot;<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 />//podwojny skok w te samo miejsce w celu wydluzenia czasu<br />&quot;rjmp .+0\n\t&quot;<br />&quot;rjmp .+0\n\t&quot;<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 />//podwojny skok w te samo miejsce w celu wydluzenia czasu<br />&quot;rjmp .+0\n\t&quot;<br />&quot;rjmp .+0\n\t&quot;<br />&quot;nop\n\t&quot;<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 />}[/syntax]<br /><br />Czy coś jest nie tak w tej wstawce asemblerowej, że na PB0 nie ma żadnych danych?<br /><br />Dziękuję!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=566">jan mazur</a> — 15 lis 2014, o 18:05</p><hr />
]]></content>
</entry>
</feed>