-
I²C Porterweiterung
Hi!
Ich habe an meiner C-Control den pcf 8574 angeschlossen und es funzt net!!!
konkret bei der Programmierung, denke ich...
meine cc "hängt" sich beim Befehl IIC.init immer auf!
unter anderem hab ich schon das IIC_ERROR.bas beispiel rübergeladen und das funktioniert, aber es schreibt, dass jede adresse belegt ist!!!
Ich habe mir die Porterweiterungsplatine selbst gemacht, vielleicht könnt ihr mir ein paar mögliche fehlerquellen nennen...
mein baustein ist ein PCF 8574AP
schätze mal das das A für den Slave ist(0 111 A2 A1 A0 0) oder??
zur Adressierung:
meine 3 Adressbits sind alle auf HIGH d.h. meine adresse lautet:0111 111 0 oder dezimal 126, sag ich mal so....
bitte helft mir!
danke im voraus
martin
-
Hi,
welche C-Control hast Du denn?
Wenn Du eine M-Unit 1.2, eine M-Unit2.0 oder eine Station 2 hast, kannst Du einfach die extended Ports verwenden.
Einfach
Define MeinPort as Port[xx] deklarieren und damit arbeiten. Das Basic++ IIC-Objekt benötigst Du da überhaupt nicht.
Schau z.B hier dieses Beispiel an:
http://www.csslabs.de/ccontrol/lib/b...ED_PORTS_4.htm
Wenn du den PCF8574A hast, musst Du den 2. Adressbereich verwenden.
Siehe hier
Code:
' PCF 8574 ADR 0 Ports 17 - 24 BYTEPORT 3
' PCF 8574 ADR 1 Ports 25 - 32 BYTEPORT 4
' PCF 8574 ADR 2 Ports 33 - 40 BYTEPORT 5
' PCF 8574 ADR 3 Ports 41 - 48 BYTEPORT 6
' PCF 8574 ADR 4 Ports 49 - 56 BYTEPORT 7
' PCF 8574 ADR 5 Ports 57 - 64 BYTEPORT 8
' PCF 8574 ADR 6 Ports 65 - 72 BYTEPORT 9
' PCF 8574 ADR 7 Ports 73 - 80 BYTEPORT 10
' PCF 8574A ADR 0 Ports 81 - 88 BYTEPORT 11
' PCF 8574A ADR 1 Ports 89 - 96 BYTEPORT 12
' PCF 8574A ADR 2 Ports 97 - 104 BYTEPORT 13
' PCF 8574A ADR 3 Ports 105 - 112 BYTEPORT 14
' PCF 8574A ADR 4 Ports 113 - 120 BYTEPORT 15
' PCF 8574A ADR 5 Ports 121 - 128 BYTEPORT 16
' PCF 8574A ADR 6 Ports 129 - 136 BYTEPORT 17
' PCF 8574A ADR 7 Ports 137 - 144 BYTEPORT 18
Eventuell hast DU auch ein Problem am I2C-Bus. SCL und SDA müssen mit einem 5-10K Pullup-Widerstand gegen +5V gezogen werden.
-
hi dierk
danke für deinen post
ich hab ne m-unit 2.0
das mit dem pullup an scl und sda hab ich auch nicht==>werd ich gleich ändern!
wie kann ich denn bestimmen welche ADR ich hab?
ich hab alle drei adress bits auf 5V gesetzt
ist dass dann bei meinem pcf8574A Byteport 18 ???
-
Ja, das ist dann der Byteport 18 bzw. die Ports 137 - 144.
Mit den Pullups wird es dann funktionieren. Das heißt die Masse muss auch noch mit der Masse des PCF8574 verbunden sein (falls du 2 verschiedene Stromversorgungen haben solltest).
ABer dann muss es gehen.
-
hi
ich hab jetz die pull ups reingelötet
weißt du wie viele mA man von einem pcf entnehmen kann?
kann ich ne led einfach mit nem vorwiederstand anhängen?
-
hab mal im datenblatt reingeschaut, wenn ich mich nicht verlesen hab, 25mA...
(weiß nicht warum ich da nicht gleich reingeschaut hab)
aber zurück zu meiner eigentlichen Frage, irgendwie funktioniert es immer noch nicht. ich poste mal mein programm
define SDA port[9]
define SCL port[10]
define EXTPORT byteport[18]
define a port[137]
LIGHT=on
SDA=on
SCL=on
EXTPORT=off
#z
EXTPORT=on
a = off
print "alles an" &a& &EXTPORT&""
pause 100
EXTPORT=off
a=on
print "alles aus" &a& &EXTPORT&""
pause 100
goto z
-
hab noch was vergessen...
hyperterminal zeigt mir an, das EXTPORT = 255 ist und zwar jedes mal, das kann doch nicht sein oder???
was kann da die ursache sein?
Martin
-
Hmm. 255 wird auch angezeigt, wenn ein IIC-Bus Fehler aufgetreten ist.
LEDs darf man an den PCF8574 nicht zwischen Port und GND schalten. Sonst kann man nur immer den kompletten Byteport schalten.
Das geht nicht, weil der PCF8574 einen Open-Drain-Ausgang hat.
Wenn der Port eine Last schaltet, dann sinkt die Spannung durch die interne Konstantstromquelle unter eine Schwelle, welche beim Lesen als Low interpretiert wird, obwohl der Port auf high gesetzt wurde. Es wird intern vor dem Setzen des Ports immer der gesamte Byteport als Byte ausgelesen, die Veränderungen der "Bit"-Ports gemacht und dann zurück zum PCF8574 geschoben.
Das passiert nicht, wenn im Basic der komplette Byteport auf einmal gesetzt wird, weil ja dadurch komplett alle Portzustände neu definiert werden.
Les Dir mal das hier durch, da hat es auch ein paar Beispiele zur Beschaltung dabei:
http://www.c-control-support.net/dow...4_EXTPORTS.pdf
-
so jetzt noch mal ganz vereinfacht und zum mitschreiben:
define SDA port[9]
define SCL port[10]
define EXTPORT byteport[18]
SDA=on
SCL=on
EXTPORT=off
wenn ich die stromversorgung einschalte(die m_Unit befindet sich im resetzustand) messe ich 5V aufgrund meiner pull ups an den 8 ausgängen des PCF's.
wenn ich jetzt das oben geschriebene programm starte, muss ich 0V an den Ausgängen messen, trotz den pullups, wei der pcf die i/o's nach gnd zieht, oder???
-
Nein, keine Pullups an die Ports des PCF8574. Hänge fürs erste nichts dran und mess nur.
Beim Einschalten sind immer alle Ports des PCF8574 auf High (5V).
Mit EXTPORT=off sollten sie dann alle auf 0V sein.