Forum: Mikrocontroller und Digitale Elektronik PCF8574 I2c Adapter mit ASM ansteuern


von Bruno M. (brumay)


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

von Harald K. (kirnbichler)


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.

von Bruno M. (brumay)


Lesenswert?

Offensichtlich wurde meine Frage noch nicht richtig verstanden!

Weder I2C noch der PCF8574 oder der HD44780 sind Gegenstand der Frage, 
sondern der heute öfter verwendete I2C Adapter.

von Harald K. (kirnbichler)


Lesenswert?

Bruno M. schrieb:
> Es gibt zwar einige Informationen im Netz, aber für ASM habe ich noch
> nichts Passendes gefunden.

Dann lern doch bitte einfach besser fragen.

von Wilhelm M. (wimalopaan)


Lesenswert?

Bruno M. schrieb:
> Weder I2C noch der PCF8574 oder der HD44780 sind Gegenstand der Frage,
> sondern der heute öfter verwendete I2C Adapter.

Welche I2C-Adapter verwendet man denn heute so?

von Bruno M. (brumay)


Angehängte Dateien:

Lesenswert?

no Name, China made

von Peter D. (peda)


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.

von Wilhelm M. (wimalopaan)


Lesenswert?

Aha, und da ist kein  PCF8574  drauf?

von Harald K. (kirnbichler)


Lesenswert?

Peter D. schrieb:
> Der PCF8574 muß dann die Zugriffssequenz entsprechend LCD-Datenblatt
> (HD44780U) ausgeben, d.h. mehrere I2C-Bytes.

Das will er aber nicht, da er ja weiß, daß er sich nicht mit dem HD44780 
beschäftigen will. Sondern mit dem I2C-Adapter. In Assembler.

von Falk B. (falk)


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.

von Bruno M. (brumay)


Lesenswert?

Peter D. schrieb:
> 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?

von Peter D. (peda)


Lesenswert?

Bruno M. schrieb:
> no Name, China made

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.

von Harald K. (kirnbichler)


Lesenswert?

Bruno M. schrieb:
> Der Adapter ist mit dem LCD ja fest verbunden, d.h. man kann Rw nicht
> fest auf GND legen.

Du kannst aber mit jedem Byte, das Du ausgibst, das entsprechende Bit 
immer auf 0 lassen.

von Bruno M. (brumay)


Lesenswert?

Peter D. schrieb:
> 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!

von Peter D. (peda)


Lesenswert?

Bruno M. schrieb:
> Jedes Byte geht m.E. immer an E, RS,RW,LED,D4-D7.

Wenn es irgendwo so steht, dann wird es wohl so sein.
Zeig dochmal den Link auf diese Doku.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Peter D. schrieb:
>> no Name, China made
>
> Ich kann erstmal keinen Schaltplan dazu finden.

Das ist immer nur die gleiche Kopie ;-)
Die Pinbelegung stimmt mit meinem Projekt oben überein.

von Falk B. (falk)


Lesenswert?

Bruno M. schrieb:
>> 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.

Doch, indem man das Bit für RW immer als 0 beläßt.

> Jedes Byte geht m.E. immer an E, RS,RW,LED,D4-D7.

Ja.

> Oder hat der Adapter eine eigene Logik?

Nö.

von Peter D. (peda)


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.

: Bearbeitet durch User
von Harry L. (mysth)


Angehängte Dateien:

Lesenswert?

Peter D. schrieb:
> Ich kann erstmal keinen Schaltplan dazu finden.

Bitte sehr!

von Bruno M. (brumay)


Lesenswert?

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?

von Bruno M. (brumay)


Angehängte Dateien:

Lesenswert?

Von Github gibt es eine lib, die ich mal als Textdatei anhänge. 
Vielleicht kann sich das ein C Experte mal anschauen

von Harry L. (mysth)


Lesenswert?

Bruno M. schrieb:
> dann bedeutet es, daß
> ich für jedes Datenbyte zwei Bytes übertrage muß

Es sind min. 6 Bytes, da du auch noch an E wackeln musst.

