Oled displej - driver sh1106
Zdravím,
Budu používat tento displej:
https://www.laskakit.cz/oled-displej-bi ... -1-3--spi/ Zatím ještě nedorazil a tak studuji datasheet k ovládacímu driveru. Nerozumím v něm více věcí, ale nejvíc mě zajímá: 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)? 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
Budu používat tento displej:
https://www.laskakit.cz/oled-displej-bi ... -1-3--spi/ Zatím ještě nedorazil a tak studuji datasheet k ovládacímu driveru. Nerozumím v něm více věcí, ale nejvíc mě zajímá: 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)? 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
zz912.webnode.cz
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
Děkuji za snahu pomoct mi, ale neposunulo mě to dál.
LinuxCNC - MESA 7i96
zz912.webnode.cz
zz912.webnode.cz
Column adresa má osm bitů (A0-A7), akorát je nastavuješ takto nadvakrát po čtyřech.
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
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ášzz912 píše: ↑11. 11. 2023, 5:28Děkuji za snahu pomoct mi, ale neposunulo mě to dál.
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
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á ?
Konfiguraci stejně pro začátek opiš od číňanů (stáhni si nějakej C příklad).
SPI problem ?
3 nebo 4 vodičová ?
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.
Zatím nemám ten displej v ruce, kdo ví, jak ten modul bude zapojenej.
Není mi jasné, co bude zapojené na to DC. 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: 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: Takhle by mi to dávalo smysl. Nebo ne?
LinuxCNC - MESA 7i96
zz912.webnode.cz
zz912.webnode.cz
Aha, toho jsem si před tím nevšiml, vidím to stejně
Jj, to bude podobné. Držím palce, T.
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
- robokop
- Site Admin
- Příspěvky: 22424
- Registrován: 10. 7. 2006, 12:12
- Bydliště: Praha
- Kontaktovat uživatele:
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.
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)
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í:
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. 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ů .... 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ě?
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.
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. 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ů .... 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
zz912.webnode.cz
- robokop
- Site Admin
- Příspěvky: 22424
- Registrován: 10. 7. 2006, 12:12
- Bydliště: Praha
- Kontaktovat uživatele:
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.
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)
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.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ů ....
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.
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.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.