Fórum témák
» Több friss téma |
Megpróbáltam értelmezi, de elég nehéz volt. De nem sikerült úgy látom a válaszodból.
1. pontosabban specifikáld a problémád 2. mellesleg sok megoldás lehet erre a problémára. FOR IF akkor is kell. 3. nem oldom meg a problémád. max segítek
Nyilván nem úszom meg a for-if kombót, de minimalizálni szeretném.
Még nem nagyon számolgattam, de jó lenne, ha ez a feltöltés beleférne 10-15ms-ba, ami elég karcsú, még az ESP32 esetében is, de majd ha haladok a projektel akkor majd kiderül.
Nem teljesen értem mit szeretnél, de ha ismétlődő elemeit vannak "amikor ráérsz" kidolgozol egy buffert és memcpy vagy ha van memória akkor csinálsz valami generátort ami constans tömböket csinál neked majd ezeket memcpy-vel töltöd a bufferedbe.
Szerk.: A "ráérsz" művelet mellé ha van DMA és double buffered-be csinálod akkor amíg megy ki az info addig tudsz még egy buffert kidolgozni. A hozzászólás módosítva: Ápr 30, 2020
Nem hiszem, hogy az ESP32 RMT-je DMA-s de utánanézek. Az info elvileg 800kb/s sebességgel távozik ebből ez kb 7.5ms, de el tudom fogadni a dupláját, az még belefér egy dinamikus frissítésbe. A következőt kell elképzelni.
Van egy címezhető LEDsorom, SK6812RGBW egyszerűség kedéért mondjuk 6db LED amire feltöltök, valamilyen mintát, (piros, kék, sárga, zöld kék, piros). A szín az ismétlődés, ami összevissza, de a minta mindig ugyanaz.szám. Érthetőség kedvéért számokkal jelölve a mintát(1,2,3,4,2,1)Mindegy , hogy a szám milyen szín, de az azonos számok azons színt jelölnek, ezt értem mintán. Az egyes elemek nem egy byte, hanem mivel RGBW kód így 4 byte, vagy egy 4 byteos tömb. Piros esetében pl {255,0,0,0}. Ezeket kell a megadott minta szerint bemásolni ( a példa szerint egy 6x4=24 elemű pufferbe). Egy szín esetében ez még nem is nehéz, de ha a mintában az összes szín változik akkor már valami kereső algoritmus szerűt kellene írni, ami mondjuk 1500 LED vagyis 6000 byte esetében egyenlőre nem tudom mennyi idő alatt fut le, még 240MHz-es ESP32-n is. Na valammi ilyesmin töröm a fejem most, de nagyon, hogy minél gyorsabb legyen Kigészítésként, a minta is változtatható lesz majd, ha minden jól megy és sikerül kitalálnom. A hozzászólás módosítva: Ápr 30, 2020
Ha jól látom kb 500k RAM-od van ha a címezhető led-ek 6k foglalnak és tudod hogy egy frame kitolása 7.5ms akkor miért nem csinálsz egy queue-t?
Amiben annyi frame-et előre dolgozol ahhoz, hogy legyen időd a következő a renderelendő frame-t mindig renderelni. Kétlem, hogy a 240 MHz controller-ben ne lenne DMA, de ha nincs használsz UART-ot vagy SPI-t és IT-vel pakolod ki az adott buffer-t. Természetesen a címezhető led-ekhez egyik periféria sem jó, de eSDi rakott össze egy egyszerű logikát (amit CLC-vel (csak PIC) használt, de diszkrétbe is meg tudod oldani) amivel tudod SPI-vel hajtani a LED-eket így a software-nek nem kell pollingal a byte-okat küldeni Bővebben: Link. Nem tudom, most hogyan van implementálva nálad a kommunikáció a LED felé, de ha a software pörgeti ki a bit-eket akkor másik lehetőség, hogyha az előző nem tetszik, használj TIMER-t így megint tehermentesítheted a software-t és több időd lesz renderelni.
Az ötlet jó lenne, de a dinamikus frissítés egy spektrumanaliztor-szerű dolog, tehát zene fogja meghajtani, amit sajnos nem tudok előre bufferelni. Nem tudom konkrétan hogy kezeli az arduino könyvtár a kiküldést,annyira nem mentem bele, de ez a leggyorasabb és legjobb amit találtam, de nem bitbillegteti az biztos, hanem az RMT hardver küldi ki. Az RMT buffer feltöltése nem tudom hogy történik a háttérben. A PIC-en én is SPI-vel küldtem ki az adatokat, de ez itt nem játszik, mert így is szét kell bontanom a kimenetet (8 RMT csatorna van az EPS32-ben), hogy megmaradjon a hang dinamikája ennyi LED esetében. Ha eljutok odáig akkor írok valami egyszerű rutint, hogy a statikus adat mennyi idő alatt megy ki. Egyébként mintha meg is lenne adva, ez egy jól dokumentált könyvtár, majd utánanézek. Mindenesetre köszönöm az ötletelést, majd jelentkezem mi hogy megy
Aki szeret C(C++) ban programozni,annak ajánlom a sourceboost programot.Eddig nagyon jó pénzért árulták most(nem tudom meddig) ingyenes. Szimulációt is lehet vele csinálni. Itt a link :Sourceboost
Csak ez a plusz szolgáltatás fizetős:Bővebben: Link A hozzászólás módosítva: Aug 8, 2020
Mi a helyzet a licenszfüggő korlátozásokkal? Bővebben: Link
Idézet: „SourceBoost V8.00 SourceBoost is now FREE. Version 8.00 is available to download. We are crawling trough our web site to bring it up-to-date. Please ignore references to licensing if you find any.”
A SorceBoost c fordítóval szenvedek, valaki megtudná mondani mi ez a hibaüzenet?
Úgy tűnik, a fordító érzékeny a kis/nagy betűkre. Töröld a "peie = 1" sort.
Nagy betűvel is ugyan ez a hiba jön. A GIE =1; vagy a gie=1; is ez a probléma.
A hozzászólás módosítva: Aug 26, 2020
Az általad használt #define nem teszi "változóvá" a PEIE szimbólumot, így nem szerepelhet értékadás baloldalán.
A hibaüzenet azt mondja hogy a bal oldali operandus ( PEIE ) nem balérték, vagyis nem állhat egy értékadás bal oldalán.
Oka: A PEIE konstansként van definiálva. A makró behelyettesítése után a fordító ezt látja amivel nem tud mit kezdeni: 0x0006 = 1; Látom közben megelőztek A hozzászólás módosítva: Aug 26, 2020
Köszi mind kettőtök válaszát. A regiszter fájlban szerepel PEIE is és #include "PIC16F690.h" is be van rakva. A tmr0=1; nem reklamál a fordító, ezt nem értem.
Köszi. Az set_bit(intcon, PEIE); ezt elfogadja. A hitech, vagy mikroc fordítóknál ez nem gond, akkor hozzá kell ehhez is szoknom.
Esetleg:
Köszi ez is működik. A #define _PEIE intcon.PEIE utána _PEIE=1; is jó.
Sziasztok! Sourceboost C Újabb problémába ütköztem, valós számokkal műveletek. Tehát float típusú változókkal műveletek, nem tudom rá venni a fordítót, hogy működjön a dolog.
A hozzászólás módosítva: Aug 27, 2020
Létezik-e ilyen néven a használni kívánt függvény? Mert a hibaüzenet azt mutatja, hogy ilyen nincs. Kis betű, nagy betű nem mindegy!
Szia! a float.h-ban benne van.
Kezd az agyam eldurranni ettől a SourceBoost c progitól, de ez ingyenes sajnos. Más fordítóknál működik a X=(int)300/0.09765; .Ennél telerakták ilyen hülye függvényekkel amik vagy működnek vagy nem.
Közben rájöttem igazad volt hiányzott a float.pic16.lib fájl.
Örvendek, hogy sikerült megoldani. A .h file csak a header, maga a kód a lib-ben van.
Köszi, jó ez csak hozzá kell szokni.
A jó ez attól füg milyen kódot fordít. Az XC is működik, de botrányos amit fordít.
Legalábbis az ingyenes verzió. A hozzászólás módosítva: Aug 29, 2020
Erről nem tudok mit nyilatkozni, most használom először.
Flowcode v7 vagy régebbi alapértelmezett fordítója a SourceBoost. Fényévekkel rövidebb kódot generál, mint az XC ingyenes verziója.
|
Bejelentkezés
Hirdetés |