
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo ReinhardB, > Ich habe mir eine I2c Porterweterung mit einem PCF8574 gebastelt, nach dem Vorbild des Erweiterungsmoduls für das Appboard (Inclusive der 10k Pullups). Zum Test habe ich die Ausgänge mit LEDs (plus Vorwiderstände) versehen und will diese nun schalten. Bis dahin alles o.k. der Baustein wird angesprochen. > Nur: ich bekomme jeweils nur einen Kanal auf high. Sobald ich einen zweiten einschalte, geht mir der erste wieder aus ! Wie hast Du die LEDs angeschlossen ? Wenn Du die fehlerhafte LED-Ansteuerung der CC1-Station V2 übernommen und die LEDs zwischen Port und GND angeschlossen hast, kann es so nicht gehen. Denn genau das ist auch das Problem bei der CC1 Station V2, daß man den Klimmzug mit einem Byte RAM als Zwischenspeicher auch beim Benutzen des PCF8574 als reinen Ausgangsbaustein machen muß. Auch das Problem mit dem sofort nach Anlegen der Versorgung einschaltenden Relais bei der CC1 Station V2 hat u.a. auch mit einer "nicht durchdachten" Beschaltung zu tun. Was auch der Entwickler der CC1 Station V2 leider nicht beachtet hat, war das Datenblatt des PCF8574. Lasten am PCF8574 schaltet man immer invertiert. Denn der PCF8574 hat nur einen Open-Drain-Ausgang. Für einen High-Pegel sorgt eine integrierte 100µA Konstantstromquelle. Wenn man nun den Port des PCF8574 "stark" belastet, d.h., daß die Spannung unterhalb des definierten Hi-Pegels absinkt, was bei 0,7V bei Transistoren und unter 2V bei LEDs der Fall ist, wird beim Auslesen des ICs immer ein Low-Pegel erkannt, obwohl der Port auf High gesetzt wurde. Daher wird der PCF8574 als quasi-bidirektionaler I²C-Bus-Portexpander bezeichnet. Er kennt nur zwei Zustände: Eingang (=High durch integrierte Konstantstromquelle) und Low. So, um nun Dein Problem zu lösen, mußt Du nur folgendes machen: Schließe die LEDs (mit Vorwiderstand) zwischen 5V (Anode) und den jeweiligen Port des PCF8574 (Kathode) an. Die Schaltlogik ist nun invertiert, aber dafür kannst Du die Ports nun ohne extra Puffer-Byte ansprechen. Du mußt nur beachten, daß ein Low-Pegel die LED einschaltet und ein High-Pegel ausschaltet. Übrigens, die 10k -Pull-Ups am PCF8574 braucht man i.d.R. nicht. 5V | Vorwiderstand | (A) LED (K) | PCF8574 Portx Wenn Du die LEDs aber lieber nicht invertiert schalten willst, mußt Du zwischen PCF8574 und LEDs einen Puffer anschließen (z.B. HEF4050). Bei beiden Möglchkeiten kannst Du aber auf jeden Fall die direkten Portfunktionen à la define LED1 port[25] define LED2 port[26] benutzen. Nur, wenn Du einzelne Ports eines PCF8574 auch als Eingang nutzen willst, muß Du beim setzen von Ausgängen den PCF8574 Byteweise beschreiben, da ansonsten bei einem Rücklesen der aktuellen Zustände am PCF8574 u.U. an Eingängen Low-Pegel erkannt werden, und diese wieder zurückgeschrieben werden. MfG André H. |
| Antwort schreiben |