u8g 128x64 lcd rychlejší zápis

epzlin
Příspěvky: 37
Registrován: 17 črc 2019, 19:22
Reputation: 0

u8g 128x64 lcd rychlejší zápis

Příspěvek od epzlin » 11 zář 2019, 19:07

Zdravím,
nerešil někdo, jak zrychlit zápis dat na tento displej? Aktuálně trvá odeslání dat cca 100ms, což je opravdu hodně. Zapojení mám paralelní (11vodičů), přes SPI to byla doba zápisu delší. Zobrazuju nějaké proměnné, ale také statický text, či grafiku (linie atd). Např hodnotu 1000 a staticky "W". Dá se nějak udělat, že statické prvky, odešlu do displeje "jen jednou" a periodicky se budou odesílat jen těch pár proměnných?

Uživatelský avatar
gilhad
Příspěvky: 774
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: u8g 128x64 lcd rychlejší zápis

Příspěvek od gilhad » 12 zář 2019, 04:56

u8g obetuje rychlost za mensi spotrebu RAM a jednoduchost pouziti, ale porad tam je jeste misto ke zlepseni ... tady se o tom docela pise (ja sam jsem to nezkousel)
https://forum.arduino.cc/index.php?topic=277381.0

petan
Příspěvky: 358
Registrován: 23 črc 2017, 10:19
Reputation: 0
Kontaktovat uživatele:

Re: u8g 128x64 lcd rychlejší zápis

Příspěvek od petan » 12 zář 2019, 07:14

U kazdyho displeje je urcite lepsi si rozmyslet, co chces prekreslovat. Je zbytecny vykreslovat cely displej, kdyz se ti meni jenom jedno cislo, nebo par bodu.

Ja treba vykreslim podklad a pak cislo, ktere si v programu docasne ulozim. V dalsim cyklu vykreslim povodni cislo podkladovou barvou tak, aby zmizelo a potom novy cislo. Eventualne treba prekreslit obdelnikem (nemeril jsem, co je rychlejsi). Musi to knihovna umoznovat.

Samozrejme, ze ma vliv i samotna knihovna. Je lepsi treba zkusit par jinych knihoven.

commar
Příspěvky: 31
Registrován: 26 úno 2019, 15:20
Reputation: 0

Re: u8g 128x64 lcd rychlejší zápis

Příspěvek od commar » 12 zář 2019, 09:25

Píše 128x64 LCD a 11 vodičů, tady asi nepůjde o OLED 128x64...
Nemyslí tazatel náhodou tento: https://navody.arduino-shop.cz/navody-k ... t7920.html ?

epzlin
Příspěvky: 37
Registrován: 17 črc 2019, 19:22
Reputation: 0

Re: u8g 128x64 lcd rychlejší zápis

Příspěvek od epzlin » 12 zář 2019, 09:42

commar píše:
12 zář 2019, 09:25
Píše 128x64 LCD a 11 vodičů, tady asi nepůjde o OLED 128x64...
Nemyslí tazatel náhodou tento: https://navody.arduino-shop.cz/navody-k ... t7920.html ?
ano, přesně tento typ

Uživatelský avatar
gilhad
Příspěvky: 774
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: u8g 128x64 lcd rychlejší zápis

Příspěvek od gilhad » 12 zář 2019, 11:34

petan píše:
12 zář 2019, 07:14
U kazdyho displeje je urcite lepsi si rozmyslet, co chces prekreslovat. Je zbytecny vykreslovat cely displej, kdyz se ti meni jenom jedno cislo, nebo par bodu.

Ja treba vykreslim podklad a pak cislo, ktere si v programu docasne ulozim. V dalsim cyklu vykreslim povodni cislo podkladovou barvou tak, aby zmizelo a potom novy cislo. Eventualne treba prekreslit obdelnikem (nemeril jsem, co je rychlejsi). Musi to knihovna umoznovat.

Samozrejme, ze ma vliv i samotna knihovna. Je lepsi treba zkusit par jinych knihoven.
Pokud to vazne na rychlosti prenosu, tak u cernobilych (ci jinak dvoubarevnych), ktere nemaji vestavene fonty, ale kresli grafiku, je rychlejsi prekreslit obdelnikem, obsahujicim nove cislo s pozadim, protoze se posilaji byty a knihovna teda musi vykreslit cele kusy naraz a a vykreslit treba 2 i s pozadim je rychlejsi, nez prekreslit pozadim obdelnik s 1 a pak tam vykreslit 2 i s pozadim, kdy se zbytecne posila spousta bodu znova - aspon u drobnejsich fontu, kde je velikost pismene srovnatelna s minimalni odesilanou delkou dat
(tedy odeslat 3byty adresa+delka+data = 5bytu na prekresleni 1-8 za sebou jdoucich pixlu (na pozadi) + 5bytu na nakresleni noveho pixlu
je stejne jako odeslat v bloku hodnoty pro 3byty adresa+delka+6bytu = prekresleni zarovnaneho bloku 6x8=48 pixlu rovnou na nove hodnoty)

