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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=16903&amp;mode</id>
<entry>
<author><name><![CDATA[usiex]]></name></author>
<updated>2016-11-25T16:05:01+01:00</updated>
<published>2016-11-25T16:05:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16903&amp;p=175607#p175607</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16903&amp;p=175607#p175607"/>
<title type="html"><![CDATA[Magic Led sterowanie z pilota]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16903&amp;p=175607#p175607"><![CDATA[
Witam<br />Zacznę od sedna problemu oto szkic mojego programu do sterowania efektami magic led za pomocą pilota z protokołem NEC.<br /><br />main.c<br /> [syntax=c]IR_Init();// inicjalizacja odbiornika IR<br />sei();<br />lcd_init();<br />IR_Callback_Register(moja_obsluga_ir); // rejestracja funkcji obsługi zdarzeń z pilota<br /><br />while(1){<br />IR_Event();<br /><br />switch(tryb){<br /><br />case 1:<br />efekt1();<br />break;<br /><br />case 2:<br />efekt2();<br />break;<br /><br />case 3:<br />efekt3();<br />break;<br />}<br /><br />}<br />}[/syntax]<br /><br />funkcje.c<br />[syntax=c]void efekt1(void){<br />i++;<br />if (i&gt;WS_LED_CNT)i=-1;<br /><br />ws_line( pasek, i-1,20,0x00 );<br />ws_line( pasek, i,20,0xafafaf );<br />if(i&gt;10)ws_line( pasek, i,4,0x00af00 );<br />if(i&gt;30)ws_line( pasek, i+16,4,0xaf0000 );<br /><br />     cli();<br />   ws281x_asm_send( pasek, WS_LED_CNT, WS_PIN );<br />        sei();<br />_delay_ms (45);<br /><br /><br />}<br /><br />void efekt2(void){<br />i++;<br />if (i&gt;WS_LED_CNT)i=-1;<br /><br />ws_line( pasek, i-1,5,0x00 );<br />ws_line( pasek, i,5,0xafafaf );<br />     cli();<br />   ws281x_asm_send( pasek, WS_LED_CNT, WS_PIN );<br />        sei();<br /><br />_delay_ms (85);<br /><br /><br />}<br />void efekt3(void){<br />int k;<br />if(k&gt;-10)k--;<br />if(k&lt;-10)k=WS_LED_CNT;<br /><br />ws_line( pasek, k-1,10,0x00 );<br />if(k%3==0){ws_line(pasek, k, 1, 0xaf);};<br />if(k%3==1){ws_line(pasek, k, 1, 0xaf00);};<br />if(k%3==2){ws_line(pasek, k, 1, 0xaf0000);};<br />         cli();<br />   ws281x_asm_send( pasek, WS_LED_CNT, WS_PIN );<br />        sei();<br />_delay_ms (15);<br /><br />}<br /><br />/*************************************************************************/<br />/* ************** funckcja do własnej obsługi zdarzenia IR  ************ */<br />/*************************************************************************/<br />void moja_obsluga_ir(uint8_t address, uint8_t command,<br />uint8_t key_time) {<br /><br /><br /><br />if( command == 0 &amp;&amp; key_time&gt;5 ) {tryb=10;} <br />if( command == 128) {tryb=1;};   <br />if( command == 64   ) {tryb=2;}; <br />if( command == 192 ) {tryb=3;};<br />       <br />        lcd_locate (1,0);<br />        lcd_int(tryb);<br />        lcd_locate (1,4);<br />        lcd_int(command);<br />        lcd_locate (1,10);<br />        lcd_int(key_time);<br /><br /><br />}[/syntax]<br /><br />Biblioteka do obsługi IR zaczerpnięta z tego postu <a href="http://forum.atnel.pl/topic16189.html?hilit=nec"  class="postlink">http://forum.atnel.pl/topic16189.html?hilit=nec</a> za którą dziękuje koledze Jatsekku.Problem jest następujący że funkcja realizująca efekt magic ledów rozwala odbiór kodów z pilota.Objawia się to tym że na wyświetlaczu bardzo ciężko dokonać zmiany zmiennej tryb reakcja na naciśniecie przycisku jest bardzo opóźniona i losowa.Samo wysyłanie do taśmy informacji przebiega poprawnie jeśli uda się uruchomić odpowiedni tryb zmian magic leda.Natomiast<br />Jeśli w  funkcji realizującej tryb zmian nie dokonam zablokowania przerwania  przed wysłaniem do paska danych <br />[syntax=c]ws281x_asm_send( pasek, WS_LED_CNT, WS_PIN );[/syntax]<br />wówczas odbieranie danych z pilota działa super bez problemu(widzę to na lcd) .Samo wysyłanie danych do paska ledów nie działa już prawidłowo  losowo zdarzają się rozbłyski różnych  diod.Jest problem również z przerwaniem obecnie działającego efektu i przejście do innego.Wydaje mi się że jest to problem przerwań lecz nie mogę tego rozgryźć.<br />Proszę o pomoc<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4295">usiex</a> — 25 lis 2016, o 16:05</p><hr />
]]></content>
</entry>
</feed>