Re: 4 Zeilen/40 Zeichen LCD über I²C Kategorie: Programmierung (von Andi - 30.04.2009 7:26) | ||
Als Antwort auf Re: 4 Zeilen/40 Zeichen LCD über I²C von Michael - 29.04.2009 15:19 | ||
| ||
Hallo Michael, für deine Schütze solltest du erstmal Funkenlöschung betreiben über Kondensator-Widerstand oder Dioden(bei Gleichspannung) und pull up widerstände an den Displayports wenn nicht schon vorhanden..... viel Erfolg, Andibu > > 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: |