Por vyrazne vetsi pismena se pak vyplati posilat jen zmenovky, kde se to mezi temi pismeny lisi.

Pokud je to pomale, tak stoji za to se podivat, jak to vlastne komunikuje a tomu uzpusobit prenasene hodnoty.

u8g IMHO v zakladu pouziva buffer na cely radek (nebo jiny souvisly blok) a v cyklu necha vykreslit celou obrazovku, kdy vse mimo ten blok ignoruje a nekresli a neprenasi, pak prenese ten blok (buffer) a posune ho dal a zase necha prekreslit celou obrazovku a prenese dalsi buffer. - stalo by za to se podivat na velikost toho bufferu a jestli umi prekreslit i jen cast obrazovky, tak to omezit na tu, kde se neco meni. Asi by bylo zajimave si do te smycky pridat pocitadlo a pak si poslat po Serialu, kolikrat probehla

Kód: Vybrat vše

pruchodu=0;
 lcd.firstPage();
    do {
      // funkce vykresli vykreslí žádanou obsah
      vykresli();
      pruchodu ++;
    } while( lcd.nextPage() );
Serial.println(pruchodu);
(mimochodem v tom prikladu je chyba - ve funkci vykresli se v prubehu vykreslovani nesmi menit data, ale tam pokazde pocitaji millis()/1000, takze pokud se jim tato hodnota ve spatnou chvili zmeni, tak se muze ta obrazovka rozsypat - cast bude ukazovat 17 vterin, cast 18 vterin)

Optimalizovani pohyblive grafiky na zarizenich s pomalou komunikaci je cela veda - kdyby bylo dost pameti (jakoze na Arduinu neni), tak se vyplati vykreslit celou obrazovku do bufferu, ten poslat a zkopirovat a pak uz jen prepsat novymi daty a poslat inteligente rozdil mezi tim starym a zmenenou kopii (tedy se rozhodnout, zda se dva ruzne body vyplati poslat zvlast, nebo dohromady i s nezmenenymi mezi - co ma mensi prenosovou rezii. A i s omezenou pameti se daji delat ruzne cachry, jak toho prenaset co nejmin.

commar
Příspěvky: 31
Registrován: 26 úno 2019, 15:20
Reputation: 0

Re: u8g 128x64 lcd rychlejší zápis

Příspěvek od commar » 12 zář 2019, 11:57

Já bych vyzkoušel hlavně jinou knihovnu, u8g mi přijde taková robustní, moc univerzální...

Díval jsem se na YT a tahle knihovna mi přijde docela svižná..
https://github.com/cbm80amiga/ST7920_SPI

Vzkoušejte...

Uživatelský avatar
gilhad
Příspěvky: 774
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: u8g 128x64 lcd rychlejší zápis

Příspěvek od gilhad » 12 zář 2019, 12:15

V nejhorsim pripade si na to napsat vlastni, optimalizovanou na tento pripad, nekdy se to fakt vyplati

epzlin
Příspěvky: 37
Registrován: 17 črc 2019, 19:22
Reputation: 0

Re: u8g 128x64 lcd rychlejší zápis

Příspěvek od epzlin » 12 zář 2019, 12:25

gilhad píše:
12 zář 2019, 12:15
V nejhorsim pripade si na to napsat vlastni, optimalizovanou na tento pripad, nekdy se to fakt vyplati
Tak takové zkušenosti nemám, že bych zvládl zrovna tohle :roll:

Uživatelský avatar
gilhad
Příspěvky: 774
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: u8g 128x64 lcd rychlejší zápis

Příspěvek od gilhad » 12 zář 2019, 14:14

Tady se jeste pise neco vic o tom, co u8glib dela a hlavne nedela a proc.
https://github.com/olikraus/u8glib/wiki/tpictureloop

Jinak asi existujou i knihovny s jinym pristupem, takze by stalo za to pohledat nejakou, ktera ma jako zaklad zobrazovani jen malych oblasti na obrazovce a rucne si pohlidat, aby se ty oblasti neprekryvaly.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti