PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I²C Porterweiterung



matlxxx
18.11.2006, 21:07
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

Dierk
18.11.2006, 21:27
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/bpp/Demo_Unit_M2.0_M1.2/EXTENDED_FUNCTIONS_M2.0_M1.2/EXTENDED_PORTS/EXTENDED_PORTS_4.htm
Wenn du den PCF8574A hast, musst Du den 2. Adressbereich verwenden.

Siehe hier


' 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.

matlxxx
18.11.2006, 21:50
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 ???

Dierk
18.11.2006, 21:55
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.

matlxxx
18.11.2006, 22:15
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?

matlxxx
19.11.2006, 08:23
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

matlxxx
19.11.2006, 08:29
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

Dierk
19.11.2006, 09:35
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/downloads/PCF8574_EXTPORTS.pdf

matlxxx
19.11.2006, 10:00
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???

Dierk
19.11.2006, 10:24
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.

matlxxx
19.11.2006, 10:37
die muss ich dann ja alle auslöten, wenn ich jetz eine led mit vorwiederstand nach vcc schalte(so wie in deinem link beschrieben, und EXTPORT =off dann müsste sie leuchten und bei EXTPORT = on nicht stimmt das??

matlxxx
19.11.2006, 10:44
verdammte mist, leuchtet aber nich!!!!!!!!!!!!!!!!!!!!!!!!!!!1

Dierk
19.11.2006, 11:11
Ja, dann müsste es so sein.
SDA und SCL sind auch richtigherum an den richtigen Ports angeschlossen?
Wie lange ist die I2C-Bus Leitung. Kurz oder mehrere Meter?
Hast Du auch einen PCF8574A?
Ist der GND des PCF mit dem GND der M2.0 verbunden?
Hast Du noch eventuell einen 2.PCF zum propbehalber tauschen?

matlxxx
19.11.2006, 11:24
SDA Port 9
SCL PORT 10
bus leitung 20 cm incl. 8k pullup
nen zweiten hab ich nicht
alle massen miteinander verbunden
Ich hab nen PCF 8574A, hab auch das beispiel IIC_ERROR_1.bas propiert und es gibt mir die Zahl 126 aus ==> byteport 18!!! mit pcf 8574A

bin ratlos...
martin

matlxxx
19.11.2006, 11:27
noch ne frage, die IIC bus signale werden die automatisch von der M-UNIT erzeugt, wenn ich z.b. auf den byteport 18 zugreife und auch automatisch an port 9 und 10 geschickt????

Dierk
19.11.2006, 11:33
Du hast auch SDA und SCL mit jeweils einem Pullup Widerstand versehen?
Hmm.
Eventuell benötigst Du noch ein 100n Ablockkondensator direkt am PCF zwischen VCC und GND (sollte eigentlich bei jedem IC gemacht werden, wobei es ohne meistens immer trotzdem geht -aber halt nicht immer).
Ansonsten, wenn alles richtig angeschlossen ist, weiß ich auch nicht weiter.

Dierk
19.11.2006, 11:35
noch ne frage, die IIC bus signale werden die automatisch von der M-UNIT erzeugt, wenn ich z.b. auf den byteport 18 zugreife und auch automatisch an port 9 und 10 geschickt????
Ja, der I2C-Bus wird bei verwenden der IIC und Port-Funktionen immer an Port9 und Port10 betrieben.

DIE HARD
19.11.2006, 11:45
SDA Port 9
SCL PORT 10
bus leitung 20 cm incl. 8k pullup
nen zweiten hab ich nicht
alle massen miteinander verbunden
Ich hab nen PCF 8574A, hab auch das beispiel IIC_ERROR_1.bas propiert und es gibt mir die Zahl 126 aus ==> byteport 18!!! mit pcf 8574A

bin ratlos...
martin

Hallo......
Ich gehe mal davon aus, dass du KEIN LCD angeschlossen hast, ja?

matlxxx
19.11.2006, 12:24
ja is so warum??

DIE HARD
19.11.2006, 12:36
ja is so warum??


Weil es den I²C Bus stört, wenn es nicht initialisiert ist.
Aber wenn du keins angeschlossen hast, braucht dich das nicht zu kümmern.

DIE HARD
19.11.2006, 12:40
SDA Port 9
SCL PORT 10
bus leitung 20 cm incl. 8k pullup
nen zweiten hab ich nicht
alle massen miteinander verbunden
Ich hab nen PCF 8574A, hab auch das beispiel IIC_ERROR_1.bas propiert und es gibt mir die Zahl 126 aus ==> byteport 18!!! mit pcf 8574A

bin ratlos...
martin


Ja, du bist ja schon spassig. Da fehlt der zweite Pullup.
Dann schalte halt wenigstens die internen Pullups, wenn du keinen Widerstand
hast.

matlxxx
19.11.2006, 12:41
es ist mir auch folgendes aufgefallen:
wenn ich keine pull ups an sda und scl habe, dann findet das Beispielprog. IIC_Error bei allen adressen ein gerät. bei aktiven pullups findet es nur das jeweilige das ich angeschlossen hab
hat jemand eine erklärung für?
bei so kurzen leitungslängen dürfte das ja nicht relevant sein oder?

matlxxx
19.11.2006, 12:43
nen zweiten hab ich nicht


damit meinte ich hab keinen zweiten PCF!

DIE HARD
19.11.2006, 13:08
es ist mir auch folgendes aufgefallen:
wenn ich keine pull ups an sda und scl habe, dann findet das Beispielprog. IIC_Error bei allen adressen ein gerät. bei aktiven pullups findet es nur das jeweilige das ich angeschlossen hab
hat jemand eine erklärung für?
bei so kurzen leitungslängen dürfte das ja nicht relevant sein oder?


Doch sicher. Wenn nach der Adressse der 9. Clock gesendet wird
bleibt SDA LO, wenn kein PULLUP da ist. und dann meint die C-Control
dass sie ein ACKN empfangen hat.

matlxxx
19.11.2006, 13:27
gibt es eine möglichkeit den pcf zu testen ob er noch funktioniert???

DIE HARD
19.11.2006, 14:13
gibt es eine möglichkeit den pcf zu testen ob er noch funktioniert???


Warum sollte er defekt sein.
Schliess halt erst mal alle PULLUP an, oder schalte die internen ein und dann:


define SDA port[9]
define SCL port[10]
define EXTPORT byteport[18]

SDA=on
SCL=on
EXTPORT=off

Siehst du schon ob er geht.

matlxxx
19.11.2006, 16:10
Warum sollte er defekt sein.
Schliess halt erst mal alle PULLUP an, oder schalte die internen ein und dann:
Siehst du schon ob er geht.


hab ich ja schon alles probiert
ich hab pullups an scl und sca,
ich hab pullups an den ausgängen des pcf's
laut diesem prog muss ich dann an den pcf ausgängen 0V messen
trotz pullups an den ausgängen des pcf oder???
ich mess immer nur die blöden 5 V!!!
ich hab auch den pcf schon ohne meiner platine(sprich ohne pullups an den Ausgängen probiert und es tut sich nichts!!!!!!!!!!!!!!!!!!!!!!

ich glaub ich werd das ding auf den misthaufen werfen!!!

DIE HARD
19.11.2006, 18:30
Warum sollte er defekt sein.
Schliess halt erst mal alle PULLUP an, oder schalte die internen ein und dann:
Siehst du schon ob er geht.


hab ich ja schon alles probiert
ich hab pullups an scl und sca,
ich hab pullups an den ausgängen des pcf's
laut diesem prog muss ich dann an den pcf ausgängen 0V messen
trotz pullups an den ausgängen des pcf oder???
ich mess immer nur die blöden 5 V!!!
ich hab auch den pcf schon ohne meiner platine(sprich ohne pullups an den Ausgängen probiert und es tut sich nichts!!!!!!!!!!!!!!!!!!!!!!

ich glaub ich werd das ding auf den misthaufen werfen!!!

Da fällt mir grad was ein.
Welche OS Version hast du?
Bei der 2.02 ist das Timing am IIC-Bus zusammen mit dem A-Typen
kritisch. Bei 2.03/2.05 ist das angepasst.

matlxxx
19.11.2006, 19:37
ähm,... meinst du die version des betriebssystems der m-unit oder des basic++
denke mal das der m-unit, wie soll ich das rausfinden?
steht das auf der verpackung, ich schaumal nach...

Dierk
19.11.2006, 20:10
Er meint die OS-Version.
Schau hier:
http://www.csslabs.de/ccontrol/lib/bpp/Demo_Unit_M2.0_M1.2/Tools_M2.0_M1.2/READ_OS_VERSION/GET_VERSION.htm

matlxxx
19.11.2006, 21:12
Hurra!!!Hurra!!!Hurra!!!Hurra!!!Hurra!!!Hurra!!!Hu rra!!!
Es funzt!!
hab die 2.05 version und es hat auf anhieb fuktioniert!
War ne ziemliche schwergeburt, was??
Danke Dierk and DIE HARD!!!!


Auf zum nächsten schritt auf dem weg zu meiner Vollautomatischen Maschine!!!

Gruß martin

Dierk
20.11.2006, 07:48
Super!
Und was war es jetzt? Hast Du das OS geupdatet und dann hat es funktioniert?

matlxxx
20.11.2006, 16:18
Super!
Und was war es jetzt? Hast Du das OS geupdatet und dann hat es funktioniert?

Ja, hab die 2.05 version installiert und es hat funktioniert!
wird bei der produktion der m-Unit immer noch die 2.02 version installiert, oder hab ich nur ein älteres Baujahr erwischt?
naja egal, es haut auf jeden fall hin!!!

mfg Martin

DIE HARD
20.11.2006, 17:53
Super!
Und was war es jetzt? Hast Du das OS geupdatet und dann hat es funktioniert?

Ja, hab die 2.05 version installiert und es hat funktioniert!
wird bei der produktion der m-Unit immer noch die 2.02 version installiert, oder hab ich nur ein älteres Baujahr erwischt?
naja egal, es haut auf jeden fall hin!!!

mfg Martin


Die 2.05 wird seit 2 Monaten ausgeliefert, aber das mischt sich natürlich
im Hochregallager mit alten Beständen.