Grüß dich Painfabric,
ich habe mir jetzt mal die Datenblätter der beiden im Bausatz angegeben LCDs angesehen.
- 120420 (2x7polig und 2x1polig,X2 und BLA, BLK)
http://www.pollin.de/shop/downloads/D120420D.PDF
- 120421 (1x16 polig, X1)
http://www.pollin.de/shop/downloads/D120421D.PDF
In Beiden ist die Funktion der Pins identisch. (Also kein Unterschied beim Programmieren.)
Ich bin mir relativ sicher, dass doch ein Problem über die Defines aus deiner angegeben i2clcd.h kommt.
Im Schaltplan sind verbunden:
CPU - LCD
P0 -> Pin 11(D4) -> OK; #define LCD_D4_PIN 0
P1 -> Pin 12(D5) -> OK; #define LCD_D4_PIN 1
P2 -> Pin 13(D6) -> OK; #define LCD_D4_PIN 2
P3 -> Pin 14(D7) -> OK; #define LCD_D4_PIN 3
P4 -> Pin 4(RS) -> OK; #define LCD_RS_PIN 4
P5 -> Pin 5(R/W) -> OK; #define LCD_RW_PIN 5
P6 -> Pin 6(E) ===> PROBLEM; #define LCD_EMPTY_PIN 6
P7 -> Pin 15(A) (LED über Transistor) ===> PROBLEM; #define LCD_E_PIN 7
In der Pollin-Schaltung ist meiner Meinung nach die Pin 6(E)-Leitung NICHT über Port LCD_E_PIN (also 7) erreichbar.
Du solltest mal die Portnummern hinter den Defines so anpassen:
#define LCD_EMPTY_PIN 7
#define LCD_E_PIN 6
Gruß Sternthaler
P.S.: Der Port-Pin 7 in der Pollin-Schaltung, über den Transistor am LCD angeschlosen, deutet darauf hin, dass mit dem Port-Pin das LCD an- bzw. ausgeschaltet werden kann.
Da der Define den Namen LCD_EMPTY_PIN hat, glaube ich nicht, dass mit dem Code die LCD-Beleuchtung gesteuert werden kann.
Deshalb solltest du diesen Pin immer mit '1' ansteuern, oder eine eigene Funktion dafür machen.
P.P.S.: Hier noch die Stellen die diesen E-Pin-Define nutzen:
Aus i2clcd.h:
#define LCD_E (1 << LCD_E_PIN) /**< E-bit in 1st and 2nd higher nibble */
Aus i.c:
void lcd_write(unsigned char value)
{
lcd_write_i2c(value | LCD_E); //- Set enable to high
lcd_write_i2c(value | LCD_E); //- Send data, keep enable high
lcd_write_i2c(value & (!LCD_E)); //- Set enable to low
}
Lesezeichen