Oled displej - driver sh1106

Uživatelský avatar
zz912
Příspěvky: 1357
Registrován: 25. 5. 2008, 7:16

11. 11. 2023, 4:08

Zdravím,

Budu používat tento displej:
https://www.laskakit.cz/oled-displej-bi ... -1-3--spi/
oled.png
Zatím ještě nedorazil a tak studuji datasheet k ovládacímu driveru.
sh1106_datasheet.pdf
(8.72 MiB) Staženo 47 x
Nerozumím v něm více věcí, ale nejvíc mě zajímá:
PageAddress.png
K čemu je dobrá Page Address, když mám Line Address?
Ten displej si představuji jako velkou matici svítících bodů ovládanou sběrnicí.
Tudíž by mě mělo stačit pro rozsvícení nějakého bodu umět definovat jen Line Address a Column Address. Nebo je to všechno jinak?


Dále mi není jasné, k čemu je nastavování těchto Column (strana 19)?
Command_Column_Address.png
Rozsah je od 00H do 0FH a od 10H do 1FH, což odpovídá od 0 do 15 a od 16 do 31. Ale ten driver umí zobrazovat 132 Column. Co jsou tohle za Columny?

Moc nejsem nadšenej z popisu práce s SPI sběrnicí. Z datasheetu jsem pochopil jak tento chip elektronicky zapojit, ale jak vlastně posílat registry a comandy? Jelikož lze SPI sběrnici realizovat také mimo jiné posuvnými registry, tak předpokládám, že bych měl vycházet ze sběrnice 6800 a 8080. Akorát nebudu posílat bity paralelně, ale sériově. Uvažuji správně?

Vím, že mohu zbaběle vzít nějakou už napsanou knihovnu a akorát se ji naučit používat, ale to už jsem dělal u minulého projektu. Teď bych se chtěl pokusit začít psát od datasheetu, tak jak velcí kluci.

Chtěl bych poprosit o pomoc.

Zdeněk
LinuxCNC - MESA 7i96
zz912.webnode.cz
Uživatelský avatar
Thomeeque
Příspěvky: 8913
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

11. 11. 2023, 5:19

zz912 píše: 11. 11. 2023, 4:08 K čemu je dobrá Page Address, když mám Line Address?
Je to mochromatický display, jeden pixel = jeden bit paměti. Při zápisu (a analogicky při čtení) neadresuješ jednotlivé řádky, ale osmice řádků (=page), nezapisuješ/nečteš bity, ale bajty.
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
Uživatelský avatar
zz912
Příspěvky: 1357
Registrován: 25. 5. 2008, 7:16

11. 11. 2023, 5:28

Thomeeque píše: 11. 11. 2023, 5:19
zz912 píše: 11. 11. 2023, 4:08 K čemu je dobrá Page Address, když mám Line Address?
Je to mochromatický display, jeden pixel = jeden bit paměti. Při zápisu (a analogicky při čtení) neadresuješ jednotlivé řádky, ale osmice řádků (=page), nezapisuješ/nečteš bity, ale bajty.
Děkuji za snahu pomoct mi, ale neposunulo mě to dál.
LinuxCNC - MESA 7i96
zz912.webnode.cz
Uživatelský avatar
Thomeeque
Příspěvky: 8913
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

11. 11. 2023, 5:33

zz912 píše: 11. 11. 2023, 4:08 Dále mi není jasné, k čemu je nastavování těchto Column (strana 19)?
Command_Column_Address.png

Rozsah je od 00H do 0FH a od 10H do 1FH, což odpovídá od 0 do 15 a od 16 do 31. Ale ten driver umí zobrazovat 132 Column. Co jsou tohle za Columny?
Column adresa má osm bitů (A0-A7), akorát je nastavuješ takto nadvakrát po čtyřech.

zz912 píše: 11. 11. 2023, 4:08 Vím, že mohu zbaběle vzít nějakou už napsanou knihovnu a akorát se ji naučit používat, ale to už jsem dělal u minulého projektu.
Já si většinou (pokud chci jít takto do hloubky) najdu hotovou knihovnu a inspiruju se jejími zdrojáky. Přímo z DS by to asi byla nejlepší škola, jen to bude na dýl.

T.
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
Uživatelský avatar
Thomeeque
Příspěvky: 8913
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

11. 11. 2023, 5:44

