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 Nicolas - 13.07.2015 22:40)
 Als Antwort auf PCF 8574 als Eingang von Nicolas - 3.07.2015 11:26
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:

Re: PCF 8574 als Eingang... PROBLEM GELOEST ! (von das - 18.07.2015 22:43)