Re: 4 Zeilen/40 Zeichen LCD über I²C Kategorie: Programmierung (von André H. - 24.04.2009 10:57) | ||
Als Antwort auf 4 Zeilen/40 Zeichen LCD über I²C von Michael - 24.04.2009 9:34 | ||
| ||
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. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: Re: 4 Zeilen/40 Zeichen LCD über I²C (von Michael - 29.04.2009 15:19) 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) |