Forum: Mikrocontroller und Digitale Elektronik PCF8574 Routine in C


von Fichte (Gast)


Lesenswert?

Hay @all

Ich habe eine Frage ich habe einen PCF8574P an meinen Mega16.

Nun möchte ich an diesen IC LED´s Ansteuern.
Im Normalfall geht das ja im Mega16 mit
PORTA.1=0 oder =1

Aber wie funktioniert es den bei der I2C Sache.???

Angafangen habe ich schon mal mit den Standart Werten.

#define EEPROM_BUS_ADDRESS 0xa0

/* read a byte from the EEPROM */
unsigned char eeprom_read(unsigned char address) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

/* write a byte to the EEPROM */
void eeprom_write(unsigned char address, unsigned char data) {

i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_write(data);
i2c_stop();

/* 10ms delay to complete the write operation */
delay_ms(10);
}

Die Adresse A0 Stimmt. da ich A0-A2 auf GND geschlossen habe.

Aber nun komme ich mit dem Befehlen nicht zurecht Sprich:

eeprom_write(address,data);

die kann ich die LED´s ein und aus schalten?

MFG: Fichte

von Andreas Hesse (Gast)


Lesenswert?

Hi,
die Adressbereich vom PCF8574 geht von fängt bei 0x40 an.
0xA0 ist eine Adresse eines EEPORMs.

Gruss
Andreas

von Andreas Hesse (Gast)


Lesenswert?

Hi,

wo hast Du denn den EEPROM_Write Befehl her?
Wenn ich mich recht entsinne musst Du zuerst schreiben (auch wenn Du
die  Pins als Eingang benutzt) und kannst dann zurücklesen.

Gruss
Andreas

von Fichte (Gast)


Lesenswert?

Also die befehele sind im Codevision in der Hilfe Datei so vorzufinden.

Ob da nun EEPROM_Write oder was anderes steht denke ich mal ist doch
egal Hauptsache ist doch das er auf den I2C schreibt oder liest oder?


MFG: Fichte

von Eugen K. (kannsnet)


Angehängte Dateien:

Lesenswert?

wie kommt man eigentlich auf die adresse 0x40, also ich hab im 
datenblatt (Seite 9) geschaut und da ist die slave adresse 0b0100A2A1A0, 
d.h. die adresse müsste doch 0x20 bis 0x27 sein, oder täusch ich mich?

gruß
eugen

von Eugen K. (kannsnet)


Lesenswert?

ich glaub ich seh es, bei 0x20 beginnt die slave adresse und bei 0x40 
gehen die daten los. Das heißt data 1 geht bei 0x40 los, data 2 müsste 
ja dann bei 0x4000 starten oder?

gruß eugen

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.