Re: 4 Zeilen/40 Zeichen LCD über I²C Kategorie: Programmierung (von Michael - 29.04.2009 15:19) | ||
Als Antwort auf Re: 4 Zeilen/40 Zeichen LCD über I²C von André H. - 24.04.2009 10:57 | ||
| ||
> Hallo Michael, > > > Bin gerade dabei die Funktionen in pfdlcd.c2 auf ein 4 Zeilen/40 Zeichen LCD anzupassen. > > Habe dazu das pfdlcd- Interface und den 4x40 LCD- Adapter von CCTools im Einsatz. > > Werde die R/W- Leitung als 2. Enable verwenden. Der erste LCD- Controller funktioniert schon, > > ... > > Wenn ich das 2. Display ansprechen will und dazu in den Funktionen in pfdlcd.c2 den R/W- Port > > aktiviere, muss ich dann den Enable- Port (E1) trotzdem auf â??highâ?? lassen oder nicht? > > Nein. Es wird nur ein High-Impuls ausgegenen. > Im Ruhezustand sollte Enable auf low bleiben. > > > Habe es mal so probiert, dass ich in meine Ansteuer- Funktionen immer das entsprechende Enable > > setze und das Andere zurücksetze. Also entweder der E-Port oder R/W-Port. > > Das funktioniert aber nicht. > > In der Doku zum 4x40 LCD- Adapter steht nur, dass man über Jumper auch das R/W- Signal > > als E2 verwenden kann (was ich natürlich getan habe). > > Aber nicht, ob das Enable in diesem Fall für beide Controller gilt und der Adapter selbstständig > > am Ausgang zum LCD entsprechen E1 oder E2 aktiviert. > > Doch, in der Anleitung zum 4x40 Adapter steht genau dies. > Enable in Deinem Fall vom PCFLCD-Adapter bleibt Enable für beide LCD-Hälften. > Wenn auf R/W zum umschalten gejumpert wird, dient die R/W-Leitung dazu, > zwischen den beiden Hälften umzuschalten. Low=obere Hälfte, High=untere Hälfte. > > Die Ports des PCF-LCD-Interfaces werden standardmäÃ?ig so verwendet: > /* P0= RS */ > /* P1= R/W */ > /* P2= E */ > /* P3= LCD-Light */ > /* P4-7= Data */ > > > In Deinem Fall ändert sich das aber zu folgendem: > /* P0= RS */ > /* P1= LCD-Select */ > /* P2= E */ > /* P3= LCD-Light */ > /* P4-7= Data */ > > > Um bei Deinem Beispiel zu bleiben, welches vom Ansatz schon korrekt war: > function select(byte select) > {//wenn select true (ungleich 0) dann untere hälfte, sonst obere > enable=(select!=0) and 0x02; > } > > function init () > { > light=light and 8; > i2c.cstart(PCF); > i2c.write(0x30 or light or enable); > i2c.write(0x30 or light or enable); > i2c.write(0x30 or light or enable); // Function Set 8 Bit Controller 1/2 > i2c.write(0x30 or light or enable); > sleep 2; > ... > > > Allerdings würde ich hierfür eher die bereits vorhandene Variable "light" miÃ?brauchen. > Dann muÃ? nur an zwei Stellen etwas geändert werden und die Ausführungsgeschwindigkeit > wird nicht verlangsamt: > function setLight(byte state) > { > i2c.cstart(PCF); > // light= (state!=0) and 8; > light= ((state!=0) and 8) or (light and 2); // R/W beibehalten > i2c.write(light); > i2c.stop(); > } > > function select(byte select) > {//wenn select true (ungleich 0) dann untere Hälfte, sonst obere > light=(light and 8) or ((select!=0) and 2); > } > > function init () > { > // light=light and 8; > light=light and 10; //0b1010 > ... > > > Mehr muÃ? nicht geändert werden. > > MfG André H. Ja sauber, jetzt wo ich es weiÃ? lese ich es auch so in der Beschreibung ;-) Aber auf jeden Fall funktioniert es so. Die Idee mit dem Verwenden der "light"- Variable war auch gut. So musste ich nicht das ganze Modul durch den Wolf drehen. Danke auf jeden Fall mal! Kämpfe jetzt noch mit dem Problem, dass das Display immer wenn die Schütze meiner Heizungssteuerung einschalten nur noch Schrott anzeigt. Werde wohl ein Metallgehäuse auÃ?en rum bauen müssen. > | ||
Antwort schreiben Antworten: Re: 4 Zeilen/40 Zeichen LCD über I²C (von André H. - 3.05.2009 11:25) Re: 4 Zeilen/40 Zeichen LCD über I²C (von Michael - 4.05.2009 13:00) Re: 4 Zeilen/40 Zeichen LCD über I²C (von André H. - 10.05.2009 16:27) Re: 4 Zeilen/40 Zeichen LCD über I²C (von Andi - 30.04.2009 7:26) |