PCF8574N Daten lesen

OP #3228764
Lesenswert?

Hallo,
ich setze einen PCF8574N ein und will Daten von diesem lesen.

Leider bekomme ich keine Eingänge zurückgeliferet wenn ich meine Abfrage 
über den I²C starte.

Am P4 hängt ein Schalter und zu Testzwecken wollte ich am PORT B ein 
Paar LED's leuchetn lassen.

Mein Programm habe ich gleich mal mit angehangen. Wenn ich das auf 
meinen Atmega 16 lade stelle ich fest das meine LED nix tun am PORT B. 
scheinbar bleit das Programm im Befehl "test=pcf8574_get_inputs (2);" 
hängen und arbeitet den Rest der schleife nicht ab.


Kann mir hier jemand einen Tip geben?


Im Anhnag ist auch mal die Bibliothek für den PCF Baustein.
In vorherigen Test hat ein schreiben auf die Ports funktioniert nur 
leider das lesen nicht.

Danke
Angehängte Dateien:
Gast #3228857
Lesenswert?

Hi

>Selbstverständlich muss A1 und A2 auf GND und A0 auf VCC gelegt werden
>damit die Adresse 0x42 stimmt.

Wie kommst du aus 42? 0x20 ist dezimal 32. Und das wird in 
pcf8574_send_add_rw um ein Bit nach links geschoben und mit dem RW-Bit 
versehen.

MfG Spess
OP #3229035
Lesenswert?

Das mit der Grund adresse ist mir schon klar. Ich übergebe der Funktion 
aber nicht die Grundadresse sondern die "normale "I²C Slaveadresse.
Weil in der Unterfuntion "pcf8574_send_add_rw" wird aus meiner normalen 
Adresse doch die richtige I²C Adresse generiert. Oder habe ich hier ein 
Verständnisproblem??

Wenn ich mir das ganze im Simulator anschaue bekomme ich die Adresse für 
den i2C von 0b01000101 oder 45hex generiert. Das müßte meiner Meinung 
nach passen wenn ich A0 und A2 auf GND und A1 auf +5V verschalten habe.
Gast #3229039
Lesenswert?

Hi

>Ich übergebe der Funktion
>aber nicht die Grundadresse sondern die "normale "I²C Slaveadresse.
>Weil in der Unterfuntion "pcf8574_send_add_rw" wird aus meiner normalen
>Adresse doch die richtige I²C Adresse generiert. Oder habe ich hier ein
>Verständnisproblem??

Nein. Aber erkläre doch mal, was du hiermit

test=pcf8574_get_inputs (2);

adressierst?

MfG Spess
OP #3229055
Lesenswert?

mit test=pcf8574_get_inputs (2); rufe ich die Funktion 
"pcf8574_get_inputs (2);" auf undübergebe die Slaveadresse 2.

Die Funktion beinhaltet den Funktionaufruf "pcf8574_send_add_rw 
(address, 1);"


In der Funktion passiert doch folgendens:

-->ich bekomme übergeben eine 2 für Variable address


unsigned char pcf8574_send_add_rw (unsigned char address, unsigned char 
rw)
{
  ...
addr_byte = address << 1;
// hier schiebe ich meine Adresse 2 um 1 es entsteht aus 0b00000010 ein
0b00000100

addr_byte |= rw;
// hier wird das R/W gesetzt Ergebniss 0b00000101

addr_byte |= 0b01000000;
//setzen der Grundardess Ergebniss 0b01000101


TWDR = addr_byte;
// hier wird díe fertige I²C Adresse übergeben

TWCR = (1<<TWINT) | (1<<TWEN);
  while (!(TWCR & (1<<TWINT)));
  return TWSR;
}

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