Hallo,
ich möchte am Arduino zwei PCF8574 mit den Adressen 0x20 und 0x21
anschließen. An Pin 1 ist bei beiden PCF8574 jeweils nur eine LED
angeschlossen. Sie sollen im Abstand einzeln mit einer Sekunde Pause auf
HIGH und LOW angesteuert werden.
Alle Versuche, den zwei PCF8574 die Adressen zuzuweisen, funktionieren
nicht.
Die unten aufgeführten Codes sind im Adafruit „PCF8574.h“ nicht
implementiert.
Es kommt die Meldung "class PCF8574' has no member named 'pinMode'"
Ich verstehe die Aussage nicht.
Kann jemand helfen?
1
PCF8574expander1(0x20);// PCF8574 an Adresse 0x20
2
PCF8574expander2(0x21);// PCF8574 an Adresse 0x21
3
4
expander1.pinMode(1,OUTPUT);// PCF8574 Modul 1
5
expander2.pinMode(1,OUTPUT);// PCF8574 Modul 1
6
7
// Set pin 1 on PCF8574 expander1 to HIGH (turn on LED)
Foto und diagramm von die schaltung bitte
Wie meinst du Pin 1 ? Das ist A0.
Anfangen mittels code aus zu lesen welche I2C chips gefunden werden
Patrick aus die Niederlande
@ pcrom,
es ist jeweils PIN 4, also P0 an den PCF8574 angeschlossen. Der Nano ist
über SCL und SCK mit beiden PCF8574 verbunden.
@ ernst
Danke, ich probier den Code mal aus
Εrnst B. schrieb:> Klingt komisch,
Nur für C Jünger usw.
Freunde des C++ kennen (mehrfach)überladene Funktionen und Methoden zur
Genüge.
Prominentes und wohl am häufigsten genutztes Arduino Beispiel:
Print::print()
Udo S. schrieb:> ich probier den Code mal aus
Tipp:
Wenn du ein Problem mit einer Arduino Lib hast, lohnt es sich deren Doku
anzusehen. Und wenn das nicht hilft, gar in den Quellcode.
Udo S. schrieb:> es ist jeweils PIN 4, also P0 an den PCF8574 angeschlossen
Ich kenne die library nicht aber must dann nicht '0' statt '1' benutzt
werden?
expander1.pinMode(0, OUTPUT);
expander1.digitalWrite(0, HIGH);
Ja, das ist richtig. Die SDA und SCL, so ist es richtig, sind alle
miteinander verbunden. Mit einem einzelnen PCF8574 und dem Nano
funktionieren alle Ansteuerungen. Bloß will es nicht gelingen einen
zweiten PCF8574 so einzubinden, dass er unabhängig vom ersten PCF8575
per Adresse angesteuert werden kann. Die Headerdatei habe ich mir
angesehen. Kann aber nicht ersehen, wo ich sie editieren muss, um die
Fehlermeldung zu eliminieren. So viel Kenntnisse habe ich nicht.
Udo S. schrieb:> wo ich sie editieren muss, um die> Fehlermeldung zu eliminieren.
Fehlermeldungen löschen ist keine gute Idee!
Udo S. schrieb:> dass er unabhängig vom ersten PCF8575> per Adresse angesteuert werden kann.
Wie hast du die Adresse am PCF8575 eingestellt?
Udo S. schrieb:> Bloß will es nicht gelingen einen zweiten PCF8574 so einzubinden, dass> er unabhängig vom ersten PCF8575 per Adresse angesteuert werden kann.
Der "zweite" PCF reagiert gleich wie der "erste"?
Zeig doch mal deinen Schaltplan. Und ein brauchbares Foto vom Aufbau.
> Mit einem einzelnen PCF8574 und dem Nano funktionieren alle> Ansteuerungen.
Funktioniert mit einem einzelnen PCF auch die Adresse 21?
Udo S. schrieb:> // Set pin 1 on PCF8574 expander1 to HIGH (turn on LED)
Die PCF8574 haben Open-Drain Ausgänge mit etwa 50kΩ Pull-Up Widerstand.
Sie können daher nur bei LOW Pegel einige Milliampere liefern. Beim HIGH
Pegel fließt nur sehr wenig Strom, damit wird die LED nur schwach
glimmen.
Schließe die LED anders herum an:
Fehlermeldungen habe ich nicht gelöscht. Habe verschiedene Codes
versucht, nachdem ich diverse Beiträge, ob falsch oder richtig
ausprobiert habe. Ich weiss es einfach nicht, wie ich die beiden PCF8574
adressieren muss, um die LEDs an den jeweiligen Ports zu steuern.....
/* PCF8574 does not support different pin modes. Input mode is just a HIGH state (high state is always pull-up). It also does not support pull-down. */
2
3
void pinMode(PCF8574 &expander, int pin, int mode) {
Die Aufrufe von pinMode() sind in diesem Programm also überflüssig.
Udo S. schrieb:> Ich weiss es einfach nicht, wie ich die beiden PCF8574> adressieren muss, um die LEDs an den jeweiligen Ports zu> steuern.
Das hast du schon richtig gemacht. Aber die Zugriffe darauf musst du
anders schreiben, nämlich so:
1
digitalWrite(expander1, 1, HIGH);
2
digitalWrite(expander2, 1, HIGH);
Mit der "1" sprichst du den Ausgang A1 an. Pin 1 ist jedoch der Ausgang
A0.
Also wenn deine LED wirklich an Pin 1 hängt, dann musst du im Quelltext
die "0" benutzen, nicht die "1":
Udo S. schrieb:> Ich weiss es einfach nicht, wie ich die beiden PCF8574> adressieren muss, um die LEDs an den jeweiligen Ports zu> steuern.....PCF8574 expander1(0x20); // PCF8574 an Adresse 0x20> PCF8574 expander2(0x21); // PCF8574 an Adresse 0x21
Scheint doch so richtig zu sein.
Nur am PCF8574 muss du die Adresse noch einstellen. Physikalisch, nicht
im Code.
Habe von +5V über Widerstand und die LED den Pin4, also P0,
angeschlossen. Das funzt. Die LEDs leuchten am ersten PCF8564 wie
gewünscht.
Die angesteuerten LEDs, auch am zweiten PCF8574, leuchten aber synchron
an beiden PCF8574, obwohl ich sie unabhängig ansteuern will. Aber es
liegt an der Adressierung, die ich nicht auf die Kette kriege.
Und wegen des falschen Codes kann ich keine andere Adresse, 0x21,
einstellen. Standardmässig ist in der Headerdatei ja 0x20 eingetragen.
Udo S. schrieb:> Lasse für 0x20 A0, A1, A2 offen
Du musst die Pins mit HIGH oder LOW belegen, nicht "in der Luft" hängen
lassen.
Das ergibt sich doch schon aus der Zeichnung auf Seite 1 im Datenblatt.
Weiterhin steht in den "Electrical Characteristics" dass dabei maximal 5
µA fließen, also ein Leckstrom. Wenn der Chip interne Pull-Down
Widerstände hätte, würden diese Eingänge mindestens 100x so viel Strom
aufnehmen. Weiterhin ist in der Tabelle "Address Reference" der Zustand
Z (unbeschaltet) nicht vorgesehen.
Datenblatt hatte ich bisher nicht. Werde aber die Pins mal auf Potential
legen.
Bleibt aber immer noch die passende Adressierung. Die wurde ja im
Compiler angemeckert. Es gab ja einige Anregungen, was den Code angeht.
Werde mal aus den vorausgegangenen Antworten die Vorschläge
versuchsweise umsetzen.
Udo S. schrieb:> Bleibt aber immer noch die passende Adressierung. Die wurde ja im> Compiler angemeckert.
Nein!
Udo S. schrieb:> Datenblatt hatte ich bisher nicht.
Aua!
Udo S. schrieb:> Datenblatt hatte ich bisher nicht
Diese Vorgehensweise solltest du dir sofort abgewöhnen.
> Bleibt aber immer noch die passende Adressierung.> Die wurde ja im Compiler angemeckert.
Auch da frage ich mich, wie man auf die Idee kommt, die Doku nicht zu
lesen.
Es ist doch alles so leicht im Internet verfügbar !!!!!
Als ich mit dem Hobby anfing, musste man Briefe nach Japan schicken und
auf Antwort hoffen. Nicht selten bekam man dann schlechte Kopien von
Telefaxen, bei denen man froh sein konnte, wenn sie vollständig lesbar
waren.
Steve van de Grens schrieb:> Diese Vorgehensweise solltest du dir sofort abgewöhnen.
Na immerhin hat sich wieder mal ein Schwachkopf gefunden, der einen
Link mit 420 Zeichen Lebenslauf anhängt und damit den Textumbruch im
Browserfenster versaut.