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