zz912 píše: 11. 11. 2023, 5:28
Thomeeque píše: 11. 11. 2023, 5:19
zz912 píše: 11. 11. 2023, 4:08 K čemu je dobrá Page Address, když mám Line Address?
Je to mochromatický display, jeden pixel = jeden bit paměti. Při zápisu (a analogicky při čtení) neadresuješ jednotlivé řádky, ale osmice řádků (=page), nezapisuješ/nečteš bity, ale bajty.
Děkuji za snahu pomoct mi, ale neposunulo mě to dál.
Line address vůbec nemáš pro zápis (a čtení) "na obrazovku" (resp. do/z bufferu, který se na obrazovku mapuje) k dispozici. Pouze page (osmice řádků), page 0 reprezentuje řádek 0-7, page 1 řádek 8-15 atd. Rozsvěcíš/zhasínáš vždy osm pixelů nad sebou najednou (posláním jednoho byte). Chvíli nad tím ještě dumej, to dáš :)

Edit: ty binární čísla jsou špatně, bity jsou v opačném pořadí (D0-D7 vs. D7-D0)
Edit: ty binární čísla jsou špatně, bity jsou v opačném pořadí (D0-D7 vs. D7-D0)

Line address můžeš referovat pouze pro definování, od jakého řádku to má posílat odzhora na obrazovku (což umožňuje rychlé skrolování atp. efekty bez nutnosti předefinovávat obsah paměti).
Naposledy upravil(a) Thomeeque dne 12. 11. 2023, 6:42, celkem upraveno 3 x.
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
Uživatelský avatar
Radhard
Příspěvky: 288
Registrován: 1. 7. 2020, 10:19
Bydliště: Praha
Kontaktovat uživatele:

11. 11. 2023, 8:15

Jak píše kolega. Organizace je 1x8 bodů na jeden zápis. Co je fain, že když zapíšeš osum byte po sobě s dobře nastavenou page/column, namaluje to čtverec 8x8 pixlů - hádej na co to hodí :-)

Konfiguraci stejně pro začátek opiš od číňanů (stáhni si nějakej C příklad).


SPI problem ?
3 nebo 4 vodičová ?
Uživatelský avatar
zz912
Příspěvky: 1357
Registrován: 25. 5. 2008, 7:16

11. 11. 2023, 8:28

Diki kluci, dneska už mi to hlava nebere. Zitra se do toho položím znovu.
LinuxCNC - MESA 7i96
zz912.webnode.cz
Uživatelský avatar
zz912
Příspěvky: 1357
Registrován: 25. 5. 2008, 7:16

12. 11. 2023, 4:32

Thomeeque píše: 11. 11. 2023, 5:33 Já si většinou (pokud chci jít takto do hloubky) najdu hotovou knihovnu a inspiruju se jejími zdrojáky. Přímo z DS by to asi byla nejlepší škola, jen to bude na dýl.
Jelikož jsem se nečekaně na začátku tohoto měsíce ocitl na úřadu práce, tak mám času dostatek :-(

Přesvědčoval jsem jednoho zaměstnavatele, že u něj chci dělat programátora. Ukazoval jsem mu projekty s Arduiny, které jsem dělal. Tak mi dal šanci a dostal jsem za úkol udělat tento projekt. Výhoda je, že je slaboproudař, takže se nemusím starat o HW a mohu se věnovat "jen" programování. Ono to bude něco jiného, ale krycí název by mohl být "Projekt osobní váhy".
Ve skutečnosti to má daleko větší souvislost s CNC, ale nechci to tu více rozepisovat.

Bude se to skládat z:
ESP-WROOM-32 (kvůli komunikaci po Bluetooth s Android aplikací)
A/D převodník HX711 (pro tenzometr)
Oled displej

Potenciálnímu zaměstnavateli, to bude klidně stačit poskládané z Arduino knihoven a to už podobný projekt mám. Stačilo by to jen oprášit. Ovšem byl to takový bastl.

Zkoušel jsem jít i na pohovor Embedded programátor. Tam už byly požadavky daleko vyšší. Projekt v holém C, programovací prostředí Eclipse, schopnost psát zdrojáky z datasheetu. Sice mě nepozvali do druhého kola, ale když přijdu za půl roku s nějakým projektem, tak nebudu muset jít na první kolo a půjdu rovnou do druhého kola. Tudíž mám motivace habaděj.

Když se mi nepodaří rekvalifikovat se z konsruktéra na embedded programátora, tak budu svou kariéru pokračovat opět jako konstruktér, ale to se mi nechce.
Radhard píše: 11. 11. 2023, 8:15 SPI problem ?
3 nebo 4 vodičová ?
Zatím nemám ten displej v ruce, kdo ví, jak ten modul bude zapojenej.
Není mi jasné, co bude zapojené na to DC.
oled.png
Jinak předpokládám:
GND - napájení mínus
VCC - napíjení +3.3V
CLK - SPI CLOCK
MOSI - SPI Master Output Slave Input
RES - RESET
DC - ???
CS - Chip Select

Toto jsou Arduino knihovny na SPI:
SPI.cpp
(8.09 KiB) Staženo 43 x
SPI.h
(2.9 KiB) Staženo 40 x
Chtěl bych s tím displejem vytvořit takový jednoduchý "Hello World" a zvládnout rozsvítit jeden jakýkoliv pixel.

Doufám, že to s těmi Datasheety bude jak s manuály od Mesa karet. První byl porod, ale ty ostatní už jsou v pohodě.

Myslím si, že v tom Datasheetu je chyba:
Command_Column_Address.png
Takhle by mi to dávalo smysl. Nebo ne?
LinuxCNC - MESA 7i96
zz912.webnode.cz
Uživatelský avatar
Thomeeque
Příspěvky: 8913
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

12. 11. 2023, 7:05

zz912 píše: 12. 11. 2023, 4:32 Myslím si, že v tom Datasheetu je chyba:
Command_Column_Address.png
Takhle by mi to dávalo smysl. Nebo ne?
Aha, toho jsem si před tím nevšiml, vidím to stejně 👍

zz912 píše: 12. 11. 2023, 4:32 Doufám, že to s těmi Datasheety bude jak s manuály od Mesa karet. První byl porod, ale ty ostatní už jsou v pohodě.
Jj, to bude podobné. Držím palce, T.
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22400
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

12. 11. 2023, 7:29

A vazne nechces pouzit knihovny?
Protoze takhle ruco je to sakra dost prace. Do toho prace s fonty a jinou grafikou. Timhle zpusobem jak to delas se to resi u nejake exotiky nebo se to resivalo pred 20ti lety kdy nic nebylo.. kdyz si napises vlastni funkce na displat odriznes se od moznosti pouzit dalsi knihovny.
Vsechna prava na chyby vyhrazena (E)
Uživatelský avatar
zz912
Příspěvky: 1357
Registrován: 25. 5. 2008, 7:16

12. 11. 2023, 8:24

Tak jsem pokročil dále, z obrázků níže vyplývá, že pin DC na modulu bude zapojen do do pinu A0 na driveru a bude se tedy jednat o 4 vodičové zapojení:
3-wire_SPI.png
4-wire_SPI.png
Zároveň z toho vyplývá, že délka slova SPI komunikace bude 8 bitů = 1 byte.
Jakmile se aktivuje Chip Select, tak přijímač na driveru bude číst jednotlivé byte.
Signál A0 alias DC, D/C tam bude pro nějakou kontrolu, synchronizaci?

Pokud se vrátím k mému Hello world a budu chtít zvládnout rozsvítit jeden pixel, tak budu muset pomocí SPI vyplnit tyto registry bajtama.
Command_table1.png
Command_Table2.png
Ovšem vůbec netuším jak. Nevidím v tom datasheetu žádný protokol, jak posílat bajty po SPI sběrnici. Mělo by tam něco takového být? Nebo už všechny informace mám?

Zkusím popsat, jak bych u nastavil Page Address:
Bohužel slovo "registr" a spojení "nastavení registrů" je pro mě noční můra. Všude na netu se považuje za něco tak samozřejmého, že se tím nikdo nezabývá, aby to pořádně vysvětlil. Navíc když dám do Google slovo registr, tak mi to vypíše registr vozidel, registr dlužníků ....
Set_Page_Address.png
Já si adresu registru představuji něco jak hodnotu ukazatele v jazyce C. V případě Page Address se bude jednat o adresy B0H až B7H což odpovídá 176D až 183D. Jelikož nelze do paměti uložit 1 bit, budu tam muset uložit celý Byte.

Zápis logické 0 pomocí Byte bude asi 00000000b
Zápis logické 1 pomocí Byte bude asi 00000001b
Je to tak?

Tudíž pokud budu chtít rozsvítit pixel na Page Address 5 budu muset nastavit:
B0H 176D | 00000001b
B1H 177D | 00000000b
B2H 178D | 00000001b
B3H 179D | 00000000b
B4H 180D | 00000001b
B5H 181D | 00000001b
B6H 182D | 00000000b
B7H 183D | 00000001b

Sice nevím, jak to přes tu PCI sběrnici poslat, ale uvažuji správně?
robokop píše: 12. 11. 2023, 7:29 A vazne nechces pouzit knihovny?
Protoze takhle ruco je to sakra dost prace. Do toho prace s fonty a jinou grafikou. Timhle zpusobem jak to delas se to resi u nejake exotiky nebo se to resivalo pred 20ti lety kdy nic nebylo.. kdyz si napises vlastni funkce na displat odriznes se od moznosti pouzit dalsi knihovny.

Když použiji hotovou knihovnu, tak se dál neposunu. Stejně ji potom použiji, ale potřebuji pochopit základy. Cílem teď je napsat vlastní knihovnu, která bude umět zobrazit libovolné body a třeba 2 nějaké znaky.
LinuxCNC - MESA 7i96
zz912.webnode.cz
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22400
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

12. 11. 2023, 9:31

Tak si rozsvit par pixelu pro to pochopeni (to rozhodne neni nic spatneho) a pak jdi do knihovny jinak se urcite nikam neposunes. Dnes uz to neni o tom psat vse, ale efektivne vyuzivat nastroje tak aby jsi se rychle dostal k cili.. treba v arduinu s knihovnami to mas totiz hotove do 30 minut i se studovanim co a jak funguje. A zbytek casu se muzes venovat hlavnimu algoritmu.

Co se tyce tech registru. Jede to na spi takze si najdi obsluhu spi a pak uz vis co s temi registry.

Ta knihovna o ktere mluvim asi pouziva jinou knihovnu pro spi komunikaci. Tzn. Ty si musis nejprv napsat obsluhu te komunikace a pak teprve obsluhu toho displaye.
Vsechna prava na chyby vyhrazena (E)
t256
Příspěvky: 2835
Registrován: 19. 1. 2012, 4:49

12. 11. 2023, 3:35

zz912 píše: 12. 11. 2023, 8:24 Bohužel slovo "registr" a spojení "nastavení registrů" je pro mě noční můra. Všude na netu se považuje za něco tak samozřejmého, že se tím nikdo nezabývá, aby to pořádně vysvětlil. Navíc když dám do Google slovo registr, tak mi to vypíše registr vozidel, registr dlužníků ....
Na registru nic muroviteho neni, je to jen misto v pameti na uvedene adrese do ktereho neco zapises a podle toho se dana vec bude chovat. Nic vic v tom nehledej.

Ono nekdy neni spatne si ty knihovny umet napsat, tenhle displej osobne neznam, ale podobne displeje nebyvaji kdovijak rychle a pokud napriklad potrebujes rychle vykreslovat nejaky bargraf apod, neni od veci umet to napsat sam presne podle danych potreb nez pouzivat univerzalni knihovny na vykreslovani pixelu ktere budou znatelne pomalejsi.

Kup si ten displej a zkousej na nem zobrazit co ktere nastaveni dela. Takhle se to naucis nejrychleji.
atlan
Příspěvky: 3347
Registrován: 7. 2. 2011, 9:12

12. 11. 2023, 4:32

robokop píše: 12. 11. 2023, 9:31 Tak si rozsvit par pixelu pro to pochopeni (to rozhodne neni nic spatneho) a pak jdi do knihovny jinak se urcite nikam neposunes. Dnes uz to neni o tom psat vse, ale efektivne vyuzivat nastroje tak aby jsi se rychle dostal k cili.. treba v arduinu s knihovnami to mas totiz hotove do 30 minut i se studovanim co a jak funguje. A zbytek casu se muzes venovat hlavnimu algoritmu.

Co se tyce tech registru. Jede to na spi takze si najdi obsluhu spi a pak uz vis co s temi registry.

Ta knihovna o ktere mluvim asi pouziva jinou knihovnu pro spi komunikaci. Tzn. Ty si musis nejprv napsat obsluhu te komunikace a pak teprve obsluhu toho displaye.
No hej v arduinu to za 30 min polepis a potom 2 hodky hladas kde kto urobil aku chynu v kniznici, pri pouziti viacwrych kniznic to je fakt zabava. Smusil som to 2x a povedal si ze to zato nestoji. Pri prepisani do Cka to prekvapivo funguje a zabera o 50% menej miesta.
atlan
Příspěvky: 3347
Registrován: 7. 2. 2011, 9:12

12. 11. 2023, 4:33

Kupovat displej nemusi, staci si stahnut simulator.
Odpovědět

Zpět na „Ostatní elektronika“