Strana 1 z 1

Display nhd-0216aw-ib3

Napísané: 15 Aug 2020, 13:37
od používateľa jirka.jirka.
Zdravím pánové,

dle datasheetu jsem nainicializoval display nhd-0216aw-ib3 viz. předposlední list.
DATASHEET

Výpis na LCD se mi podařil taky. Ale snažím se pochopit, jak mu zadat např. scrolling text a nemůžu ten datasheet pochopit. Dle ds mám nastavit: IS=1, RE=1, SD=0. Ale nevím, jak nastavit IS. A teď otázka, co všechno zaslat do toho displeje a druhá otázka, je někdo ochoten mi pomoci pochopit ten datasheet? :pain: Holt ne a ne ho pochopit. :crying:
A nemohu si pomoci, ale zdá se ten datasheet jenom mně nepochopitelný?

K dispozici mám:

Kód: Vybrať všetko

NHD0216_sendCommand
NHD0216_sendData

Kód: Vybrať všetko

NHD0216_sendCommand(____)-- (IS = 1) // unknown
NHD0216_sendCommand(0x2A) -- (RE = 1) //function set (extended command set)
NHD0216_sendCommand(0x78) -- (SD = 0) //OLED command set disabled

NHD0216_sendCommand(0x11) -- (0b00010001)	// scrol on 1. lin

Re: Display nhd-0216aw-ib3

Napísané: 15 Aug 2020, 15:19
od používateľa Ado_PO
Pozeral som do toho hodinu a našiel som na 8. strane dole v príkaze "function set" najnižší bit pre zmenu stavu registra IS.
Takže na zmenu by malo stačiť poslať sendCommand (0x2B).

Re: Display nhd-0216aw-ib3

Napísané: 15 Aug 2020, 15:41
od používateľa jirka.jirka.
No musím se přiznat, že z tohoto DS mi leze hlava kolem...

Ano už jsem zahlédl ten IS bit, jak píšeš. Ale pro ten scroll vůbec nevím, co do toho displeje poslat.

Funkce, co vypisuje string na displej.

Kód: Vybrať všetko

int32_t NHD0216_print_string(const uint8_t I2Cnumber, const uint8_t address, uint8_t row, uint8_t col, const char *String)
Funkce, co má zapnout scrolling

Kód: Vybrať všetko

int32_t NHD02016_scroll(const uint8_t I2Cnumber, const uint8_t address) {
	int32_t ret;

	NHD0216_sendCommand(I2Cnumber, address, 0x2B); if (ret < 0) return ret;
	NHD0216_sendCommand(I2Cnumber, address, 0x2A); if (ret < 0) return ret;
	NHD0216_sendCommand(I2Cnumber, address, 0x78); if (ret < 0) return ret;

	NHD0216_sendCommand(I2Cnumber, address, 0x11); if (ret < 0) return ret;

	return ret;
}
No a potom test v mainu.

Kód: Vybrať všetko

NHD0216_print_string(1, 0x3C, 1, 0, "Ahojkkky");
	NHD02016_scroll(1, 0x3C);
A na displeji se správně zobrazí Ahojkky, ale scrolling nefunguje.

Re: Display nhd-0216aw-ib3

Napísané: 15 Aug 2020, 16:09
od používateľa Ado_PO
A prehodiť príkazy aby šlo najprv 0x11 (enable scroll1.riadok) prípadne 0x12 pre 2.riadok a potom ten 0x78 OLED chara... ?

Re: Display nhd-0216aw-ib3

Napísané: 15 Aug 2020, 16:26
od používateľa jirka.jirka.
Určitě šlo a vyzkoušel jsem to, ale změna žádná. Scroll nula.

Kód: Vybrať všetko

int32_t NHD02016_scroll(const uint8_t I2Cnumber, const uint8_t address) {
	int32_t ret;

	NHD0216_sendCommand(I2Cnumber, address, 0x2B);
	NHD0216_sendCommand(I2Cnumber, address, 0x2A); 
	NHD0216_sendCommand(I2Cnumber, address, 0x11);
	NHD0216_sendCommand(I2Cnumber, address, 0x78);

	return ret;
}

Re: Display nhd-0216aw-ib3

Napísané: 15 Aug 2020, 17:09
od používateľa Ado_PO
Je možné že register SD je v log.1 ešte pred tým než začneme špárať do IS a RE a podľa tabuľky má byť v log.0.
Tak prehodiť 0x78 na samý začiatok.

Re: Display nhd-0216aw-ib3

