Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: PCF 8574 als Eingang... PROBLEM GELOEST ! Kategorie: Programmierung Basic (von das - 18.07.2015 22:43)
 Als Antwort auf Re: PCF 8574 als Eingang... PROBLEM GELOEST ! von Nicolas - 13.07.2015 22:40
Vielen Dank fĂŒr das Update, schön zu lesen dass eine Lösung gefunden ist!

Jetzt stellt sich die Frage woran liegt es, dass das Programm auf dem Applictaionboard I 2.0 ohne zusÀtzliche Pull-Ups lÀuft?

Vielen Dank auch an Bert fĂŒr den Tipp zu den verfĂŒgbaren Begleitinformationen. Unter anderem fanden wir bĂŒndig und einleuchtend die Besonderheiten des PCF8574 bei Verwendung als externer I/O-Port beschrieben. Wirklich sehr lesenswert!

Nach einem Blick in den Schaltplan zum Applicationboard I 2.0 wird der Unterschied klar:
Port9 (SDA) sowie Port10 (SCL) sind jeweils ĂŒber einen 10k Widerstand (R26, R27) im Sinne einer Pull-Up-Schaltung mit +5V verbunden. Deshalb funktioniert dort das Beispielprogramm.

> Ich habe diesen Effekt mehrmals getestet und reproduziert: Wenn ich die gleiche Software verwende > und beim Hardware nur die Pull-Up's verÀndere, kann ich den Port 17 nur als Ausgang
> (ohne Pull-Up's), oder als Ein/Ausgang benutzen (mit 10K Pull-Up's).
> An sowas hÀtte ich nie gedacht...


Nachdem wir jetzt die Schaltung erneut, diesmal aber ohne Applicationboard I 2.0, aufgebaut haben kommen wir endlich auch dahinter:


