Jak na Busy v LCD 2x16 v 4bit módu?
Moderátor: Moderátoři
Jak na Busy v LCD 2x16 v 4bit módu?
Když tu není Andrea, jestlipak se tu najde někdo, kdo bude vědět v čem je dílo??
Díky
Jirka
Atlan píše:Nejako ta nevidim ovladat RS bez toho nejde citat FLAG busy
Pleteš se, čtení stavu je vývod RW. RS je identifikace instrukce nebo data. RW a RS a E mám určitě dobře, psal jsem, že to v 8 bitu chodí. Viz zde pro 8 bitu AT98C4051 (normální je pro 8 bit, modrá je přidaná pro 4 bit, vlastní čtení DDRAM se jen simuluje, nepotřebuju ji). Musel jsem přidat tečky Nuke neumí TAB a víc mezer za sebou. E, RW a RS jsou na P3.
BUSY:
.....CLR......E_LCD..........;LCD DISABLE
.....MOV.....P1,#0FFH.....;PREVRACENI P1 NA CTENI
.....CLR......RS_LCD........;INSTRUKCE
.....SETB.....RW_LCD......;CTI STAV
.....NOP.........................;PRO UKLIDNENI
.....SETB.....E_LCD.........;LCD ENABLE
BUSY1:
.....JB.........P1.7,BUSY1...;CEKA NA 0
.....CLR.......E_LCD.........;LCD DISABLE
.....SETB.....E_LCD.........;LCD ENABLE, CTENI DRUHY PULKY
.....NOP..........................;PRO UKLIDNENI
.....CLR......E_LCD...........;LCD DISABLE
.....CLR......RW_LCD.......;VRAT NA ZAPIS
.....SETB.....RS_LCD.......;NASLEDUJI DATA
.....RET
Jirka
http://www.avrbeginners.net/interfacing ... /4bit.html
podle mě je to trochu jinak. Z datasheetu hlavně vyplývá, že:
- minimální perioda hodin na vstupu Enable je 1µs
- oba dílčí přenosy bajtu jsou strobované sestupnou hranou Enable
Jenže při čtení busy/not busy je jen D7 onen klíčový bit, zbytek bajtu je aktuální adresní ukazazel CGRAM! Takže správně by to mělo vypadat následovně:
[1] přečíst stav busy/not busy
[2] počkat, až bude stav not busy
[3] poslat (příkladně) zápisový bajt
[4] odchod z podprogramu
A vlastní přenos bajtu (je fuk jestli zápis čehokokoli, čtení, zjišťování stavu) provádět stylem:
[1b] přenos prvního nibble (strobovaný sestupnou hranou Enable)
[2b] pauza 1µs
[3b] přenos druhého nibble (viz [1b])
Platí i pro tu proceduru "Read busy flag". První nibble obsahuje busy bit a část adresy, druhý zbylou část adresy CGRAM, takže podle něj (toho druhého) nelze odhadovat okamžik, kdy je dovolený další přenos bajtu po částech. Viz výše.
- Přílohy
-
HD44780.png- (62.6 KiB) Staženo 90 x
1/ nastaví RW=1, RS=0, E=1
2/ počkají 1 x NOP
3/ načtou první půlku stavu
4/ nastaví E=0
5/ počkají 2 x NOP
6/ nastaví E=1
7/ počkají 1 x NOP
8/ načtou druhou půlku stavu
9/ nastaví E=0
10/ otestují bit Busy a pokud stále je, tak to čtou celý znova
Takže i když datašít ukazuje na sestupnou hranu, tak řadič reaguje už na úroveň E=1. Takhle to v 8bit režimu používám od roku 1992.
Ale nejpodstatnější je, že když jsem přidal už 1 NOP ( do bodu 5/) tak se to rozjelo!!! Jestli počítám správně, tak při krystalu 12MHz je dýlka vykonání NOP právě kolem 1uS a nejspíš řadič LCD nedokázal na ten "pulz do nuly" mezi dvěma E(nable) zareagovat.
Díky všem kdo se ozvali.
Jirka