Napísané: 15 Aug 2020, 17:15
od používateľa jirka.jirka.
Nic. Stále nefunkční. Zkouším různé kombinace a k tomu pochopit ten DS, ale nic nevychází.

-- Spojený príspevok 15 Aug 2020, 16:48 --

Podařilo se mi nastavit dvojitý font. Ale ten scroll je nějaký zapeklitý.

Kód: Vybrať všetko

int32_t NHD02016_DoubleFont(const uint8_t I2Cnumber, const uint8_t address) {
	int32_t ret;

	//extended command set - enable 
	ret = NHD0216_sendCommand(I2Cnumber, address, 0x2A); if (ret < 0) return ret;
	//UD2, UD1 = high, DH = HIGH; 
	ret = NHD0216_sendCommand(I2Cnumber, address, 0x1D); if (ret < 0) return ret;
	//Regular command enable, doubleHeight font
	ret = NHD0216_sendCommand(I2Cnumber, address, 0x2C); if (ret < 0) return ret;

	return ret;
}

Re: Display nhd-0216aw-ib3

Napísané: 15 Aug 2020, 20:27
od používateľa stefanSK
Keď všetko zlyhá, prečítaj si návod.
V displeji je použitý riadiaci obvod US2066. Možnože pomôže si pozrieť popis tohto obvodu.

Re: Display nhd-0216aw-ib3

Napísané: 15 Aug 2020, 21:05
od používateľa jirka.jirka.
:D Tento návod jsem četl. Ale stejně z něho nejsem moudrý. Tady není problém asi v datasheetu, ale spíše ve mně. Já mu prostě nerozumím. :rolleyes:

Re: Display nhd-0216aw-ib3

Napísané: 15 Aug 2020, 21:46
od používateľa stefanSK
Postup by mal byť takýto(1. Fundamental command Set):
1. povoliť shift príkazom (Shift Enable) NHD0216_sendCommand(0x11) // scrol on 1. lin (IS=1, DE=1,SD=0)
2. vykonať shift príkazom(Cursor or Display shift) NHD0216_sendCommand(0x1C) // shift display to right (IS=0, DE=0,SD=0)
alebo
3. vykonať shift príkazom (Cursor or Display shift) NHD0216_sendCommand(0x18) // shift display to left(IS=0, DE=0,SD=0)

Re: Display nhd-0216aw-ib3

Napísané: 16 Aug 2020, 06:12
od používateľa Atlan
A nieje to tak ze kazde poslanie sposobi len posun o jeden znak, tj nespusti beh v lavo alebo v pravo?

Re: Display nhd-0216aw-ib3

Napísané: 16 Aug 2020, 09:34
od používateľa jirka.jirka.
Atlan na to přišel. :biggrin:

Mám funkci:

Kód: Vybrať všetko

int32_t NHD0216_scroll(const uint8_t I2Cnumber, const uint8_t address) {
	int32_t ret;

	//function set (fundamental command set)
	ret = NHD0216_sendCommand(I2Cnumber, address, 0x28); if (ret < 0) return ret;
	//function set (extended command set and regular size font)
	ret = NHD0216_sendCommand(I2Cnumber, address, 0x11); if (ret < 0) return ret;
	//UD2, UD1 = high, DH' = HIGH (0b00011101)
	ret = NHD0216_sendCommand(I2Cnumber, address, 0x18); if (ret < 0) return ret;

	//regular command set, double-height font - then
	//ret = NHD0216_sendCommand(I2Cnumber, address, 0x2C); if (ret < 0) return ret;

	return ret;
}
kterou když zavolám 3x, tak posune text o tři znaky doleva. Tzn. jezdící text si musím udělat sám. Nu což, myslel jsem, že ta chytristika je tam lepší.

Re: Display nhd-0216aw-ib3

Napísané: 16 Aug 2020, 12:39
od používateľa stefanSK
Myslím, že keď už povolíš scroll a nastavíš smer, tak ti stačí posielať už iba príkaz:

ret = NHD0216_sendCommand(I2Cnumber, address, 0x18); if (ret < 0) return ret;

čo spôsobí samotný posuv. Predtým si tento príkaz nepoužíval (v prvých príkladoch som ho nevidel až v poslednom)

Re: Display nhd-0216aw-ib3

Napísané: 16 Aug 2020, 13:12
od používateľa jirka.jirka.
jj vyzkoušeno. Text se netočí, jenom se posouvá až zmizí.

Takže v tomto případě jsem volil cestu napsání si vlastního scroll displeje. A už to chodí. :agree: