Problém s displejem 16x4 přes I2C

Uživatelský avatar
Dex
Administrátor
Příspěvky: 1528
Registrován: 16 úno 2013, 14:26

Problém s displejem 16x4 přes I2C

Příspěvek od Dex »

Zdravím,

narazil jsem na takovou věc :)

Když připojím k Arduinu textový displej 16x4 pomocí modulu na I2C (s PCA8754), tak přestože provedu inicializaci jak mám a nastavím kurzor na třetím a čtvrtém řádku na pozici 0, text se vypíše až na pozici 4 :) Na prvním a druhém řádku se to chová normálně.

Dělají mi to dvě různé i když asi odvozené knihovny.

Stačí ale nastavit kurzor na pozici -4 a je po problému ;) Jako dokážu si s tím poradit, možná bych i knihovnu zvládl opravit (jen se mi nechce :)), ale nemáte někdo náhodou podobnou zkušenost?

Obvykle se asi používají spíše displeje 16x2 či 20x4 a tak to možná nikdo ani netestoval ;)
"all your robots are belong to us"
robodoupe.cz
DavidO
Příspěvky: 1138
Registrován: 01 kvě 2013, 21:27

Re: Problém s displejem 16x4 přes I2C

Příspěvek od DavidO »

Řekl bych, že to nebude tím expanderem, ale špatnou adresací, konkrétně špatně nastaveným offsetem pro jednotlivé řádky. Výpis na řádek X sloupec Y se typicky v knihovně udělá stylem adresa=row_offset[X] + Y takže těch tvých -4 to prostě jen správně dorovná.
Jakou používáš knihovnu a jaký přesně řadič je na tom displeji? Čtyřřádkové se pokud vím dělají kombinací dvou dvouřádkových sdílejících stejnou paměť akorát každý adresuje jinam (třeba na mojem řádky začínají na adresách 0, 0x40, 0x14, 0x54)
Knihovnu si opravíš snadno, koukneš do zdrojáku a někde tam bude buď tabulka začátků řádek anebo konstanty pro jednotlivé řádky, no tak tam prostě změníš ty dva a až budeš kompilovat projekt příště, ujme se to.
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Uživatelský avatar
Dex
Administrátor
Příspěvky: 1528
Registrován: 16 úno 2013, 14:26

Re: Problém s displejem 16x4 přes I2C

Příspěvek od Dex »

Tak knihovny jsem zatím zkoušel dvě a to LiquidCrystal_I2C a LiquidCrystal_PCF8574.

Obvod v tom adaptéru je PCA8574D a displej je MC1604C-SYL*C a ten používá (asi) driver SPLC780D.

Mno dobře, jdu si prohlédnout ty knihovny zevnitř :-)
"all your robots are belong to us"
robodoupe.cz
Uživatelský avatar
Dex
Administrátor
Příspěvky: 1528
Registrován: 16 úno 2013, 14:26

Re: Problém s displejem 16x4 přes I2C

Příspěvek od Dex »

Tak v obou knihovnách je něco jako toto (adresy jsou stejné):

Kód: Vybrat vše

void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row){
	int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
	if (row > _rows) {
		row = _rows-1;    // we count rows starting w/0
	}
	command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
}
To ale vypadá správně nebo se pletu?

Pochopitelně můžu tam dát 0x10 a 0x50, ale je to podivný respektive bych chtěl vědět, proč to tak je :)

EDIT: a po opravě to - překvapivě :) - funguje jak má. Holt asi tvůrce toho řadiče ušetřil pár bajtů, jinak nevím ;)
"all your robots are belong to us"
robodoupe.cz
Vladimir66
Příspěvky: 385
Registrován: 02 dub 2014, 15:30

Re: Problém s displejem 16x4 přes I2C

Příspěvek od Vladimir66 »

16x4 je dost atypicky format.
vetsinou ty char. knihovny jsou opravdu pro 16x2, 20x4, (20x2, 8x2)
urcite to uprav a pokud to bude slapat, tak bych to dal neresil.
V66
aladin
Příspěvky: 338
Registrován: 12 kvě 2013, 06:43

Re: Problém s displejem 16x4 přes I2C

Příspěvek od aladin »

Nech si vypisovat znaky od pozice 0,0 do max pozice a nektere displeje maji 3. radku jako pokracovani 1. a 4. jako 2.
fischertip.cz, Stavebnice.com, MerkurRobot.cz, KlubTechniku.cz
DavidO
Příspěvky: 1138
Registrován: 01 kvě 2013, 21:27

Re: Problém s displejem 16x4 přes I2C

Příspěvek od DavidO »

Podle datasheetu MC1604C-SYL*C zde to je stejně jako obvykle, tj. jak jsem psal já i V66. Ty adresy můžou být jinak ze dvou důvodů: 1. Není to originální MC1604C-SYL*C a kopista to udělal krapet jinak, nebo 2. máš posunuté zobrazování (display shift).
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Uživatelský avatar
Dex
Administrátor
Příspěvky: 1528
Registrován: 16 úno 2013, 14:26

Re: Problém s displejem 16x4 přes I2C

Příspěvek od Dex »

Tak kopie to být může, ovšem zrovna tento displej jsem kupoval (před pár lety) v GME. Zobrazování posunuté nemám (aspoň o tom nevím ;)).

Ten datasheet sice popisuje displej 1604, ale tabulka adres je pro 2004. Tohle se prostě chová tak, jako by ty zbytečné bajty někdo vynechal a protože 3. řádek je vlastně pokračování 1. ovšem bez "rezervy" pro 2004 displeje, tak to blbne. Vztah mezi 2. a 4. je stejný.

Jak jsem psal, už to funguje v pohodě, jen musím pamatovat na to, že mám tu knihovnu upravenou...
"all your robots are belong to us"
robodoupe.cz
DavidO
Příspěvky: 1138
Registrován: 01 kvě 2013, 21:27

Re: Problém s displejem 16x4 přes I2C

Příspěvek od DavidO »

aladin píše:Nech si vypisovat znaky od pozice 0,0 do max pozice a nektere displeje maji 3. radku jako pokracovani 1. a 4. jako 2.
No to vyplývá z toho adresování ;)
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Vladimir66
Příspěvky: 385
Registrován: 02 dub 2014, 15:30

Re: Problém s displejem 16x4 přes I2C

Příspěvek od Vladimir66 »

tady jsou mapy adres pro zakladni typy znakovych displeju.

https://www.google.cz/url?sa=t&rct=j&q= ... Gg&cad=rja
Naposledy upravil(a) Vladimir66 dne 17 dub 2017, 22:50, celkem upraveno 1 x.
Odpovědět