Ich habe eine Verständnisfrage zur Ansteuerung eines LCDs mit I2C Adapter.
Es gibt zwar einige Informationen im Netz, aber für ASM habe ich noch nichts Passendes gefunden.
Wenn ich es richtig verstehe, dann verwenden auch diese Adapter den 4 Bit Modus. Da E,RW,RS nicht getrennt angesteuert werden können, muß ich sie mit der ersten Bytehälfte und die LCD Signale mit der zweiten Bytehälfte übertragen. Dann fehlen aber immer noch die zweiten 4 Bits für das LCD. Was passiert damit? Ein Halbbyte hinterher geht ja nicht wegen E,RW,Rs.
Es gibt zwar einige Informationen im Netz, aber für ASM habe ich noch
nichts Passendes gefunden.
Das ist kein Wunder, denn Du musst nicht nach "PCF8574 ASM" suchen, sondern nach "I2C ASM" in Verbindung mit dem von Dir geheimgehaltenen Microcontroller.
Du willst mit Deinem Microcontroller I2C-Geräte ansteuern. In Assembler, warum auch immer.
Und mit dem PCF8574 willst Du ein LC-Display mit HD44780 ansteuern.
Das ist der dritte Schritt.
Beim Losgehen fängt man mit dem ersten Schritt an.
Wie der Vier-Bit-Modus beim HD44780 funktioniert, solltest Du Dir hingegen in dessen Datenblatt ansehen, mit "ASM" hat der nun erst recht überhaupt nichts zu tun.
Im 4Bit-Mode brauchst Du 6 Ausgänge, RW legst Du fest auf GND.
Der PCF8574 muß dann die Zugriffssequenz entsprechend LCD-Datenblatt (HD44780U) ausgeben, d.h. mehrere I2C-Bytes. Der PCF8574 kann mehrere Bytes ausgeben, ohne jedesmal neu adressieren zu müssen.
Ein Halbbyte hinterher geht ja nicht
wegen E,RW,Rs.
Warum nicht?
Du mußt nur dafür sorgen, daß nur die gewünschten Bits geändert ausgegeben werden (And, Or, Shift, Swap-Operator). Falls Du mit Bitmanipulation in Assembler Probleme hast, nimm besser gleich C.
Ich habe eine Verständnisfrage zur Ansteuerung eines LCDs mit I2C
Adapter.
Es gibt zwar einige Informationen im Netz, aber für ASM habe ich noch
nichts Passendes gefunden.
Wenn ich es richtig verstehe, dann verwenden auch diese Adapter den 4
Bit Modus. Da E,RW,RS nicht getrennt angesteuert werden können, muß ich
sie mit der ersten Bytehälfte und die LCD Signale mit der zweiten
Bytehälfte übertragen.
Ja.
Dann fehlen aber immer noch die zweiten 4 Bits
für das LCD. Was passiert damit? Ein Halbbyte hinterher geht ja nicht
wegen E,RW,Rs.
Man schickt einfach ein zweites Byte! Dabei bleiben die Datenbits halt unverändert.
Im 4Bit-Mode brauchst Du 6 Ausgänge, RW legst Du fest auf GND.
Der Adapter ist mit dem LCD ja fest verbunden, d.h. man kann Rw nicht fest auf GND legen. Jedes Byte geht m.E. immer an E, RS,RW,LED,D4-D7. Oder hat der Adapter eine eigene Logik?
Ich kann erstmal keinen Schaltplan dazu finden.
Du kannst es nur als Black-Box benutzen, also nicht selber programmieren.
D.h. Du kriegst es nur dann zum Laufen, wenn Du ein dafür spezifiziertes LCD anschließt und dann die dafür vorgesehene Arduino-Lib benutzt.
Wenn es mit Arduino geht, muß es doch auch mit einem anderen Controller
gehen!
Natürlich, Du mußt nur die Arduino-Lib portieren. Die gibt es bestimmt auch als Quelltext.
Wichtig ist nur, daß Du eines der aufgeführten LCDs benutzt. Es gibt auch reichlich LCDs mit abweichender Pinbelegung, z.B. welche mit vertauschten VDD/VSS-Pins oder mit negativer Kontrastspannung.
Wenn ich die Kommentare für mich zusammenfasse, dann bedeutet es, daß ich für jedes Datenbyte zwei Bytes übertrage muß, bestehend aus jeweils E, RW, RS, 1/0, lower 4 Bits, bzw. higher 4 Bits.
Wenn ich die Kommentare für mich zusammenfasse, dann bedeutet es, daß
ich für jedes Datenbyte zwei Bytes übertrage muß, bestehend aus jeweils
E, RW, RS, 1/0, lower 4 Bits, bzw. higher 4 Bits.
Kann das richtig sein?
Ja. Du musst sogar NOCH mehr übertragen, denn du musst ja noch das Signal E pulsen. Also eher 3 I2C Byte / 4 Bit bzw. 6 I2C Byte / Datenbyte.
Ich weis selbst, daß der nicht schön ist, aber, das ist das Bestte, was ich finden konnte, und alle notwendigen Infos sind darin erkennbar.
Also spar dir dein Gemecker!
Du mußt nur dafür sorgen, daß nur die gewünschten Bits geändert
ausgegeben werden (And, Or, Shift, Swap-Operator). Falls Du mit
Bitmanipulation in Assembler Probleme hast, nimm besser gleich C.
Na das ist ja mal sehr witzig. Bitmanipulationen in C sind ganz genauso "unleserlich" wie in Asm. Wenn man halt die jeweilige Sprache nicht beherrscht...
Der Vorteil von ASM ist: man kann leicht erkennen, ob es sich um eine RMW-Operation handelt (und damit die entsprechenden Konkurrenzprobleme auftreten könnten). In C muss man raten oder in die Untiefen der Implementierung absteigen (die dann letzlich oft auch wieder nur in ASM ist).
Also: wen willst du hier verarschen?
Das einzige, was man zu deiner Ehrenrettung anführen könnte: In der konkreten Anwendung immerhin dürften Konkurrenzprobleme keine Rolle spielen...
Hier noch etwas.
Leider gibt es die AVR-Freaks Seite nicht mehr direkt.
Über Umwege noch den Beitrag von @Peda für LCD-Ansteuerung mit I2C dort gefunden.
Der Trick:
Man muss verkapseln. Dann kann man auch den Enableimpuls übertragen.
Was mag es wohl bedeuten, wenn da steht "Wichtige Regeln - erst lesen, dann posten!" und weiter "... Bitte das JPG-Format (...) für Fotos und Scans verwenden!"?
Einfach mal mitdenken und vielleicht den Artikel über Bildformate lesen.