von Bruno M. (brumay)


Lesenswert?

Harry L. schrieb:

> Es sind min. 6 Bytes, da du auch noch an E wackeln musst.

dann lieber ohne I2C :-)

von Harry L. (mysth)


Lesenswert?

Bruno M. schrieb:
> dann lieber ohne I2C :-)

Warum?

von Peter D. (peda)


Lesenswert?

I2C lohnt sich nur, wenn die IO-Pins des MC wirklich knapp sind oder ne 
lange Leitung zwischen MC und LCD notwendig ist.

von Falk B. (falk)


Lesenswert?

Harry L. schrieb:
>> Ich kann erstmal keinen Schaltplan dazu finden.
>
> Bitte sehr!

Das ist kein Schaltplan, das ist Hipster-Müll!

von Falk B. (falk)


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.

von Falk B. (falk)


Lesenswert?

Bruno M. schrieb:
> Von Github gibt es eine lib, die ich mal als Textdatei anhänge.
> Vielleicht kann sich das ein C Experte mal anschauen

Wozu? Lies mal lieber die Beiträge in RUHE und folge den Links!

Beitrag "Re: PCF8574 I2c Adapter mit ASM ansteuern"

von Harry L. (mysth)


Lesenswert?

Falk B. schrieb:
> Das ist kein Schaltplan, das ist Hipster-Müll!

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!

von Johannes T. F. (jofe)


Lesenswert?

Es gibt sogar eine Application Note von Atmel dazu:
https://www.microchip.com/en-us/application-notes/an1981
Der Beispielcode dazu ist allerdings in C. Die Logik lässt sich aber 
sicher einfach in Assembler übertragen.

Edit: Sorry, sehe gerade, es geht dort offenbar um I²C-LCD-Controller, 
nicht um PCF8574/HD44780 ... Also hier nur bedingt relevant.

: Bearbeitet durch User
Beitrag #7470103 wurde von einem Moderator gelöscht.
von C-hater (c-hater)


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.
von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

DAS ist ein Schaltplan! ;-)

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

https://www.ulrichradig.de/home/index.php/avr/lcd-am-pcf8574
nix für C-Hasser wie auch mich, jedenfalls scheint das IC auf der 
Platine ein PCF8574 zu sein.
Eine .ino-lib habe ich auch noch gefunden.
https://www.roboter-bausatz.de/p/lcd-display-modul-1602-hd44780-mit-i2c-controller
->Dokumente -> Beispiel Sketch

: Bearbeitet durch User
von C-hater (c-hater)


Lesenswert?

Falk B. schrieb:

> DAS ist ein Schaltplan! ;-)

Ja, mit sowas kann man tatsächlich etwas anfangen. Das gibt der Sache 
eine Funktion. Das könnte (und wird bei korrekter Software) 
funktionieren.

von Bruno M. (brumay)


Angehängte Dateien:

Lesenswert?

Danke für die Infos!

von Karl B. (gustav)


Lesenswert?

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.

https://www.avrfreaks.net/s/topic/a5C3l000000ULG2EAO/t095508
und:
https://www.avrfreaks.net/s/topic/a5C3l000000UaNFEA0/t153615

ciao
gustav

von Falk B. (falk)


Lesenswert?

Bruno M. schrieb:

>07-08-2023.png
>3,6 MB
> Danke für die Infos!

Lies mal was über Bildformate!

von Rainer W. (rawi)


Lesenswert?

Bruno M. schrieb:
> hd_i2c.png
> 1,4 MB

Bruno M. schrieb:
> 07-08-2023.png
> 3,6 MB

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.

von Peter N. (alv)


Lesenswert?

Falk B. schrieb:
> DAS ist ein Schaltplan! ;-)

Naja, +5V/Pullups nach unten, Masse nach oben...

von Falk B. (falk)


Lesenswert?

Peter N. schrieb:
>> DAS ist ein Schaltplan! ;-)
>
> Naja, +5V/Pullups nach unten, Masse nach oben...

Mein Großvater war Australier ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.