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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-09-24T20:37:00+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=22&amp;t=22579&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-09-24T20:37:00+01:00</updated>
<published>2019-09-24T20:37:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222216#p222216</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222216#p222216"/>
<title type="html"><![CDATA[Re: Akcelerator WS2812 dla Arduini, AVR, PIC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222216#p222216"><![CDATA[
<div class="quotetitle">Zealota napisał(a):</div><div class="quotecontent"><br />Apropos ledów, to warto zobaczyć:<br /><!-- m --><a class="postlink" href="https://www.youtube.com/watch?v=QWoCH6FRdpI" >https://www.youtube.com/watch?v=QWoCH6FRdpI</a><!-- m --><br />Koniecznie od początku do końca.<br /></div><br /><br />Heh - COŚ PIĘKNEGO dla oka <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... i takie projekty - pokazują, że w sumie mało ważne na jakim to procku <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... ważne żeby aż TAK przemyśleć całość - magiczny efekcik <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> — 24 wrz 2019, o 20:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zealota]]></name></author>
<updated>2019-09-24T19:30:54+01:00</updated>
<published>2019-09-24T19:30:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222214#p222214</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222214#p222214"/>
<title type="html"><![CDATA[Re: Akcelerator WS2812 dla Arduini, AVR, PIC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222214#p222214"><![CDATA[
Apropos ledów, to warto zobaczyć:<br /><!-- m --><a class="postlink" href="https://www.youtube.com/watch?v=QWoCH6FRdpI" >https://www.youtube.com/watch?v=QWoCH6FRdpI</a><!-- m --><br />Koniecznie od początku do końca.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16487">Zealota</a> — 24 wrz 2019, o 19:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Semi]]></name></author>
<updated>2019-09-24T17:50:54+01:00</updated>
<published>2019-09-24T17:50:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222212#p222212</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222212#p222212"/>
<title type="html"><![CDATA[Re: Akcelerator WS2812 dla Arduini, AVR, PIC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222212#p222212"><![CDATA[
<div class="quotetitle">qwertownik napisał(a):</div><div class="quotecontent"><br />Możesz pomyśleć jak to zminiaturyzować najbardziej<br /></div><br />To jest prototyp. Ma złącza SPI, I2C, USB, UART, SWD, kilka testowych. Finalnie płytka może być co najmniej 2 razy mniejsza a myślę, że i 3. Jak pomyśleć, że to do Arduino to niepotrzebny stabilizator 3,3V.<br /><br /><div class="quotetitle">qwertownik napisał(a):</div><div class="quotecontent"><br />projekt do pokazania w elektronice praktycznej<br /></div><br />Ciekawy pomysł.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20851">Semi</a> — 24 wrz 2019, o 17:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Semi]]></name></author>
<updated>2019-09-24T17:12:45+01:00</updated>
<published>2019-09-24T17:12:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222210#p222210</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222210#p222210"/>
<title type="html"><![CDATA[Re: Akcelerator WS2812 dla Arduini, AVR, PIC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222210#p222210"><![CDATA[
<div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br />ale już w głowie mam cykliczny przesył tak jak to zrobiłem dla LCD 16x2 gdzie jego obsługa zajmowała w pętli głównej kilkanaście mikrosekund, a nie kilkadziesiąt ms. Ciekaw jestem tylko czy tak się da w tym przypadku<br /></div><br />O ile będziesz miał odpowiednio dużo RAM i DMA to tak. Niewielki (160x128) kolorowy LCD wymaga ponad 40kB na bufor. Masz więc pierwszy, w przypadku AVR, problem. Możesz kombinować z zewnętrznym RAM ale dostęp do niego jest wolniejszy niż do wewnętrznego SRAM. Drugi problem to czas transmisji. Na AVR realnie nie wyciśniesz 8 czy 10MHz, owszem zegar taki będzie ale pomiędzy bajtami przerwy. Można kombinować jakieś bloki po np 32 bajty, nie sprawdzać czy bajt wyszedł z SPI tylko wstawić NOP. Powiedzmy, że nie masz przerw, które przy standardowym podejściu są dłuższe niż transmisja bajtu. Aby wysłać 40,96kB potrzebujesz, (taktowanie 20MHz, SPi 10MHz) 32ms. Oczywiście to iluzja, poniżej 40 raczej nie zejdziesz a pewnie będzie to bliżej 50. Aby więc uzyskać sensowne FPS, CPU nie może robić nic innego jak wysyłać dane. Rozwiązaniem jest DMA. Kolejne to że SPi w wyświetlaczach najczęściej może pracować do 15MHz a to dla AVR jest nieosiągalne.<br />Przy wyświetlaczach 320x240 i AVR zapomnij. Pierwszy problem brak RAM. Drugi szybkość transmisji. W przypadku SPI kasowanie ekranu trawa teoretycznie 60ms w praktyce pond 100. Nawet mając bufor w RAM max to 10 FPS. Bez bufora (320x240 to 153kB RAM) stawiasz piksel po pikselu wysyłając 7 bajtów. Gdybyś wysyłał z bufora są to tylko 2 bajty.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 11 minutach ]</span></strong><br /><br />Tryb równoległy pochłonie trochę pinów, zatrzask adresu nie jest potrzebny. AVR musi mieć busskepper, machanie pinami aby wygenerować WR nie ma sensu. Nadal jednak problem braku RAM. Jak dasz zewnętrzny, to trzeba dodać dekoder adresu, bankowanie - gra niewarta świeczki.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 21 minutach ]</span></strong><br /><br />Dobra rada. Zanim zaczniesz kupować wyświetlacze, podłączać, próbować weź kalkulator w dłoń i policz. Ostrożnie podchodź to FPS, wyjdzie 10 i stwierdzisz, że wystarczy. Otóż nie! Jeśli dane będziesz wysyłał 100ms będzie widać rysowanie grafiki, kasowanie ekranu. Aby nie było takich efektów nie możesz przekroczyć 30, max 40 ms.<br /><br />Obsługiwałem różne LCD, od mono 100x32 do 480x320 kolor, po I2C, SPI, równolegle (FCM w SPT32). Masz wątpliwości pytaj. Przy większych rozdzielczościach i AVR, jedyne sensowne rozwiązanie to FT8xx.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20851">Semi</a> — 24 wrz 2019, o 17:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2019-09-24T16:59:43+01:00</updated>
<published>2019-09-24T16:59:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222209#p222209</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222209#p222209"/>
<title type="html"><![CDATA[Re: Akcelerator WS2812 dla Arduini, AVR, PIC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222209#p222209"><![CDATA[
Muszę się kiedyś i ja zająć wreszcie graficznymi wyświetlaczami. Na razie nie było potrzeby i przede wszystkim czasu na testy, ale już w głowie mam cykliczny przesył tak jak to zrobiłem dla LCD 16x2 gdzie jego obsługa zajmowała w pętli głównej kilkanaście mikrosekund, a nie kilkadziesiąt ms. Ciekaw jestem tylko czy tak się da w tym przypadku <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=1922">SylwekK</a> — 24 wrz 2019, o 16:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Semi]]></name></author>
<updated>2019-09-24T16:49:22+01:00</updated>
<published>2019-09-24T16:49:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222208#p222208</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222208#p222208"/>
<title type="html"><![CDATA[Re: Akcelerator WS2812 dla Arduini, AVR, PIC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222208#p222208"><![CDATA[
<div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br />Jeśli to ma być poważniejszy projekt to po co w ogóle zawracać siebie głowę i AVR i ARM?<br /></div><br />Oczywiście wystarczy ale widzę, że jest grupa programistów, która lubi obkładać AVR niezliczonymi układami jak ekspandery portów zamiast użyć większego AVR. LCD przez PCF8574 choc wyprowadzeń mikrokontrolera jest na tyle dużo, ze można bez problemu podłączyć bezpośrednio. Nextion (STM32) + AVR zamiast użyć ARM. Czasem używają 2 płytek arduino a wystarczyłaby jedna. Moda jakaś na budowanie z dużej ilości elementów i drogo? Nie, raczej niewiedza i strach przez nowym.<br /><br /><br />Jeszcze nie zabrałem się za pisanie biblioteki dla dopalacza LCD ale wyniki pierwszych testów czasowych już są. Wysłanie danych o 128x128 pikseli trwa 47ms<br /><a href="https://obrazkiforum.atnel.pl/20851/b9e13739faed980b49abd438b8430892.gif"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20851/b9e13739faed980b49abd438b8430892.gif" alt="Obrazek" /></a><br />Tradycyjną opcją dwa razy dłużej. Ważne jest jednak coś jeszcze, to, że nie widać jak &quot;obrazek&quot; jest rysowany, bo wyświetlony zostaje w 30ms. Sama więc transmisja może trwać długo ale na ekranie treść pojawi się &quot;natychmiast&quot; - klasyczne podwójne buforowanie. Oczywiście w czasie gdy dane są wysyłane do LCD, ARM może przyjmować kolejne dane. Ten dopalacz będzie bardziej przydatny niż do WS2812 tym bardziej, że planuję opcję dla wyświetlacza za do 480x320. Pierwsze testy już robiłem. Samą treść przekazuję do LCD w ok 30ms gorzej będzie z odbiorem z AVR.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20851">Semi</a> — 24 wrz 2019, o 16:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2019-09-24T16:15:35+01:00</updated>
<published>2019-09-24T16:15:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222207#p222207</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222207#p222207"/>
<title type="html"><![CDATA[Re: Akcelerator WS2812 dla Arduini, AVR, PIC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222207#p222207"><![CDATA[
Może i cel dobry, ale kompletnie tego nie widzę w praktyce. Jeśli ktoś potrzebuje migadełka do choinki czy na imprezę urodzinową to wystarczy zwykły AVR, który obleci sporo led i jeszcze więcej efektów. Jeśli to ma być poważniejszy projekt to po co w ogóle zawracać siebie głowę i AVR i ARM? Nie wystarczy sam ARM? Wg mnie to takie trochę naginanie rzeczywistości na siłę, ale może się mylę <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=1922">SylwekK</a> — 24 wrz 2019, o 16:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Semi]]></name></author>
<updated>2019-09-24T15:31:50+01:00</updated>
<published>2019-09-24T15:31:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222206#p222206</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222206#p222206"/>
<title type="html"><![CDATA[Re: Akcelerator WS2812 dla Arduini, AVR, PIC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222206#p222206"><![CDATA[
<div class="quotetitle">Zealota napisał(a):</div><div class="quotecontent"><br />Pewnie można zejść do 0,8 [us] na bit, bo tak próbowałem &quot;przetaktować&quot; różne takie diody i potrafiło to działać<br /></div><br />Odradzam działanie poza dopuszczalnymi przez producenta granicami. Efekt może być taki, że u jednej osoby program dział u innej nie. Inna seria diod i przetaktowanie jest nieskuteczne.<br /><div class="quotetitle">Zealota napisał(a):</div><div class="quotecontent"><br />Trzeba iść na kompromis, albo duża ilość diod albo duże &quot;fps&quot;.<br /></div><br />Można wysyłać dane równolegle do kilku łańcuchów LED. W przypadku AVR wyjścia nie ma w ARM, kilka SPI lub UART i DMA to nie problem.<br />W AVR można ewentualnie podłączyć kilka akceleratorów (bez problemu można podłączyć ich 8) a w każdym małą ilość LED i SPI na MAX. Przy SPI 8MHz dane wysyłane są ponad 8 razy szybciej niż do led bezpośrednio. Można więc w tym samym czasie wysłać dane do 8 łańcuchów. Zamiast do 800 LED mogę wysłać do 6400 lub do 800 odświeżając 8 razy częściej. Gdy użyję palety 16-bit, a na oko, różnicy pomiędzy 24 a 16 bit nie widać, to łańcuchów może być 10 lub odświeżanie 10 razy częstsze.<br /><br /><br />Akcelerator powstał na prośbę znajomego, zagorzałego AVR-owca, po trochu też od pewnego czasu Arduino-wca. Dobrze, że już odpuścił 8051, bo gdy ja działałem na 6833x w C on męczył się na 8051 w ASM. Teraz chłopak walczy z AVR i ESP, ja z STM32.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20851">Semi</a> — 24 wrz 2019, o 15:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zealota]]></name></author>
<updated>2019-09-24T14:37:20+01:00</updated>
<published>2019-09-24T14:37:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222204#p222204</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222204#p222204"/>
<title type="html"><![CDATA[Re: Akcelerator WS2812 dla Arduini, AVR, PIC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222204#p222204"><![CDATA[
Dzięki za próbę doprecyzowania. <br />Niestety wzór, który podałem n*24*1,2[us] + czas_resetu wg mnie wywraca całość &quot;na plecki&quot;, przynajmniej na obecnym moim pojmowaniu tego zagadnienia <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Częstotliwość  zboczy powinna oscylować wokoło 800 kHz (1/1,25[us] = 800KHz), bo tak wynika z dokumentacji tych diod. Oczywiście SPI można sobie pędzić różnie, ale bez naruszania zboczy na wyjściu (u Ciebie to chyba J4 ze schematu).<br />Pewnie można zejść do 0,8 [us] na bit, bo tak próbowałem &quot;przetaktować&quot; różne takie diody i potrafiło to działać, a efektem byłby możliwy, poprawnie sterowany, o 10 % większy łańcuch w zadanym czasie.<br /><br /><div class="quotetitle">Semi napisał(a):</div><div class="quotecontent"><br />transmisja danych dla 640 LED trwa około 4,8ms wysłanie danych do ośmiu akceleratorów zajmie 39ms.<br /></div><br />a zarazem mamy: <div class="quotetitle">Semi napisał(a):</div><div class="quotecontent"><br />Wysłanie danych do 640 LED zajmie 19ms<br /></div><br />To 19 ms to oczywiście poprawna wartość, wg nawet mojego wzoru, a to wcześniejsze zdanie?<br />Wyczytałem, że transmisja dla 640 LED potrwa ok 4.8 ms - to mi nie pasowało.<br /><br />Z drugiej strony to chyba myślę, że może o czymś innym rozmawiamy, Kolega o technikach &quot;wewnętrznych&quot;, które mają za zadanie przygotować peryferia pod efekt finalny czyli 800KHz na pinie, a ja pisałem tylko o tym, co już jest &quot;za pinem&quot; - a tu 800 KHz i finalnej ilości diod/fps nie da się oszukać. Trzeba iść na kompromis, albo duża ilość diod albo duże &quot;fps&quot;. Nic innego do głowy mi nie przychodzi <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> — 24 wrz 2019, o 14:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Semi]]></name></author>
<updated>2019-09-24T13:36:47+01:00</updated>
<published>2019-09-24T13:36:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222203#p222203</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222203#p222203"/>
<title type="html"><![CDATA[Re: Akcelerator WS2812 dla Arduini, AVR, PIC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222203#p222203"><![CDATA[
<div class="quotetitle">Zealota napisał(a):</div><div class="quotecontent"><br />Wracając do tematu nie rozumiem na czym ma polegać ta akceleracja.<br /></div><br />Dane można wysyłać taktując SPI zegarem 8MHz. Sterując bezpośrednio LED zegar to 800kHz. Wysłanie danych do 640 LED zajmie 19ms - 1/(800000/24/640). Używając SPI 1,9ms - 1/(8e6/24/640) więc 10 razy mniej czasu. Gdy użyjemy palety 16-bit 1,2ms - 1/(8e6/16/640), 8-bit 0,64ms - 1/(8e6/8/640). Bezpośrednio WS2812 nie przyjmą danych 8 czy 16 bit, tylko i wyłącznie 24-bit. Akcelerator konwertuje dane z 8/16 bit na 24. Dane do samych led będą więc wysyłane tyle i muszą ale mikrokontroler wysyłając do akceleratora może to zrobić szybciej a także i wolniej. <span style="text-decoration: underline">Przerwy w transmisji danych do akceleratora w niczym nie przeszkadzają</span> gdyby takie przerwy zrobić podczas transmisji danych do LED efekt jest znany.<br /><br /><div class="quotetitle">Zealota napisał(a):</div><div class="quotecontent"><br />Obejście zajęcia pamięci to mogę zrozumieć. Kodujemy kolory w buforze pamięci RAM na 16 bitach (nie na 32, gdzie 32-24=8 bitów jest pustych).<br /></div><br />Nic nie jest puste. Konwersja z 16 na 24-bit wygląda podobnie jak z 16 na 18 w LCD. W przypadku 8-bit gdy wybieram kolor np 1, to jest mu przypisane RGB(255,0,0), kolor 2 to np RGB(0,255,0) itd według &quot;bezpiecznej palety&quot; 218 barw <!-- m --><a class="postlink" href="https://pl.wikipedia.org/wiki/Kolory_w_Internecie" >https://pl.wikipedia.org/wiki/Kolory_w_Internecie</a><!-- m --><br /><div class="quotetitle">Zealota napisał(a):</div><div class="quotecontent"><br />Musimy pamiętać, że i tak musimy posłać szeregowo 24 bity - brakujące bity zerujemy tak, by pojedynczy stan PWM miał nieznaczące zera, niestety tracimy na zakresie jasności.<br /></div><br />Jak już napisałem nic się nie traci. W przypadku 16-bit dane transkodowane sa z R5G6B5 na R8G8B8 przy czym nie jest tak, ze najmłodsze bity sa zerowane. Tak jak w przypadku transkodowania w LCD z 16 na 18-bit, tak i tu, stan najmłodszych bitów danych wyjściowych jest zależny od stanu najstarszych bitów wejściowych.<br />W przypadku trybu 8-bit 218 barw powstał problem regulacji jasności, którego nie ma w 24 czy 16 bit. Jak kolor czerwony ma przypisane RGB(255,0,0) to ma i konie. Dlatego wprowadziłem możliwość regulacji jasności (32 poziomy), podobnie w trybie 8-bit R3G3B2. Tu działa także mechanizm jak w LCD. Na przykładzie barwy niebieskiej gdzie sa tylko 2 bity na kolor. <br />bity wejściowe 00 to wyjściowe 00000000<br />01 -&gt; 01010101<br />10 -&gt; 10101010<br />11 - &gt; 11111111<br /><br />Kolejna zaleta, to że w czasie transmisji danych do akceleratora działają przerwania a nawet można zrealizować ją na przerwaniach. To na AVR jest możliwe, ale jak pisałem, nie łatwe i ma sporo ograniczeń.<br /><br /><br /><strong><span style="text-decoration: underline">Podsumowując:</span></strong><br />- Dane mogą być wysyłane szybciej (SPI 8MHz) niż gdyby bezpośrednio sterować LED.<br />- Kolory można kodować także w 16 bit co zmniejsza czas transmisji o 33% jak i o tyle zapotrzebowanie na RAM.<br />- Możliwe kodowanie 8-bit co zmniejsza czas transmisji o 66% jak i o tyle zapotrzebowanie na RAM.<br />- Bezproblemowo działają przerwania.<br />- Transmisja może być realizowana na przerwaniach.<br /><br /><br />Teraz kończę akcelerator graficznych LCD. Przyspieszenie wynika z:<br />- Transmisji 8 a nawet 4-bit.<br />- Kodowania współrzędnych jednym a nie dwoma bajtami (dla LCD do 255x255).<br />- Komend CLS, LINE, STRING coś jak w FT801. <br /> <br />Łatwo oszacować przyspieszenie. Kodowanie 8-bit to w przypadku wysyłania treści obrazka dwa razy mniej danych. Gdy użyjemy 4-bit (16 barw) to wysłanie rysunku np ikony daje przyspieszenie 4 krotne.<br />Przy stawianiu pojedynczych pikseli, klasycznie wygląda to tak:<br />CMD, X, Y, COLOR, łącznie 7 bajtów (CMD jeden, pozostałe po dwa)<br />Do akceleratora:<br />także CMD, X, Y, COLOR ale wszystkie dane 8-bit co daje 4 bajty. Przyspieszenie ok 43%.<br />W przypadku wysyłania stringu czy linii przyspieszenie jest rzędu setek a nawet tysięcy razy.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 33 minutach ]</span></strong><br /><br />Taki akcelerator można by zbudować na AVR ale:<br />- W czasie transmisji danych do LED przez akcelerator nie może odbierać danych z mikrokontrolera sterującego. W konsekwencji trzeba zapewnić mechanizm czekania mikrokontrolera aż akcelerator będzie gotów. W praktyce max odświeżanie spada więc 2 razy. W ARM problemu nie ma dane wysyłane są do LED a CPU przyjmuje kolejną ramkę do wyświetlenia.<br />- AVR nie przyjmie danych po SPI taktowanym 8MHz. Nie próbowałem, ale prawdopodobnie max to 1MHz co daje 128 cykli maszynowych pomiędzy bajtami. Ile rozkazów? Można szacować jakieś 90. Szału nie ma a trzeba jeszcze wejść/wyjść z przerwania, odłożyć/zdjąć dane na/z stos. Można kombinować w pętli głównej. Przy 2MHz pomiędzy bajtami są tylko 64 cykle (ok 45 rozkazów), 4MHz 32 cykle (22 rozkazy) 8MHz 16 cykli (11 rozkazów).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20851">Semi</a> — 24 wrz 2019, o 13:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zealota]]></name></author>
<updated>2019-09-24T12:54:28+01:00</updated>
<published>2019-09-24T12:54:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222199#p222199</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222199#p222199"/>
<title type="html"><![CDATA[Re: Akcelerator WS2812 dla Arduini, AVR, PIC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222199#p222199"><![CDATA[
Mam pewne wątpliwości co do opisu, nie mogę wywnioskować na czym polega ta &quot;akceleracja&quot;, być może brakuje mi wiedzy, ale na razie brzmi to jak jakieś voodoo, ale po kolei.<br /><br />    Żeby &quot;wysterować&quot; jedną diodę WS2812 w łańcuchu należy przekazać do wejścia diody sygnał o długości mniej więcej 24*1,2 = 288 [us].<br />Następnie należy odczekać tzw czas resetu. W zależności od rodzaju / klonu diody może to być albo 9, 30 a czasami więcej mikrosekund. <br />Zatem minimalny czas na zmianę koloru dla pojedynczej diody to: 288 + czas_resetu, dla diod &quot;jakie wskazałem&quot; może to być 288 + 30 = 318 [us]. Dla n-diod będzie to n*288 + 30 [us]<br />Zatem żeby zmienić wartość koloru dla 640 diod to potrzebny jest czas 18,4 [ms] co odpowiada odświeżaniu 54 fps.<br /><br />    Tak przy okazji ta nazwa &quot;reset&quot; nie jest sensowna, bardziej to czas &quot;latch&quot;, czyli po jakim czasie niskiego stanu, na wejściu diody, następuje zatrzaśniecie przesłanych danych. W ten sposób jesteśmy w stanie co pewien czas (nazwijmy go odświeżania) zmieniać wyświetlanie koloru. Być może to tylko semantyka...<br /><br />   Wracając do tematu nie rozumiem na czym ma polegać ta akceleracja.<br />Ja bym sobie wyobrażał to tak, że &quot;jedziemy&quot; na kilka kanałów (łańcuchów) diod i synchronizujemy owe kanały. To niestety nie wynika z opisu, nawet załączony schemat ma tylko jedno wyjście na łańcuch diod, zatem o co chodzi?<br /><br />Obejście zajęcia pamięci to mogę zrozumieć. Kodujemy kolory w buforze pamięci RAM na 16 bitach (nie na 32, gdzie 32-24=8 bitów jest pustych). Musimy pamiętać, że i tak musimy posłać szeregowo 24 bity - brakujące bity zerujemy tak, by pojedynczy stan PWM miał nieznaczące zera, niestety tracimy na zakresie jasności.<br />Natomiast przyśpieszenia transmisji to już nie kumam, bo żeby poprawnie przekazać kolory do łańcucha to nie ominiemy czasu wg wzoru: n*288 + czas_resetu ( [us], gdzie n ilość diod ).<br /><br />W celu uzupełnienia, żeby otrzymać sensowne 30 fps z jednego kanału to można podłączyć co najwyżej ok 1150 diod, a dla 24 fps ok 1400.<br /><br />Tak jak pisałem wyżej warto byłoby doprecyzować na czym polega ta &quot;akceleracja&quot;, ja nie umiem tego wywnioskować z opisu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16487">Zealota</a> — 24 wrz 2019, o 12:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Semi]]></name></author>
<updated>2019-09-24T10:49:10+01:00</updated>
<published>2019-09-24T10:49:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222192#p222192</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222192#p222192"/>
<title type="html"><![CDATA[Akcelerator WS2812 dla Arduini, AVR, PIC]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22579&amp;p=222192#p222192"><![CDATA[
Diody WS2812 zdobyły niezwykle dużą popularność. Niestety ich sterowanie nie jest łatwe. Częstym problemem jest fakt, że w czasie transmisji danych do diod zawieszane są przerwania a jeśli nie to obciążenie CPU, jeśli nie może być wspomagane przez DMA, jest bardzo duże. Nie bez znaczenia jest też potrzeba rezerwacji dużego obszaru RAM na bufor diod co jest bardzo odczuwalne mikrokontrolerach z małą ilością RAM. Wszystkie te problemy rozwiązuje akcelerator.<br /><br />Do komunikacji z akceleratorem wykorzystano interfejs I2C lub opcjonalnie SPI. Dzięki temu, w czasie transmisji danych, CPU może obsługiwać przerwania a także, możliwe jest, aby sama transmisja odbywała się w przerwaniach. Interfejs SPI umożliwia wysłanie danych szybciej niż miałoby to miejsce w przypadku bezpośredniej transmisji do LED. Opcjonalne tryby koloru 8 i 16-bit pozwalają zmniejszyć zapotrzebowanie na bufor pamięci RAM do 33 lub 66% w stosunku do bezpośredniego sterowania diodami oraz zmniejszają czas wysyłania danych. Biblioteki dla Arduino umożliwiają łatwą obsługę akceleratora.<br /><br />Charakterystyka:<br />Maksymalna liczba diod:640<br />Liczba akceleratorów 8 (na jednym fizycznym interfejsie)<br />Paleta barw:<br />24R8G8B8 – 16 mln barw<br />16R5G6B5 – 65536 barw<br />8-bitR3G3B2 – 255 barw, każda w 63 odcieniach (16065 barwy)<br />218 barw218+16 barw, każda w 63 odcieniach (14742 barw) opcjonalne<br />256 barw definiowanych przez użytkownika w 63 odcieniach (16128 barw)<br />Interfejs komunikacyjny:I2C, SPI, USB, UART<br />Prędkość transmisji:<br />SPI6 (8) MHz<br />I2C800kHz<br />UART921,6kb/s<br />USB12Mb/s<br /><strong>Akcelerator akceptuje napięcia do 5V na wejściach interfejsów komunikacyjnych!</strong><br /><br />Nawet na AVR taktowanym zegarem 8MHz, uzyskanie wymaganych rygorów czasowych dla WS2812 nie jest trudne. Niestety generowanie wymaganych czasów najczęściej odbywa się przez pętle opóźniające. W konsekwencji w czasie transmisji danych program nie może robić nic innego. W AVR konieczne jest zawieszenie przerwań, bo ewentualne wydłużenie poziomu wysokiego na wejściu Din WS2812 o ponad 600ns (jeden takt CPU w AVR) może powodować błędy w transmisji, natomiast przerwanie trwające ponad 20μs gdy Din ma znajduje się w poziomie niskim może zostać zinterpretowane jak sygnał RESET (LATCH) dla WS2812. Problem może rozwiązać transmisja z użyciem UART lub SPI ale wymaga to przepływności 2,4MB/s, możliwej do uzyskania dla AVR ale skorzystanie z mechanizmu przerwań USART powoduje 80...90% obciążenie CPU nawet gdy skorzysta się z wstawek assemblerowych. Pojawiają się także trudności z obsługą innych przerwań w czasie transmisji do diod spowodowane tym, że większość AVR nie ma wielopoziomowego systemu przerwań a nadawanie do WS2812 musi mieć najwyższy priorytet. Innym mankamentem jest zapotrzebowanie na pamięć RAM, które wynosi osiem bajtów na diodę gdy korzystamy z UART, dziewięć gdy z SPI co oznacza, że na 1000 led potrzeba 8 lub 9kB RAM. W pamięć 8kB wyposażone są tylko nieliczne AVRmega a program wymaga pamięci  na stos, stertę, zmienne. Co ważne, w przypadku użycia USART, mikrokontroler musi być taktowany zegarem co najmniej 18MHz. Wszystko to powoduje, że jedynym AVRmega, który jest w stanie wysterować dużą liczbę diod jest ATmega1284. Wydawać się może, że problem rozwiąże zewnętrzna pamięć danych, którą można podłączyć do niektórych AVR, ale dostęp do takiej pamięci zajmuje dwa razy więcej czasu niż do wewnętrznej SRAM przez co obciążenie CPU wzrośnie. <br />Opcjonalnie przewidziano możliwość komunikacji przez UART i USB. Wykorzystanie I2C/SPI pozwala na transmisję danych bez blokowania przerwań a nawet zrealizować ją na przerwaniach,  dzięki czemu CPU może realizować inne zadania w czasie transmisji. Opcjonalne tryby 8 i 16-bitowego kodowania koloru pozwala zmniejszyć zapotrzebowania na RAM o 66/33% przyspieszyć transmisję danych. Użyty w akceleratorze mikrokontroler STM32F072C8 posiada 16kB RAM co pozwala umieścić bufory dla 640 LED i danych odbieranych przez I2C/SPI.<br />Do jednej magistrali I2C, co pozwala wysterować 5120 diod (ekran o rozdzielczości 128x32 ma 4096 pikseli). W przypadku SPI, można podłączyć więcej niż osiem akceleratorów, przy czym każda kolejna ósemka wymaga osobnego sygnału strobu. Biorąc pod uwagę fakt, że przy zegarze SPI 8MHz, transmisja danych dla 640 LED trwa około 4,8ms wysłanie danych do ośmiu akceleratorów zajmie 39ms. Maksymalna częstotliwość odświeżania wyniesie 26Hz co oznacza, że do obsługi większej ilości niż 5120 LED potrzebny będzie mikrokontroler z większą ilością interfejsów SPI oraz DMA. Tak jak w przypadku AVRmega liczba SPI może zostać łatwo zwiększona, ponieważ przeważnie USART może pracować w roli SPI, tak problem DMA pozostaje. W takiej sytuacji należy sięgnąć po większy mikrokontroler. Xmega mają DMA ale w porównaniu do ARM ich możliwości nie są oszałamiające a cena bardzo często wyższa. ARM rozwiąże problem DMA, RAM ale w takim przypadku po co akcelerator skoro sam ARM bez problemu wysteruje tysiące LED a większość czasu spędzi w uśpieniu? Przed zastosowaniem akceleratora warto zastanowić się, czy nie lepiej, zamiast na AVR czy PIC, program napisać na ARM? W Internecie krążą mity na temat skomplikowania ARM. Prawda jest niego inna, program na ARM pisze się łatwiej niż na AVR zwłaszcza jak korzysta się z darmowych narzędzi dostarczanych przez producenta.<br /><br /><a href="https://obrazkiforum.atnel.pl/20851/229274c18ec16a918583404acd00b0f4.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20851/229274c18ec16a918583404acd00b0f4.jpg" alt="Obrazek" /></a><br /><a href="https://obrazkiforum.atnel.pl/20851/51e598bb572f2d3e5821386a845e830a.gif"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20851/51e598bb572f2d3e5821386a845e830a.gif" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/20851/d87b9320194395ddc7e8fa5d819bc7f1.gif"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20851/d87b9320194395ddc7e8fa5d819bc7f1.gif" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/20851/e5e71c015b73acaa0a756075d3b2079c.gif"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20851/e5e71c015b73acaa0a756075d3b2079c.gif" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/20851/c371ff0091138fe2adaa76dadddb5321.gif"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20851/c371ff0091138fe2adaa76dadddb5321.gif" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/20851/12235639fa939509dd8bf9788a8456b9.gif"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20851/12235639fa939509dd8bf9788a8456b9.gif" alt="Obrazek" /></a><br /><a href="https://obrazkiforum.atnel.pl/20851/a4e58a52547f785dec55dc305fceb572.gif"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/20851/a4e58a52547f785dec55dc305fceb572.gif" alt="Obrazek" /></a><br /><br />W załączniku dokumentacja, programy i filmy.<br />ws2812-ArduinoAVR.zip<br />Akcelerator_WS2812 ARM.zip<br />AkceleratorWS2812-SCH.pdf<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20851">Semi</a> — 24 wrz 2019, o 10:49</p><hr />
]]></content>
</entry>
</feed>