Schreiben zum PCF8574 (ohne externe Pull-Up's) - Funktioniert
Lesen     vom PCF8574 (ohne externe Pull-Up's) - Funktioniert nicht


Eine weitere Lösungsmöglichkeit liefert das C-Control I M-2.0 Manual:


"... [beide] Byteports können mit internen Pullup- WiderstÀnden (30k) Softwareseitig beschaltet
werden. Diese Beschaltung kann in einem der beiden Konfigurationsregister aktiviert werden
und gilt jeweils fĂŒr alle acht Bitports eines von beiden Byteports."


Die internen Pull-Up WiderstÀnde dauerhaft mit einem Hilfsprogramm (CONFIG1_1++.bpp) zu (de)aktiveren geht scheinbar nicht, denn nach dem Reboot sind die internen Pull-Up's wieder deaktiviert.

Man muss also beim C-Control I M-2.0 die Einstellung der internen Pull-Up's zur Laufzeit vornehmen:

CONFIG.init
PUT &b00011000 'Bit Nr.4 und Bit Nr.3 auf 1 setzen, fĂŒr interne Pull-Up's an den beiden Byteports.
CONFIG.off


Mit der nachfolgend gezeigten Programmerweiterung können die externen Pull-Up-WiderstÀnde komplett entfallen:



define SDA as port [9]
define SCL as port [10]
define led as port [1]
define eingang as port [17]

LCD.init
LCD.off
''''''''''''''''''''' Erweiterung:
CONFIG.init         ' Interne Pull-Up-Widerstaende aktivieren
PUT &b00011000      ' an Byteport 1 & 2 - jeweils ca. 30k Ohm,
CONFIG.off          ' lt. eigener Messung etwas ĂŒber 25k Ohm
'''''''''''''''''''''
SDA=on
SCL=on
eingang=on


#loop
led=eingang
goto loop



Vielleicht möchte jemand testen, wie sich der höhere Widerstand der intern geschalteten Pull-Up's auf die maximal treibbare Anzahl von I2C Bausteinen, LeitungslĂ€nge und mögliche Übertragungsraten aber auch als mögliche Stromersparnis auswirkt - und dann hier berichten?




das |_ Team





> Hallo, ich war ein paar Tage weg auf Törn.
> Ich hatte Zeit zum nachdenken, und als ich wieder zuhause war habe ich noch einiges

ausprobiert und den Fehler endlich gefunden:
>
> Es lag and den fehlenden Pull-up WiderstÀnde auf die I2C Leitungen SDA und SCL.
> Mit 2x 10 K Pull-up auf 5V funktionniert es einwandfrei.
>
>
> Warum hatte ich denn keine Pull-Up's auf den I2C bus ?
>
> Ich habe aus folgende falsche Annahme bewusst auf die WiederstÀnde verzichtet:
> Meine I2C Busleitung ist extrem kurz (max 10 cm), pull-up's werden nur auf lÀngere Leitungen

benötigt.
>
> Hier ist ein Foto von meine Schaltung (Siehe die kurze Leitungen):
> http://img15.hostingpics.net/pics/281613I2CSchaltung.jpg
>
>
> Meine falsche Annahme wurde dann duch folgende Beobachtung fÀlschlicherweise bestÀtigt:
>
> Beim Kommando "eingang=off" konnte ich auf Pin 4 des PCF8574 einen Pegelwechsel von High auf

Low messen und so dachte ich es sei damit bewiesen dass mein I2C Bus einwandfrei funktionniert.

In der tat, damit habe ich aber nur bewiesen dass die I2C Kommunikation vom Controller zum

PCF8574 als Ausgang funktionniert, nicht aber in die umgekehrte Richtung als Eingang !!! In der

Tat funktionnierte es als Eingang NICHT !!!
>
> Als ErklĂ€rung dafĂŒr, vermute ich unterschiede zwischen C-control und PCF8574 bei Pegeln und

lieferbare Ströme auf den I2C Bus. Ich vermute dass bei fehlende Pull-Up WiderstÀnde und

bestimmte I2C LeitungslÀngen die Kommunikation in eine Richtung vom C-contol zur PCF8574 gerade

noch durchkommt, aber nicht mehr in die andere umgekehrte Richtung. Die Leitung wird also

assymetrisch und unidirektional, eine Richtung fÀllt vor die andere aus.
>
> Ich habe diesen Effekt mehrmals getestet und reproduziert: Wenn ich die gleiche Software

verwende und beim Hardware nur die Pull-Up's verÀndere, kann ich den Port 17 nur als Ausgang

(ohne Pull-Up's), oder als Ein/Ausgang benutzen (mit 10K Pull-Up's).
> An sowas hÀtte ich nie gedacht...
>
> Da der Fehler jetzt behoben ist, habe ich die Schaltung neu gezeichnet so dass jeder es

nachbauen kann.
> Die Schaltung ist auf das obige Bild sichtbar.
>
> Als Eingabetaster habe ich zwei getestete Varianten gezeichnet:
>
> Variante A: Taster mit Zustandanzeige. Eine low-current LED und ein 1.5K Widerstand sind mit

GND verbunden. Mit Kommando "eingang=off" ist Pin 4 vom PCF85674 Low und die LED leuchtet nicht.

Bei schliessen des Tasters A, leuchtet die LED auf und Pin 4 wird auf high gezogen. Port 17 wird

als "on" ausgelesen.
>
> Variante B: Taster ohne Anzeige. Pin 4 vom PCF85674 ist High (Kommando "eingang=on"). Bei

schliessen des Tasters B wird Pin 4 auf low gezogen und Port 17 wird als "off" ausgelesen.
>
>
> ALSO NICHT VERGESSEN: PULL-UP WIDERSTAENDE AUF SDA UND SCL, AUCH BEI KURZEN I2C BUS !
>
>
>
> FĂŒr weitere Fragen stehe ich gerne zur VerfĂŒgung.
>
> Vielen Dank noch an alle die geholfen haben das Problem zu lösen.
>
>
> Salutations
>
> Nicolas
>
>
>
>
>
> > Hallo, gruss an alle, ich bin seit jahren nicht mehr da gewesen...meinen Passwort habe ich

auch vergessen...
> >
> >
> > Seit drei Tagen versuche ich ohne Erfolg den Port 17 (PCF 8574 auf den I2C Bus) als Eingang

zu nutzen... was ich frĂŒher schon geschafft habe. Was mach ich denn falsch ?!?
> >
> >
> > Hier ist meine Schaltung:
> >
> >

[URL=http://www.hostingpics.net/viewer.php?id=870290Schaltung.jpg][IMG]http://img11.hostingpics.

net/pics/870290Schaltung.jpg[/IMG][/URL]
> >
> > Hier ist mein Testprogramm:
> >
> > define SDA as port [9]
> > define SCL as port [10]
> > define led as port [1]
> > define eingang as port [17]
> >
> > LCD.init
> > LCD.off
> >
> > SDA=on
> > SCL=on
> > eingang=on
> >
> >
> > #loop
> > led=eingang
> > goto loop
> >
> >
> >
> >
> > Die Led an port 1 sollte den Zustand des Port 17 anzeigen... macht es aber nicht
> > Die Messung bestÀtigt dass der Port 17 (pin4 auf pcf8574) nach Befehl "eingang=on" auf high

geht. Der Portexpander funktionniert also einwandfrei als Ausgang.
> > Die Portabfrage als Eingang liefert aber immer nur einen low, unabhÀngig davon ob pin 4 vom

pcf8574 (port17) auf low oder auf high gezogen wird !
> >
> > Ich versteh das nicht.
> >
> > Stimmt da etwas mit die Softwareabfrage nicht ?
> >
> >
> > Wer könnte mir bitte helfen ?
> >
> >
> > Gruss
> >
> > Nicolas
> Hallo, ich war ein paar Tage weg auf Törn.
> Ich hatte Zeit zum nachdenken, und als ich wieder zuhause war habe ich noch einiges ausprobiert und den Fehler endlich gefunden:
>
> Es lag and den fehlenden Pull-up WiderstÀnde auf die I2C Leitungen SDA und SCL.
> Mit 2x 10 K Pull-up auf 5V funktionniert es einwandfrei.
>
>
> Warum hatte ich denn keine Pull-Up's auf den I2C bus ?
>
> Ich habe aus folgende falsche Annahme bewusst auf die WiederstÀnde verzichtet:
> Meine I2C Busleitung ist extrem kurz (max 10 cm), pull-up's werden nur auf lÀngere Leitungen benötigt.
>
> Hier ist ein Foto von meine Schaltung (Siehe die kurze Leitungen):
> http://img15.hostingpics.net/pics/281613I2CSchaltung.jpg
>
>
> Meine falsche Annahme wurde dann duch folgende Beobachtung fÀlschlicherweise bestÀtigt:
>
> Beim Kommando "eingang=off" konnte ich auf Pin 4 des PCF8574 einen Pegelwechsel von High auf Low messen und so dachte ich es sei damit bewiesen dass mein I2C Bus einwandfrei funktionniert. In der tat, damit habe ich aber nur bewiesen dass die I2C Kommunikation vom Controller zum PCF8574 als Ausgang funktionniert, nicht aber in die umgekehrte Richtung als Eingang !!! In der Tat funktionnierte es als Eingang NICHT !!!
>
> Als ErklĂ€rung dafĂŒr, vermute ich unterschiede zwischen C-control und PCF8574 bei Pegeln und lieferbare Ströme auf den I2C Bus. Ich vermute dass bei fehlende Pull-Up WiderstĂ€nde und bestimmte I2C LeitungslĂ€ngen die Kommunikation in eine Richtung vom C-contol zur PCF8574 gerade noch durchkommt, aber nicht mehr in die andere umgekehrte Richtung. Die Leitung wird also assymetrisch und unidirektional, eine Richtung fĂ€llt vor die andere aus.
>
> Ich habe diesen Effekt mehrmals getestet und reproduziert: Wenn ich die gleiche Software verwende und beim Hardware nur die Pull-Up's verÀndere, kann ich den Port 17 nur als Ausgang (ohne Pull-Up's), oder als Ein/Ausgang benutzen (mit 10K Pull-Up's).
> An sowas hÀtte ich nie gedacht...
>
> Da der Fehler jetzt behoben ist, habe ich die Schaltung neu gezeichnet so dass jeder es nachbauen kann.
> Die Schaltung ist auf das obige Bild sichtbar.
>
> Als Eingabetaster habe ich zwei getestete Varianten gezeichnet:
>
> Variante A: Taster mit Zustandanzeige. Eine low-current LED und ein 1.5K Widerstand sind mit GND verbunden. Mit Kommando "eingang=off" ist Pin 4 vom PCF85674 Low und die LED leuchtet nicht. Bei schliessen des Tasters A, leuchtet die LED auf und Pin 4 wird auf high gezogen. Port 17 wird als "on" ausgelesen.
>
> Variante B: Taster ohne Anzeige. Pin 4 vom PCF85674 ist High (Kommando "eingang=on"). Bei schliessen des Tasters B wird Pin 4 auf low gezogen und Port 17 wird als "off" ausgelesen.
>
>
> ALSO NICHT VERGESSEN: PULL-UP WIDERSTAENDE AUF SDA UND SCL, AUCH BEI KURZEN I2C BUS !
>
>
>
> FĂŒr weitere Fragen stehe ich gerne zur VerfĂŒgung.
>
> Vielen Dank noch an alle die geholfen haben das Problem zu lösen.
>
>
> Salutations
>
> Nicolas
>
>
>
>
>
> > Hallo, gruss an alle, ich bin seit jahren nicht mehr da gewesen...meinen Passwort habe ich auch vergessen...
> >
> >
> > Seit drei Tagen versuche ich ohne Erfolg den Port 17 (PCF 8574 auf den I2C Bus) als Eingang zu nutzen... was ich frĂŒher schon geschafft habe. Was mach ich denn falsch ?!?
> >
> >
> > Hier ist meine Schaltung:
> >
> > [URL=http://www.hostingpics.net/viewer.php?id=870290Schaltung.jpg][IMG]http://img11.hostingpics.net/pics/870290Schaltung.jpg[/IMG][/URL]
> >
> > Hier ist mein Testprogramm:
> >
> > define SDA as port [9]
> > define SCL as port [10]
> > define led as port [1]
> > define eingang as port [17]
> >
> > LCD.init
> > LCD.off
> >
> > SDA=on
> > SCL=on
> > eingang=on
> >
> >
> > #loop
> > led=eingang
> > goto loop
> >
> >
> >
> >
> > Die Led an port 1 sollte den Zustand des Port 17 anzeigen... macht es aber nicht
> > Die Messung bestÀtigt dass der Port 17 (pin4 auf pcf8574) nach Befehl "eingang=on" auf high geht. Der Portexpander funktionniert also einwandfrei als Ausgang.
> > Die Portabfrage als Eingang liefert aber immer nur einen low, unabhÀngig davon ob pin 4 vom pcf8574 (port17) auf low oder auf high gezogen wird !
> >
> > Ich versteh das nicht.
> >
> > Stimmt da etwas mit die Softwareabfrage nicht ?
> >
> >
> > Wer könnte mir bitte helfen ?
> >
> >
> > Gruss
> >
> > Nicolas

 Antwort schreiben

Bisherige Antworten: