Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Másik ötlet.
Az általad használt if sorozat vizsgálat esetén mindig megtörténik az összes vizsgálat, feleslegesen.
Bár lehet, hogy pont az egyforma futás idő miatt választottad az első verziót?
Igen, mert szerintem nem segít a dolgon, ha létezik olyan állapot, melynek hosszabb idejű fennállása bizonytalanná teszi a dolgot. Tehát ha mindig az 5-ös hang billentyűjét engedném el akkor nagyobb a terhelés, de akkor mindig pont az 5-ös hangot kéne kiadni, ami lehet lehetetlen... Tehát ez az algoritmus egyszerűsíthető szerintem, de nem így lenne célszerű, nem is véletlen van mögötte a switch-case kommentben, bár az úgy hülyeség...
A hozzászólás módosítva: Máj 13, 2020
Ha már sebességre optimalizálunk!
Próbáld ki ezt is:
A hozzászólás módosítva: Máj 14, 2020
Ha a fenti kód működik? Akkor jó regisztereket olvastam be.
És tovább gyorsítható a műveletek összevonásával:
És még spórolunk a memória foglalással is.
Köszönöm működik, bár csak 5 gombot tudtam kipróbálni, mert elég régiek, de annyi is működött
A setup függvényt szerintem inkább kódméretre érdemes optimalizálni, hiszen csak induláskor egyszer fut le (ritkán van jelentősége ott a futási időnek). Normál gcc-ben lehet a program egyes részeinek az optimalizációját a globális beállítástól eltérő módon állítgatni (nem tudom, ez az arduinoban levő fordítóval is működik-e, de tudtommal az is gcc-t használ).
Itt vannak a lehetséges optimalizálási szint beállításai.
Működni látszik. Változik a lefordított programméretem húsz és huszonnyolc százalék között opciótól függően. Köszönöm kísérletezgetek vele!
A hozzászólás módosítva: Máj 14, 2020
Az egész program 9 fájlból áll, a méreteik miatt nem idéztem ide az egészet.
Természetesen a gombok kezelése nem a setupban van. Megjegyzésben oda írtam melyik részre gondoltam. Idézet: „// controller.ino-ben digitalRead(gomb1);gyorsítása:” A példa azért így van megcsinálva, hogy le tudjam ellenőrizni, legalább próba fordítással. Akinek szólt az megértette. A hozzászólás módosítva: Máj 14, 2020
Lehet kísérletezni a fordító optimalizálásával.
De sajnos az olyan részeket kapásból kifogja dobálni amiket a jó hangzás céljából raktál-be időzítésnek.
Ok!
Akkor kíváncsiságból lefuttatnád ezt a teszt programot:
Ki írja az LCD-re a két gomb kezelés futás idejét, és a különbséget.
Tíz illetve kettő mikroszekundumot mutat. Ez mindenképpen jelentős különbség.
Igen.
Mivel csak 2us-enként van 1 megszakítás, ennél kevesebb időt nem is tudunk mérni. És nagy valószínűséggel ennek a 2us-nek is a nagy része a megszakítás lekezelése.
Most betettem a kész programba az időmérésedet, a vezérlők eljárásba. Itt tizennégy mikroszekundumot és három mikroszekundumot mértem, a kétfajta beolvasással. Viszont a GPO regiszter olvasása hiába gyorsabb, ha sok billentyűt nyomok le a Midi vezérlőn, akkor "beleaggol" a hangszer. Ha visszateszem a régit, akkor tökéletes... Tehát ezek szerint, valahogy másképpen használja a megszakítást, és az összeakad, vagy a MIDI-vel, vagy az audió, illetve LCD résszel...
Leginkább az LCD a gyanús, de ha működik a sima DigitalRead akkor nem bántom. Tehát hiába gyorsabb a dolog, egyenlőre marad a régi. Viszont ezt az időmérést lehet beteszem egy rejtett menübe, és tesztelgetek vele máshol is... Köszönöm a segítséget, ha Miskolcon jársz egyszer, a vendégem vagy! A hozzászólás módosítva: Máj 15, 2020
Kell neked az LCD biztosan?
Ha több gombot használsz, esetleg minden funkcióhoz egyet (nem tudom mennyi kellene), akkor az LCD felesleges lenne, nem venne el plusz időt.
Viszont találtam még tempót az LCD írásnál.
Rámértem a programban az eltelt időkre több clock frekvenciával, nyerek harminc milliszekundumot ha felteszem 1 MHz-re 800 kHz-ről! Csináltam diagramot, hátha hasznos még valakinek... A hozzászólás módosítva: Máj 15, 2020
Moderátor által szerkesztve
Körülbelül 120paraméter, többségük 1-127-ig állítható, nem nagyon úszom meg. De ha minden igaz kész a dolog, csinálok egy részletes videót róla, annak linkjével még zaklatlak majd titeket, hogy miről is van szó. Köszönöm a segítségeket!
A hozzászólás módosítva: Máj 15, 2020
Ha ezt a library-t használod, akkor nézz bele a pulseEnable függvényébe. Ez minden íráskor várakozik kétszer 50usec-et. Nem lehetne ezt az i2c kijelzőt sima 6 vezetéken is működtethető verzióra cserélni? Akkor elég lenne 2msec sűrűséggel kb 1usec idő a folyamatos frissítéséhez.
Köszönöm! De Nem ellenszolgáltatásért segítettem! Inkább azért mert sokat lehetett tanulni tőled, hang technikai megoldások terén. Viszont nagyon kíváncsi leszek a végleges program változatra. Vajon menyit tudtál javítani rajta?
Erre már többen felhívtuk a figyelmet,hogy az I2C nagyon lassú!
De valamiért nagyon ragaszkodik hozzá?
Az én LiquidCrystal_I2C.cpp fájlomban nincsen benne ez a késleltetés.
I2C-vel hajtott kijelzőn a következő kód 3404 mikroszekundum alatt fut le. 32 MHz-es órajelen 2500 mikroszekundumig tudom lefaragni:
Ha valaki gyorsan lefuttatna egy tesztet egy másik rendszeren, az tényszerűen mutatná a sebességeket.
Addig-addig találtam itthon egy vasat, amin a "6 vezetékes" rendszerrel van a kijelző. 5048 mikroszekundum alatt futott le a fenti kódrészlet.
Tehát, szerintem gyorsabb az I2C, de a 8 bites vezérlés kipróbálása még vissza van.
Most tesztelek, tesztelek, tesztelek. Valamiért nagyon nem működnek a tömbök. Ha különálló programban összehasonlítom a sebességeket kb. 10 százalékot rávernek a különálló változókra, egy egymilliószoros értékadáson. A baj az, hogy amikor a programban, feltehetően megszakításos környezetben használom őket, habár a saját sebességük jobb, összességében még is problémát okoznak az időzítésekben, mindezt ciklus nélkül értsd, ami hihetetlen számomra. És mivel nem tudom az okát, ezért vizsgálódom még...
A hozzászólás módosítva: Máj 16, 2020
Köszönöm a tesztet nagy segítség!
Nem az i2c az igazi probléma, hanem a tömbök. Amit nem értek...
Ha ezt az audio drivert használod, én megmérném mennyi időt tölt el az write függvényében levő várakozásban (56. sor, amíg a félbufferek DMA írása véget nem ér). Ha sokat, akkor azt az időt érdemes lenne a kevésbé időkritikus dolgok elvégzésére fordítani inkább.
Most látom üres utasításokat hajt végre, amíg nem végez, de hogy tudok ide betenni valamit? Írjam bele az audió osztályba mint függvény, amit itt meghívok az üres utasítás helyén. Az egy változó értékét kiszámolja amit majd a főprogramban kiolvasok az audió osztályon keresztül?
Vagy érdemesebb lenni az Audió függvényeket átemelni a főprogramba, és akkor azonos hierarchiába vagyunk? Bocs ha hülyeség!
Én kiegészíteném egy foglaltsági függvénnyel:
És csak akkor hívnám meg a write-ot, meg előtte a prepare-t, ha nem jelez foglaltat. Csak annyi a lényeg, hogy addig a hanggeneráló részt is szüneteltetni kell. A hozzászólás módosítva: Máj 16, 2020
Sziasztok!
A legfrissebb Arduino-val, a legfrissebb RF24-el, Pro-micro-kal, NRF24L01+ kínai klónokkal szeretném az "ack"-ot kijelezni az adó oldalon. De az itt található (Bővebben: Link) leírás és a programok segítségével ez nem sikerül. A radio.write(...) sosem ad igaz értéket. Kondi van a modulokra forrasztva. Mit rontok el? A modullal lehet gond, vagy a programmal? Az RX programja:
A TX programja:
A hozzászólás módosítva: Máj 16, 2020
Sziasztok!
A Nano és az UNO között, mik az alapvető különbségek? Eddig, csak UNO-m volt. A Nano-t is ugyanúgy, ugyanazon a felületen tudom programozni? Ugyanúgy vannak analóg kimenetei is? A hozzászólás módosítva: Máj 16, 2020
Mindkettőn ugyanaz a mikrokontroler van, teljesen megegyezik a programozásuk. Analóg kimenet (DAC) egyiken sincs.
|
Bejelentkezés
Hirdetés |














