Ich habe hier erst im Netz eine kleine Lib entdeckt, welche ein
Textdisplay über einen PCF8574 ansteuern soll.
http://scriptkiller.de/de/a19/computer_elektronik/mikrocontroller/hd44780_display_via_pcf8574_i%C2%B2c_io-expander/
Ich habe nun ein 8x2 Anag Vision 0802 Display dran ("KS0066 or
equivalent"), welches mit der Fleury-Lib und eigenem Code ohne Probleme
direkt an Portpins funktioniert. Das Display kommt nur nicht mit klar,
wenn die Pins D0 bis D3 im 4 Bit Mode auf 0 liegen, müssen floaten.
Die Lib verwendet eine i2c.h, welche ich nicht finden konnte, so hab ich
einfach die Ausgabe Funktion etwas angepasst:
1 | void lcdOut(unsigned char c) {
|
2 |
|
3 | //i2cMasterSendNI(LCD_I2C_ADDR, 1, &c);
|
4 | set_pcf8574(0x4e, c);
|
5 |
|
6 | }
|
7 |
|
8 | char set_pcf8574(unsigned char address, unsigned char val) {
|
9 | unsigned char ret = i2c_start(address+I2C_WRITE);
|
10 | if(ret) {
|
11 | i2c_stop();
|
12 | return -1;
|
13 | } else {
|
14 | i2c_write(val);
|
15 | i2c_stop();
|
16 | }
|
17 | return 0;
|
18 | }
|
Die PCFs (sind 6 Stück auf der Platine) funktionieren alle ohne
Probleme.
Das Display kommt anscheinend auch über init hinaus, da die schwarzen
Balken verschwinden, allerdings mehr tut sich auch nicht. Ob ein
lcd_clear() funktioniert, kann ich nicht sagen, da es nichts zu clearen
gibt.
Hier der Ausschnitt meiner main(), welcher relevant ist:
1 | i2c_init();
|
2 | sei();
|
3 | lcdInit();
|
4 | lcdClear();
|
5 | lcdPrintString((unsigned char *)"test");
|
Wenn ich den typecast nach unsigned char * für die PrintString weglasse,
dann meckert er wegen "differ in signedness", tut sich aber auch nichts
am Display.
Im Anhang die lcd.c und lcd.h aus meinem Projektordner.
http://www2.produktinfo.conrad.com/datenblaetter/175000-199999/183369-da-01-en-LCD_Modul_8x2_Zeichen.pdf
Hier das Datenblatt des Displays
Ich hoffe ihr könnt mir da helfen!