Zitat Zitat von inka Beitrag anzeigen
das 16x2 display, alle bisher gekauften hatten die adresse 0x27. Die neue lieferung hat aber 0x3F. Und das ist bei der bestellung nicht erkennbar ...
edit: im "kleingedruckten" steht es manchmal drin, habe nicht drauf geachtet
.
Vermutlich handelt es sich bei der I2C-Schnittstelle am LCD um einen PCF8574 oder eben PCF8574A. Nach allem was ich zu dieser Thematik bisher gelesen hatte, ist das eine regelmäßige Quelle von Frust. Ich kann nicht herauslesen, ob du das weißt. Der A-Typ wurde bewusst geschaffen, um den Adressraum von Portexpandern, also die maximale Anzahl gleicher Bausteine an ein-und-dem-selben I2C-Bus zu verdoppeln.

Zitat Zitat von inka Beitrag anzeigen
Ein wechsel von 0x2 zu 0x3 geht wohl nicht, oder?
Nein, die Basisadresse kannst du nicht um-basteln, die ist im Silizium fest verankert.

Zitat Zitat von inka Beitrag anzeigen
im code ist dann immer diese zeile: "LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);"
lässt sich das irgendwie so einrichten, dass die adresse erstmal abgefragt und dann festgelegt wird? Sowas wie "ifndef"?
ifndef ist eine Anweisung an den Preprozessor. Damit kannst du bei der Compilierung steuern, ob die Variante ... lcd(0x27... oder ...lcd(0x3F... in das Programmfile eingebaut wird. Dann hast du eben immer genau die eine ODER die andere Display-Adresse im Code.
Alternativ kannst du bei Programmbeginn (PowerUp) einen Jumper bzw. Taste abfragen oder eine Menüfunktion zur Umschaltung mit Speicherung der Displayvariante im EEPROM realisieren. Abhängig davon wird im Programm die eine oder die andere Befehlsvariante abgearbeitet. Das ist dann flexibler. Besser noch, wenn du die Konstante durch eine Variable ersetzt, die am Programmanfang EINMAL den passenden Wert zugewiesen bekommt, Dann wird eben ...lcd(my_lcd_address.... in den Code geschrieben und die Umschaltung kann an EINER Stelle im Programm erfolgen.
Kommt eben drauf an, was genau du benötigst.