Problém s displejem 16x4 přes I2C
Problém s displejem 16x4 přes I2C
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
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
robodoupe.cz
Re: Problém s displejem 16x4 přes I2C
Ř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
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.
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.
Re: Problém s displejem 16x4 přes I2C
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ř
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
robodoupe.cz
Re: Problém s displejem 16x4 přes I2C
Tak v obou knihovnách je něco jako toto (adresy jsou stejné):
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
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]));
}
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
robodoupe.cz
-
- Příspěvky: 385
- Registrován: 02 dub 2014, 15:30
Re: Problém s displejem 16x4 přes I2C
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
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
Re: Problém s displejem 16x4 přes I2C
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
Re: Problém s displejem 16x4 přes I2C
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.
Re: Problém s displejem 16x4 přes I2C
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...
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
robodoupe.cz
Re: Problém s displejem 16x4 přes I2C
No to vyplývá z toho adresování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.
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.
-
- Příspěvky: 385
- Registrován: 02 dub 2014, 15:30
Re: Problém s displejem 16x4 přes I2C
tady jsou mapy adres pro zakladni typy znakovych displeju.
https://www.google.cz/url?sa=t&rct=j&q= ... Gg&cad=rja
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.