Hallo,
das die Balken nicht angezeigt wurden, lag an dem Spindeltrimmer. Ich wußte nicht das man da etwa 50 Umdrehungen braucht bis sich da was im Display tut. Nun sind da schöne schwarze Balken zu sehen.
Allerdings immer noch kein Text.
Das kann ja nur bedeuten, dass das Display keine Daten empfängt.
Ich habe nochmals in die Header geschaut ob ich nicht doch was vergessen haben könnte, aber ich wüßte nicht was.
Der muss doch nur die Pin-Konfiguration und die Device-Adresse wissen, oder?
Mal was anderes, der µc arbeitet automatisch im Master Betrieb? Könnte da vielleicht irgendetwas fehlen? Anderseits funktioniert der SD21 Servocontroller auch, also muss das ja irgendwie an dem Portexpander liegen.
Was kann man denn bei dem Teil so falsch machen?
Ich denke mal die Adresse 0x40 passt wenn ich A0,A1 und A2 auf GND gelegt habe. Ich muss doch nur einen davon auf VCC legen wenn ich mehrere Portexpander verwende, damit sie andere Adressen erhalten,
gell?
Ich habe gerade mal etwas ausprobiert. Da ich mir bezüglich der letzten Aussage unsicher war (A0,A1,A2 auf GND), habe ich mal die Adresse 0x4E verwendet. Das wäre die letzte Adresse. Damit hat sich das Programm aufgehangen, weil keiner geantwortet hat. Also muss die Adresse 0x40 korrekt sein.
Achja, den INT-Pin vom Portexpander habe ich nicht angeschlossen. Ich dachte mir das ich eh keine externen Interrupts dafür benötige.
Ich habe mich übrigens an diesem Projekt orientiert:
http://www.bralug.de/wiki/BLIT2008-Board-LCD
Da ist auch ein Testprogramm, dem ich diverse Zeilen entnommen habe.
Die Init und Ausgabe. Das Backlight habe ich weggelassen, da meines vorerst immer an ist.
Momentan bin ich ziemlich ratlos, weil ich irgendwie keinen Fehler entdecken kann.
Gruß, Andreas
###############################
Edit
Ich habe gerade folgendes ausprobiert:
Code:
// TWI initialisieren
i2c_init();
// LCD initialisieren
//lcd_init();
// LCD-Anzeige loeschen
//lcd_command(LCD_CLEAR);
// Text auf LCD ausgeben
//lcd_printlc(1,1,(unsigned char *)"TEST");
//lcd_printlc(2,1,(unsigned char *)"Hallo");
i2c_start_wait(LCD_I2C_DEVICE+I2C_WRITE);
i2c_write(0xF0);
i2c_stop();
Per Multimeter habe ich nun die Pinne durchgemessen. Das Ergebnis:
4x Low und 4x High.
Die Kommunikation zum Portexpander scheint also okay.
Merkwürdig ist, das es trotzdem nicht funktioniert. Außer schwarze Balken in Zeile 1 nix zu sehen.
###############################
Edit
Ist es möglich das es an der "Auflösung" der Matrix liegt?
Ich zähle 5X8 Punkte.
In der von mir beigefügten Datei i2clcd.c steht unter lcd_init(); jedoch 5x7.
Dummerweise kann man laut Header i2clcd.h nur zwischen 5x7 und 5x10 wählen. Wahrscheinlich wohl auch 5x8, aber welche HEX-Adresse wäre das denn dann?
Oder mal anders gefragt: Wenn diese "Auflösung" nicht stimmt, müsste dann nicht wenigstens der Befehl lcd_command(LCD_CLEAR); funktionieren? Also, müssten die schwarzen Blöcke nicht gelöscht werden?
Vielleicht kann mir ja jemand sagen, welche Adresse ich verwenden muss um die 5x8 zu verwenden.
Lesezeichen