PCF8574 I2c Adapter mit ASM ansteuern

OP #7469829
Lesenswert?

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.

Dank und Gruß brumay

#7469840
Lesenswert?

Bruno M. schrieb:

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.

Das ist der erste Schritt.

Und Du willst einen PCF8574 ansteuern.

Das ist der zweite Schritt.

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.

#7469859
Lesenswert?

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.

Bruno M. schrieb:

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.

#7469866
Lesenswert?

Bruno M. schrieb:

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.

Gibt es aber.

Beitrag "Re: AVR ATtiny13 DS18B20/DS18S20 I2C PCF8574 LCD Temperaturanzeige"

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.

#7469882
Lesenswert?

Bruno M. schrieb:

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.

#7469963
Lesenswert?

Bruno M. schrieb:

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.

Beitrag #7470103 wurde von einem Moderator gelöscht.
#7470111
Lesenswert?

Peter D. schrieb:

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...

Beitrag #7470119 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren