Stránka 1 z 1

LCD nastaveni komunikace I2C

Napsal: 09 srp 2020, 19:05
od jirik
Zdravím, mám LCD RC1602B5-LLH-JWV měl by umět komunikovat po 4bit, 8bit, nebo i2c. Zatím se mně nepodařilo rozchodit ani jednu komunikaci. Postupoval jsem dle datasheetu, nastavení adresy, je uváděna 7bit 0111100, udělal jsem posun doleva na 8bit ale nefunguje. Jen při zvýšení kontrastu se rozsvítí první řádek. Může někdo pomoci co je špatně? Díky. Na komunikaci i2c jsem použil toto:

REM RC1602B5 s I2C 2x16 - PICAXE 28X2
#PICAXE 28X2
pause 100 ;čas na náběh
hi2csetup i2cmaster, %01111000, i2cslow_8, i2cbyte
hi2cout ($FE,$51) ;vymazání displeje
hi2cout ("Displej BC1602AI")
hi2cout ($FE,$45,$40) ;kurzor na 2. řádek
hi2cout ("rozhrani I2C")
end

Re: LCD nastaveni komunikace I2C

Napsal: 09 srp 2020, 20:50
od DavidO
Tyhle displeje se po zapnutí nastaví na 1 řádek a 8bitovou komunikaci. Takže když ti svítí jen jeden řádek, tak to znamená, že sis ho nepřepnul na dvouřádkový. Ale i kdyby ne, tak pokud by komunikace fungovala, tak by se ti něco mělo zobrazit aspoň v něm. Takže že se ti nepovedlo zobrazit vůbec nic rozumného, tak bude problém už v samotné komunikaci.

Takhle od stolu pár nápadů:
Máš tam pull-upy?
Máš přizeměný pin CSB?
Ošetřil sis správně adresu (piny SA0 a SA1)?
Těma hodnotama 51, 45, 40 si jsi jistý?

Kromě toho myslím (jistě se ale mohu mýlit), že správná komunikace přes i2c je složitější. V náhodně nalezeném datasheetu to vypadá, že musíš vždycky poslat adresu (o to se postará Picaxe), pak aspoň jeden bajt, kde budou příznaky Co a A0 a nějaký příkaz, a pak teprv nějaká data, takže ty texty si myslím takhle vypisovat nepůjdou.

Re: LCD nastaveni komunikace I2C

Napsal: 09 srp 2020, 21:08
od jirik
Pull-up mám 2k2. Pin CSB je přizemněný i piny SA0 a SA1 (dle datasheetu). Těma hodnotama jsi nejsem jistý, zaměnil bych je. Ale stále nevím jestli adresa LCD je správně.

Re: LCD nastaveni komunikace I2C

Napsal: 13 srp 2020, 17:21
od DavidO
jirik píše: 09 srp 2020, 21:08 Těma hodnotama jsi nejsem jistý, zaměnil bych je
Aha, tak je zaměň za takové, u kterých si jistý budeš :lol:
Ne, teď vážněji: kde se ty čísla vzaly? Upravuješ nějaký cizí projekt (odkaz?) nebo sis je sám někde vykoukal? Podle kterého datasheetu to děláš (odkaz?)

Nějak se mi ale stejně ty hodnoty od pohledu nezdají - $FE jsou nahozené všechny jedničky až na nejnižší, ale v tom prvním bajtu se myslím má nastavovat jen Co a A0, což jsou dva nejvyšší bity.
Displej je po resetu nastavený na 8bitový paralelní přenos, 1 řádek a je vypnutý. Pro použití jinak je potřeba ho přepnout na správný interface a pak si ho nakonfigurovat podle potřeby. Na i2c by se měl přepnout přitažením IF0 k Vdd a IF1 nechat nepřipojený.
No a pak je ještě potřeba ho softwarově zapnout, protože po resetu je vypnutý a když si pohraješ s kontrastem, tak leda tak uvidíš z vhodného úhlu jeden řádek plný obdélníčků, ale nic na něm (viz odstavec něco jako "internal reset procedure" nebo tak něco, může to být v různých datasheetech různě pojmenované). Zapnutí je příkazem 00001xxx resp. minimálně 00001100 ale klidně i 00001111, aspoň tam bude i blikající kurzor.

Adresa se mi zdá OK: na i2c jsou normálně sedmibitové, pro komunikaci se použijou tak, že těch 7 bitů jsou ty horní a k nim navíc ten nejnižší bit určuje, jestli píšeš nebo čteš, ale to za tebe udělá Picaxe, ty jen nastavíš tu adresu. Do příkazu hi2csetup se dává adresa zarovnaná doleva, tj. u tebe 0111100_ a ten nejnižší bit dáš 0, celkově teda 01111000.

Zařízení obvykle všechna umějí 100kHz i 400kHz, tj. pro Picaxe i2cslow i i2cfast, akorát si nejsem jistý, jak se to správně definuje pro rychlá Picaxe (jinak než na 8/16MHz, kde se použije koncovka _8 nebo _16 - jakou vlastně taktovací frekvenci používáš?)