Forum: Mikrocontroller und Digitale Elektronik Ansteuerung PCF8575


von Achim S. (achims)


Lesenswert?

Hallo
Ich nutze den PCF8575 (16 Bit) um 16 LED anzusteuern (versuche es 
wenigstens)
Mit der Anweisung
1
e = 0xdf;           // Angabe LED
2
i2c_start(adr2_w);  // Schreibbefehl
3
i2c_write(e);       // Schreibe e
4
_delay_ms(100);     // 100ms warten

kann ich die LEDs 0_0 bis 0_7 ansteuern.
Wnn ich
e=0xdf in zb.0xdd veränder oder anders, kann ich die LED 1_0 bis 1_7 
nicht ansteuern.
Was mach ich falsch?
achim

von Adolf S. (juppe)


Lesenswert?

Schau ins Datenblatt!

von Klaus 2. (klaus2m5)


Lesenswert?

1
i2c_start(adr2_w);  // Schreibbefehl
2
e = 0xdf;           // Angabe LED Port0
3
i2c_write(e);       // Schreibe e
4
e = 0xab;           // Angabe LED Port1
5
i2c_write(e);       // Schreibe e
6
_delay_ms(100);     // 100ms warten

von Achim S. (achims)


Lesenswert?

Hallo Adolf
meinst du, das der Hinweis ins Datenblatt zu schauen eine Hilfe ist.
Habe das Datenblatt als PDF hier im Hintergrund auf dem Schirm. habe 
alle wichtigen Sachen gelesen, Adressen, Belegung, Anschlüsse, Grösse. 
Aber zu diesem Thema habe ich nichts wirklich gefunden (oder überlesen).
Dieses Forum ist zum Fragen da und Hilfe zu bekommen.
Es könnte auch sein, das du nur etwas sagen wolltest und selber keine 
Ahnung hast?
achim

von Adolf S. (juppe)


Lesenswert?

Ich habe keine Ahnung. Ich nutze statt dessen das Datenblatt - z.B. von 
NXP.
Da sieht man auf Seite 9, wie erst "data to port 0" und dann "data to 
port 1" zu senden ist.

von Achim S. (achims)


Lesenswert?

Hallo Klaus
habe dein Code sofort getestet. Es geht. Wunderbar. Danke
Habe aber noch eine kleine Frage zur Funktion. Irgendwie werde ich aus 
dem Stück nicht schlau.
1
i2c_start(adr2_w);  // Schreibbefehl
2
e = 0xdf;           // Angabe LED Port0
3
i2c_write(e);       // Schreibe e
4
e = 0xab;           // Angabe LED Port1
5
i2c_write(e);       // Schreibe e
6
_delay_ms(100);     // 100ms warte

Du  schreibst unter der adr2 zweimal e mit
0xdf und 0xab

Werden die Register nacheinander beschrieben?
Gibt es einen Grund dafür?
Oder habe ich im Datenblatt wirklich was übersehen?
achim

von Achim S. (achims)


Lesenswert?

Hallo Adolf
werde es sofort nachlesen. Habe tatsächlich was übersehen. Kann 
vorkommen. Dieser kleine Satz hätte aber von Anfang an für Klarheit 
gesorgt und löst für mich eine reihe von Fragen. Sorry
achim

von Max D. (max_d)


Lesenswert?

Der wird mit i2c_start(adr2_w); aufgerufen. Danach fühlt er sich 
angesprochen.
Dann sendest du mit
e = 0xdf;           // Angabe LED Port0
i2c_write(e);       // Schreibe e

Die Daten die auf PORT0 sollen.
Danach zählt er intern automatisch hoch und bekommt mit
e = 0xab;           // Angabe LED Port1
i2c_write(e);       // Schreibe e

Die Daten für PORT1 nachgeschoben.

von Achim S. (achims)


Lesenswert?

Danke für die Hilfe. Alles klar

von Achim S. (achims)


Lesenswert?

Hab doch eine Frage.
Wie ist das beim einlesen der Pins z.B. Tasterbelegung?
Zweimal lesen?

von Klaus 2. (klaus2m5)


Lesenswert?

So ist es! 2 Bytes hintereinander lesen, 1. Byte Port 0, 2. Byte Port 1.

: Bearbeitet durch User
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.