PCF8574N Daten lesen

OP #3228764
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
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
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
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
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;
}
Gast #3232951
Hast du die Pullup-Widerstände bei SCL und SDA gesetzt
  DDRC &= ~((1<<SCL) | (1<<SDA));
  PORTC |= (1<<SCL) | (1<<SDA);
oder externe Widerstände eingelötet?
OP #3233212
Ich habe externe Widerstände gesetzt. Nur ist es so in meinem Aufbau das 
die nicht am ende der Leitung sind sondern am Anfang, aber bei einer 
Kabellange von 50cm denke ich nicht das es ein Problem ist oder habt Ihr 
andere Erfahrungen damit?
#3233251
Der Ort der Pull-Up Widerstände ist unkritisch.

Betreibe eine systematische Fehlersuche. Zuerst muss der IC auf die 
Adresse mit ACK antworten. Tut er das nicht, ist die Adresse falsch oder 
es gibt eine Störung bei der Übertragung. Das kann man messen und danach 
entsprechnend handeln.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.