irgendein anderer LCD-Controller angeschlossen ist, wenn man es ihm nicht mitteilt?
Wenn nichts angegeben wird, gilt das was bei den defaults steht.
Config LCD ersetz/übersteuert die defaults, und da kannst Du optional auch einen LCD-Chipsatz angeben.
Config LCD ist Bestandteil der Bascom-Standard-Bibliothek. Bei Funktions/Subroutinen usw wird immer zuerst der Code durchsucht, dann die eingebundenen Bibliotheken (Reihenfolge wie im Code eingebunden), und zuletzt die Standard-Bibliothek. In der "Lcd_i2c.lib" die in Zeile 3 eingebunden wurde, können also durchaus Routinen enthalten sein, die die LCD-Routinen der Standard-Bibliotheken ersetzen.
Soweit ganz gut, und das gibt es (wahrscheinlich) auch bei anderen Sprachen - das Problem ist für mich die Dokumentation (der Biblioheken). Ich weiß eben nicht, ob durch die Einbindung dieser zusätzlichen Bibliothek die Initialisierung von I²C und danach dem Display bereits automatisch vorgenommen wird, und wie. Und die (Online)Hilfefunktionen liefern dann natürlich die Angaben, die eigentlich die Standard-Bibliothek betreffen...
Die Bibliotheken können quasi als Quelltext oder verschlüsselt angelegt werden - letztere lassen sich nicht wirklich einsehen (Du kannst natürlich das Compilat reassemblieren, aber...)
Das heißt dann also man kann nur LCDs mit dem Standard-Controller
Nein, Du kannst natürlich problemlos selbst auch alles im Code schreiben, ohne die vorgegebenen LCD-Instruktionen zu verwenden - Du kannst auch nahezu Problemlos mitten im Code Assembler einfügen (sogar auf Rechenregister-Ebene). Du kannst das ganze natürlich auch in eigene Bibliotheken packen. Und Du kannst in Deinen Bibliotheken Routinen verwenden, die Routinen anderer Bibliotheken ersetzen.
z.B. kannst Du mit Config SDA und Config SCL die I²C-Beine bekannt machen. Bascom legt dann intern Variablen/Konstanten für die Pin- und Port- und DDR-Register und Bits an. Und zwar, wenn im Code "I2Cinit" oder so aufgerufen wird. in der aufrufenden Bibliothek wird dann außerdem die TWI scharfgemacht (mit Parametern usw, glaub ich.)
Nun haben einige Controller ja kein I²C, sondern lediglich 'n USI. Wenn man jetzt aber 'ne Bibliothek dazu implementiert, die da Multi-Master-Arbitrierung unterstützen soll, und die Controllerunabhängig sein soll, und die die Satndard-I²C-Instruktionen von Bascom verwenden soll, muß man eben in der eigenen Bibliothek Routinen anlegen, die genauso heißen - insbesondere auch die I2Cinit-Routine.
Am Rande: wenn die I2Cinit als leere Routine entsprechend eingebunden wurde, werden trotzdem die Konstenten für die Beine angelegt - keine Ahnung wo Bascom das macht (wäre bei einigen anderen Sachen ja auch nützlich, bei OC-Pins von Timern zB...)