C LCD Display 1602 am I2C Phillips PCF8574T

Laut Datenblatt (NXP) sind keine internen Pullup Widerstände vorhanden. Ich vermute auf der Platine sind welche vorhanden?!

Wenn Pullup, dann ist die Adresse 0x3F.
Also eventuell
#define LCD_I2C_DEVICE (0x3F<<1)
Adresse Bit7..1
RW Bit0

Wenn dies die Lötstellen für Widerstände sein sollen, dann habe ich hier keine Pull-Up-Widerstände....
In mir vorliegenden Datenblatt steht davon nichts. Diese Tabelle sehe ich gerade zum ersten Mal....



CodeBox C
/** defines the data direction (reading from I2C device) in i2c_start(),i2c_rep_start() */
#define I2C_READ  0x71
/** defines the data direction (writing to I2C device) in i2c_start(),i2c_rep_start() */
#define I2C_WRITE  0x70
  i2c_start_wait(Dev24C02+I2C_WRITE); 

Der Wert von I2C_WRITE ist in der include i2cmaster.h auf 0 gesetzt. Laut Datenblatt müsste es 0x70 sein. Dort steht auf S. 6 [...]7-bit hexadecimal address without R/W[...]
 
Zuletzt bearbeitet:
Dev24C02+I2C_WRITE

Also das ist ja jetzt anscheinend von einem Eeprom 24C02. Andere Software anderes Projekt.

In mir vorliegenden Datenblatt steht davon nichts. Diese Tabelle sehe ich gerade zum ersten Mal....

Das Datenblatt kenne ich nicht und habe so schnell auch nichts bei deinen Quellen dazu gefunden.
Nur diese Info:

(NOTE: Also for displays with backpack interface labelled "A0 A1 A2" photo: right).
(NOTE: Most displays use I2C Adress 0x27 but a FEW use 0x3F (Change in code below)
 
Also das ist ja jetzt anscheinend von einem Eeprom 24C02. Andere Software anderes Projekt.



Das Datenblatt kenne ich nicht und habe so schnell auch nichts bei deinen Quellen dazu gefunden.
Nur diese Info:

die Adresse habe ich in der i2clcd.h eingeben...


CodeBox C
#define LCD_I2C_DEVICE  0x3F  //40
 
die Adresse habe ich in der i2clcd.h eingeben...
#define LCD_I2C_DEVICE 0x3F //40

Wie schon erwähnt, muss die Adresse sicherlich mit 2 multipliziert werden (linsshift um 1 Bit) damit die Adresse auf den Bits 7..1 liegt. Das RW bit liegt auf Bit0.

Deswegen auch die 0x40 oben bei einem Display mit Adresse 0x20.

Wenn du ein Display mit 0x3F hast, wäre es 0x7E.

Entweder probierst du ein paar Adressen aus oder du fragst bei dem Hersteller nach oder findest irgendwo eine Info auf der Webseite für das Display.

Dirk :ciao:
 
die Adresse habe ich in der i2clcd.h eingeben...


CodeBox C
#define LCD_I2C_DEVICE  0x3F  //40

Platine beidseitig lötbar, oder besser zu Löten ! Und was ist ? Eine Seite blank ! i2c-Controller im Müll, da nix zu erkennen ist und unlötbar ist.... Marktlücke: Lötkurse in China !
 
Platine beidseitig lötbar, oder besser zu Löten ! Und was ist ? Eine Seite blank ! i2c-Controller im Müll, da nix zu erkennen ist und unlötbar ist.... Marktlücke: Lötkurse in China !

Mal gucken wo ich so einen Controller herbekomme....Aus China dauert es wieder 4 Wochen.....
dann kann ja mal versuchen das Display direkt mit dem atmega anzusteuern....
Auf jeden Fall möchte ich Dir, Dirk, und allen anderen für die Hilfe schon mal danken....
Gruß
Ralf
 
Wie schon erwähnt, muss die Adresse sicherlich mit 2 multipliziert werden (linsshift um 1 Bit) damit die Adresse auf den Bits 7..1 liegt. Das RW bit liegt auf Bit0.

Deswegen auch die 0x40 oben bei einem Display mit Adresse 0x20.

Wenn du ein Display mit 0x3F hast, wäre es 0x7E.

Entweder probierst du ein paar Adressen aus oder du fragst bei dem Hersteller nach oder findest irgendwo eine Info auf der Webseite für das Display.

Dirk :ciao:


Die PCF haben keine interne PullUp. Eigentlich brauch er nicht viel ausprobieren, einfach mal ein Multimeter nehmen, und messen, was an den Pins 1, 2 und 3 des PCF anliegt. (ich vermute mal dass die auf Masse liegen)
Wenn also alle Adresspins auf Masse wären,
und es ein PCF8574A(T) ist, wäre die WRITE Adresse 70h und für READ 71h,
wenn es der PCF8574(T) ist, wäre die WRITE Adresse 40h und für READ 41h
D.h. du brauchst entweder 70h oder 40h (je nach PCF-Typ) als "Device-Adresse", da ja eine "1" bzw . eine "0" für Lesen bzw. Schreiben dazu addiert wird.

siehe hier:


CodeBox C
//-  Write data to i2c
void lcd_write_i2c(unsigned char value)
{
i2c_start_wait(LCD_I2C_DEVICE+I2C_WRITE);
i2c_write(value);
i2c_stop();
}



Wenn VCC an allen Adresspins anliegt,
und es ein PCF8574A(T) ist, wäre die WRITE Adresse 7Eh und für READ 7Fh,
wenn es der PCF8574(T) ist, wäre die WRITE Adresse 4Eh und für READ 4Fh
D.h. du brauchst entweder 7Eh oder 4Eh (je nach PCF-Typ) als "Device-Adresse", da ja eine "1" bzw . eine "0" für Lesen bzw. Schreiben dazu addiert wird.


Und wie gesagt, ich würde nur mal den I2C initialisieren, und auf den PCF mal zugreifen, z.B. was lesen, und schauen, ob der Baustein überhaupt angesprochen werden kann.
Hier ist die Frage, ob das alles richtig initalisiert wird - welche Busgeschwindigkeit wird verwendet? Ich würde es mit den Standard 100khz erstmal probieren --> kenn mich nicht bzw. wenig mit Assembler aus, deswegen kann nicht sagen, was da bei dem geposteten Beispiel abgeht.....

Pullups für SDA und SCL Leitung sind dran? (ja, auch deswegen habe ich auch schon stundenlang nach Fehlern gesucht :) )



http://cache.nxp.com/documents/data...ORMAT=pdf&WT_ASSET=Documentation&fileExt=.pdf


EDIT:
und wie ich geshen habe, hat das Dirk auch schon alles soweit erklärt....^^
 
Die PCF haben keine interne PullUp. Eigentlich brauch er nicht viel ausprobieren, einfach mal ein Multimeter nehmen, und messen, was an den Pins 1, 2 und 3 des PCF anliegt. (ich vermute mal dass die auf Masse liegen)
Wenn also alle Adresspins auf Masse wären,
und es ein PCF8574A(T) ist, wäre die WRITE Adresse 70h und für READ 71h,
wenn es der PCF8574(T) ist, wäre die WRITE Adresse 40h und für READ 41h
D.h. du brauchst entweder 70h oder 40h (je nach PCF-Typ) als "Device-Adresse", da ja eine "1" bzw . eine "0" für Lesen bzw. Schreiben dazu addiert wird.

siehe hier:


CodeBox C
//-  Write data to i2c
void lcd_write_i2c(unsigned char value)
{
i2c_start_wait(LCD_I2C_DEVICE+I2C_WRITE);
i2c_write(value);
i2c_stop();
}



Wenn VCC an allen Adresspins anliegt,
und es ein PCF8574A(T) ist, wäre die WRITE Adresse 7Eh und für READ 7Fh,
wenn es der PCF8574(T) ist, wäre die WRITE Adresse 4Eh und für READ 4Fh
D.h. du brauchst entweder 7Eh oder 4Eh (je nach PCF-Typ) als "Device-Adresse", da ja eine "1" bzw . eine "0" für Lesen bzw. Schreiben dazu addiert wird.


Und wie gesagt, ich würde nur mal den I2C initialisieren, und auf den PCF mal zugreifen, z.B. was lesen, und schauen, ob der Baustein überhaupt angesprochen werden kann.
Hier ist die Frage, ob das alles richtig initalisiert wird - welche Busgeschwindigkeit wird verwendet? Ich würde es mit den Standard 100khz erstmal probieren --> kenn mich nicht bzw. wenig mit Assembler aus, deswegen kann nicht sagen, was da bei dem geposteten Beispiel abgeht.....

Pullups für SDA und SCL Leitung sind dran? (ja, auch deswegen habe ich auch schon stundenlang nach Fehlern gesucht :) )



http://cache.nxp.com/documents/data_sheet/PCF8574_PCF8574A.pdf?fpsp=1&WT_TYPE=Data Sheets&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASSET=Documentation&fileExt=.pdf


EDIT:
und wie ich geshen habe, hat das Dirk auch schon alles soweit erklärt....^^

Hallo avr_newbie,
Danke für den Tip. Das mit der Addition der 0 oder 1 war mir unklar. In der Include-Datein wird dies so gemacht. In der Pdf stand irgendetwas, ich weiß nicht mehr genau was, worüber ich gestolpert bin.
Jetzt bestelle ich erst einmal einen neuen i2c-Controller, den hier bekomme ich nicht mehr hin.
Nochmal Danke für die Hilfe und bis die Tage.... denn ich habe hier noch einen China-Frequenzgenerator liegen mit einem atmega 16 drauf....
Der Generator ist Müll, aber die fertige Platine mit BNC-Eingängen und dem selben Display, ohne i2c-Bus, bietet sich gerade als Grundlage für den Frequenzzählers(atmega8) an. :)
Mit dem i2c-Bus gehts dann später weiter...
Gruß
Ralf
 
Hallo avr_newbie,
Danke für den Tip. Das mit der Addition der 0 oder 1 war mir unklar. In der Include-Datein wird dies so gemacht. In der Pdf stand irgendetwas, ich weiß nicht mehr genau was, worüber ich gestolpert bin.
Jetzt bestelle ich erst einmal einen neuen i2c-Controller, den hier bekomme ich nicht mehr hin.
Nochmal Danke für die Hilfe und bis die Tage.... denn ich habe hier noch einen China-Frequenzgenerator liegen mit einem atmega 16 drauf....
Der Generator ist Müll, aber die fertige Platine mit BNC-Eingängen und dem selben Display, ohne i2c-Bus, bietet sich gerade als Grundlage für den Frequenzzählers(atmega8) an. :)
Mit dem i2c-Bus gehts dann später weiter...
Gruß
Ralf


Moin moin,
Hi Dirk.....
Hab' gerade das Display an den Atmega16 angeklemmt und will diesen nun als Treiber für das Display, OHNE i2c-Bus nutzen.
Den Code habe ich soweit den Ports angepasst.... aber.... natürlich Ihr ahnt es bereits... nix ... ein fieser Balken quer über das Display... ;-)
Habt ihr noch Lust?
BTW: Einen neuen I2C-Controller habe ich bestellt....
Gruß
Ralf
 
Habt ihr noch Lust?

Lust ja, Zeit nein ;)

Wie möchtest du das Display denn später mal verwenden, direkt angeschlossen oder über den I2C-Portexpander? Für den ersten Fall gibt es ja schon viele Lösungen, falls das Display einen 44780 Controller hat oder wenn der kompatibel ist.

Vielleicht ist auch die Kontrastspannung bei dir gerade das Problem.

Also erst mal überlegen, was du genau möchtest. Nicht dass wir hier so viele "Baustellen" aufmachen und für ein Display aus Shenzhen so viel Zeit investieren.
 
Lust ja, Zeit nein ;)

Wie möchtest du das Display denn später mal verwenden, direkt angeschlossen oder über den I2C-Portexpander? Für den ersten Fall gibt es ja schon viele Lösungen, falls das Display einen 44780 Controller hat oder wenn der kompatibel ist.

Vielleicht ist auch die Kontrastspannung bei dir gerade das Problem.

Also erst mal überlegen, was du genau möchtest. Nicht dass wir hier so viele "Baustellen" aufmachen und für ein Display aus Shenzhen so viel Zeit investieren.

Hallo Dirk,

beides... einmal über den i2c-Bus und dann ein Display direkt am atmega16.... einer kompletten Platine eines Frequenzgenerators aus China... Der ist Müll... so könnte ich das Display der Platine wenigstens nutzen.
Dafür müsste es massenhaft Lösungen geben...
I2C erst wieder nach Eintreffen des I2c-Moduls.... Vielleicht sollte ich mir mal so eine Arduino-Platine zulegen.. dann hätte ich die fertigen Codes aus dem Netz nutzen können.
Gibt es da einen Kauftip?
Ja, und da hast Du natürlich Recht... Zeit in ein spezielles Bauteil zu stecken bringt nicht viel... zugegeben macht es auch keinen Spaß, zumal wenn es am Ende an schlampigen Lötstellen scheitert. Den i2c-Code könnte man natürlich für andere Projekte verwenden.

Gruß
Ralf
 
Zuletzt bearbeitet:
Hallo Dirk,

beides... einmal über den i2c-Bus und dann ein Display direkt am atmega16.... einer kompletten Platine eines Frequenzgenerators aus China... Der ist Müll... so könnte ich das Display der Platine wenigstens nutzen.
Dafür müsste es massenhaft Lösungen geben...
I2C erst wieder nach Eintreffen des I2c-Moduls.... Vielleicht sollte ich mir mal so eine Arduino-Platine zulegen.. dann hätte ich die fertigen Codes aus dem Netz nutzen können.
Gibt es da einen Kauftip?
Ja, und da hast Du natürlich Recht... Zeit in ein spezielles Bauteil zu stecken bringt nicht viel... zugegeben macht es auch keinen Spaß, zumal wenn es am Ende an schlampigen Lötstellen scheitert. Den i2c-Code könnte man natürlich für andere Projekte verwenden.

Gruß
Ralf

JuHu läuft.... das Modul des Frequenzgenerators(atmega16, siehe Bild) einfach angepasst. Dann die LCD-Routinen übernommen und die Frequenzzählerroutinen aus dem atmega8-Projekt, daher rührt ja die Begehrlichkeit nach einer Anzeige, die 7-Segmentanzeige für Batteriebetrieb jedoch zu stromfressend war, übernommen.
Wahrscheinlich blickt keiner mehr durch, oder? Ich melde mich später wieder.... muss mal weg vom Tisch.... AFK :)
Gruß
Ralf
 

Anhänge

  • ex_fgenerator.jpg
    ex_fgenerator.jpg
    201,8 KB · Aufrufe: 10
  • Like
Reaktionen: Dirk

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)