IO-Port PCF8574 Programm

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
Hompi
Beiträge: 38
Registriert: 01 Nov 2014, 22:23

IO-Port PCF8574 Programm

Beitrag von Hompi » 13 Feb 2016, 17:02

Hallo Jungs,

ich habe mal eine Frage an die I2C Spezialisten. Ich habe das IOPort-PCF8574 Modul an meinen TXT angeschlossen und mit dem Testprogramm aus RoboPro (IOPort-PCF8574.rpp) getestet. Das funktioniert soweit, die 8 LED´s flackern vor sich hin. Meine Frage ist nun, wie kann ich gezielt die einzelnen Ausgänge von P0-P7 ansprechen (an- oder ausschalten). Ich denke hier muss ich in dem I2C Schreib-Modul irgendwo einen entsprechenden Befehl einfügen, mir ist nur nicht klar wo und wie. :x

Könnt Ihr mir einen Tipp geben ?

Danke und Gruss
Jürgen

chehr
Beiträge: 161
Registriert: 07 Apr 2015, 21:07
Wohnort: Friedrichshafen

Re: IO-Port PCF8574 Programm

Beitrag von chehr » 13 Feb 2016, 17:48

Hallo Jürgen,
die Ein-/Ausgänge P0-P7 entsprechen 8-Bit (z.B. 00000001) die man am Eingang eingeben muß wobei P0 die rechte BIN Stelle und P7 der linken entspricht. D.h. wenn du nur P0 einschalten (ausschalten?) möchtest muß das UP "I2CPort-Set" als Eingang eine DEZ 1 erhalten. Wenn P0 und P1 ein sein sollen muß die Zahl 3 sein, usw.
Zu beachten ist auch, das die LEDS mit ihrer Anode über einen Vorwiderstand gegen VCC verdrahtet sind. Eine LED wird eingeschaltet, indem der jeweilige Ausgang auf LOW gesetzt wird (LOW aktive). Man sollte nicht die LEDs mit ihrer Kathode gegen GND zu verdrahten, da die Ausgänge vom Typ Open Collector sind und nur bei LOW große Ströme schalten können.
Ich habe den Baustein zwar noch nicht getestet, aber ich denke so müsste es klappen. Die Lesebefehle sind dann für die Eingänge.
Gruß
Christian

Hompi
Beiträge: 38
Registriert: 01 Nov 2014, 22:23

Re: IO-Port PCF8574 Programm

Beitrag von Hompi » 14 Feb 2016, 17:24

chehr hat geschrieben:Hallo Jürgen,
die Ein-/Ausgänge P0-P7 entsprechen 8-Bit (z.B. 00000001) die man am Eingang eingeben muß wobei P0 die rechte BIN Stelle und P7 der linken entspricht. D.h. wenn du nur P0 einschalten (ausschalten?) möchtest muß das UP "I2CPort-Set" als Eingang eine DEZ 1 erhalten. Wenn P0 und P1 ein sein sollen muß die Zahl 3 sein, usw.
Hallo Christian,

meinst Du in dem I2C-Schreib Befehl das Feld "Datenwert"? Muss in diesem Feld (nach deinem Beispiel) der Wert 1 bzw. 3 eingetragen werden?
Ich habe das vorhin versucht, hat allerdings nicht funktioniert. Sorry, aber ich stehe gerade im Wald.... :roll:
Vielleicht kannst Du mir noch einen Tipp geben.

Danke und Gruss
Jürgen

hamlet
Beiträge: 332
Registriert: 12 Jan 2011, 21:41

Re: IO-Port PCF8574 Programm

Beitrag von hamlet » 14 Feb 2016, 18:53

Hallo Jürgen,
Hast Du es schon mit den beiden Treiberfunktionen aus der ft-Bibliothek (In RoboPro verfügbar: Elementgruppen->Bibliothek->I2C->IOPort-PCF8574) versucht?
Bei der Bit-Popelei leistet mir der Windows-Taschenrechner in der Programmers-View immer gute Dienste.
Vielleicht ist diese kleine BitLib.rpp ganz hilfreich um die PCF8574 Bits zu setzen oder auszuwerten.
Beste Grüße,
Helmut

EDIT: Mir ist grad erst klar geworden, dass das IOPort-PCF8574-"Testprogramm" und die "Bibliothek" identisch sind. Du nimmst doch "C:\Program Files (x86)\ROBOPro\Library\I2C\IOPort-PCF8574.rpp"?
An den I2C-Schreib Befehl musst Du nicht ran. Leg das Bit-Muster (z.b. 0b10101010=170) einfach an den orangenen Daten-Eingang des "I2CPort-Set"-Unterprogramms und lauf dann mit einem blauen Prozess durch.

chehr
Beiträge: 161
Registriert: 07 Apr 2015, 21:07
Wohnort: Friedrichshafen

Re: IO-Port PCF8574 Programm

Beitrag von chehr » 15 Feb 2016, 23:03

Hallo Jürgen,
wenn du am Eingang die vom UP"I2CPort-Set" eine 255 eingibst müssten alle LEDs die du an P0-P7 eventuell angeschlossen hast ausgehen, bei der Zahl 0 müssten alle eingehen.
Weiter kannst du noch das UP "I2CPort-Get" verwenden, und zwar eine Variable an den Ausgang legen. In dieser Variable müsste dann der Wert vom Eingang angezeigt werden.

Falls das nicht funktioniert stimmt was an deiner Verschaltung (LED Polung, ...) nicht.

Gruß
Christian

Benutzeravatar
H.A.R.R.Y.
Beiträge: 928
Registriert: 01 Okt 2012, 08:38
Wohnort: Westpfalz

Re: IO-Port PCF8574 Programm

Beitrag von H.A.R.R.Y. » 16 Feb 2016, 07:17

Hallo Hompi,

nun muß ich mich mal als "mit 100% RoboPro Unkenntnis befähigt" outen. Die 'Bitpfriemelei' gemäß den Schaltungsvorschlägen der Kollegen erledige ich so:

Einen bestimmten Ausgang (0 bis 7) des PCF8574 auf '0' setzen (= eine bestimmte LED Einschalten)
Aktuelles Bitmuster vom PCF8574 lesen und in A merken
Bit B im Byte A gezielt löschen => A := A & (1 << B)
Neues Bitmuster A zum PCF8574 schreiben

Einen bestimmten Ausgang (0 bis 7) des PCF8574 auf '1' setzen (= eine bestimmte LED Ausschalten)
Aktuelles Bitmuster vom PCF8574 lesen und in A merken
Bit B im Byte A gezielt setzen => A := A | (1 << B)
Neues Bitmuster A zum PCF8574 schreiben

:= der Zuweisungsoperator
& = binäres UND (AND)
| = binäres ODER (OR)
<< = Schiebeoperator 'Leftshift' - verschiebt den linken Wert (die 1) um die angegebene Stellenzahl (das B) nach links, also nichts anderes als 2 'hoch' B (wann gibt es hier im Forum endlich die Möglichkeit mathematische Ausdrücke zu setzen?).
Und die Klammern ganz normal wie sonst in der Mathematik auch.

Die LEDs dürfen mit ihren Anoden nur mit Vorwiderstand und nur an die Vcc (5V) des PCF8574 angeschlossen sein. Nicht an 9V!

Grüße
H.A.R.R.Y.

PS:
Für die einzelnen LEDs ergeben die Bits eine kleine Tabelle
LED-D0 = 1
LED-D1 = 2
LED-D2 = 4
LED-D3 = 8
LED-D4 = 16
LED-D5 = 32
LED-D6 = 64
LED-D7 = 128
Einfach den Wert vom PCF8574 lesen, mit dem LED-Wert verUNDen oder verODERn und fertig. Mehrere LEDs gleichzeitig werden geschaltet, indem die Summe der Werte verUNDet oder verODERt wird.

Sorry für die explizite Darstellung, ich habe keine Ahnung wie gut Du Dich auskennst.
[42] SURVIVE - or die trying

hamlet
Beiträge: 332
Registriert: 12 Jan 2011, 21:41

Re: IO-Port PCF8574 Programm

Beitrag von hamlet » 16 Feb 2016, 17:42

Hallo,
Harry, Dir ist ein kleiner Fehler unterlaufen:
Bit B im Byte A gezielt löschen => A := A & (1 << B)
Da muss man die die Bitmaske (1<<B) vorher noch invertieren. Also A := A & ~(1 << B)
Das ganze findet sich auch in der Wikipedia.
Meine oben erwähnte kleine BitLib.rpp bietet u.a. genau diese Funktionalität.
In RoboPro kann man nun (seit wann eigentlich?) Bit-Muster ganz einfach hexadezimal und binär in Variablen und Konstanten angeben:
129 = 0x81 = 0b10000001
Falls die Variable global ist und das Programm online läuft, kann man solche Variablen sogar als Ausgabe missbrauchen.
Leider funktioniert die binäre/hexadezimale Ausgabe nicht auf dem Display, ... oder hat das schon jemand hinbekommen?
Beste Grüße,
Helmut

Benutzeravatar
H.A.R.R.Y.
Beiträge: 928
Registriert: 01 Okt 2012, 08:38
Wohnort: Westpfalz

Re: IO-Port PCF8574 Programm

Beitrag von H.A.R.R.Y. » 17 Feb 2016, 11:37

hamlet hat geschrieben:Hallo,
Harry, Dir ist ein kleiner Fehler unterlaufen: [...] Da muss man die die Bitmaske (1<<B) vorher noch invertieren. Also A := A & ~(1 << B) [...]
völlig richtig. Die Tilde ( ~ = binäres invertieren) habe ich total vergessen. Danke.

Grüße
H.A.R.R.Y.
[42] SURVIVE - or die trying

thock
Beiträge: 10
Registriert: 02 Jul 2011, 22:40
Wohnort: Kreis Groß-Gerau

Re: IO-Port PCF8574 Programm

Beitrag von thock » 19 Feb 2016, 07:42

Hallo zusammen,

ich unternehme auch gerade meine ersten Gehversuche mit dem I²C Bus am TXT und habe mittlerweile auch den PCF8574 zum Laufen bekommen. Dabei ist mir folgendes aufgefallen: Wenn ich die Schreib- und Lesebefehle in kurzer Folge absetze (mit z.B. 1 Sekunde Pause dazwischen) dann funktioniert es wunderbar. Wenn ich dagegen etwas längere Pausen (z.B. 3 Sekunden) zwischen den einzelnen Schreib- oder Leseoperationen einlege, läuft die der nächste Befehl nach der Pause auf einen Fehler und ich kann auf dem Bus nichts mehr machen. Das einizige was dann noch hilft ist den TXT aus und wieder einzuschalten. Das Selbe habe ich, wenn mein Programm erfolgreich zu Ende läuft und ich es nocheinmal starten will.

Ist das bei euch auch so?
Kennt jemand einen Weg das zu umgehen? (das einzige was mir aktuell einfällt wäre in einem separaten Thread im Sekundentakt eine Leseoperation zu schicken, aber das ist natürlich keine wirklich schöne Lösung; habs auch noch nicht ausprobiert ob es wirklich geht)

Danke

Bis dann Thomas

Benutzeravatar
H.A.R.R.Y.
Beiträge: 928
Registriert: 01 Okt 2012, 08:38
Wohnort: Westpfalz

Re: IO-Port PCF8574 Programm

Beitrag von H.A.R.R.Y. » 19 Feb 2016, 08:01

Das klingt fast als ob der Bus blockiert wäre. Achtest Du darauf, das nach dem Abschluß des Transfers der Bus auch freigegeben wird (ein spezieller Buszyklus namens STOP)?
[42] SURVIVE - or die trying

thock
Beiträge: 10
Registriert: 02 Jul 2011, 22:40
Wohnort: Kreis Groß-Gerau

Re: IO-Port PCF8574 Programm

Beitrag von thock » 19 Feb 2016, 19:09

Hallo H.A.R.R.Y.,

vielen Dank für deinen Hinweis auf den Stop Zyklus. Er hat mich auf die richtige Spur gebracht. :D
Das Programm zur Steuerung des PCF8574 habe ich mit RoboPro erstellt und dort kann ich den Stop-Zyklus, meines Wissens nach, nicht explizit beeinflussen.
Die Ursache meines Problems war der Level-Shifter den ich einsetze. Ich verwende das Sparkfun Breakout-Board. Dort sind 10 kOhm Widerstände als Pullups verbaut und das war offenbar auf der 5V Seite zu viel, um die Pegel ausreichend schnell hochzuziehen. Ich habe jetzt einfach nochmal zwei 10 kOhm Widerstände parallel draufgeklemmt und jetzt klappt es einwandfrei. :D

Danke nochmal.

Bis dann Thomas

hamlet
Beiträge: 332
Registriert: 12 Jan 2011, 21:41

Re: IO-Port PCF8574 Programm

Beitrag von hamlet » 20 Feb 2016, 11:42

Hi Thomas,
man kann in RoboPro über die "Keep Open"/"Offen Lassen"-Option der i2c-Befehle Einfluss auf den auf's Senden der Stopp-Bedingung nehmen:
Aus der RoboPro-Hilfe:
Wenn bei offen lassen ein Haken gesetzt ist, sendet das Element am Ende kein Stopp über den I2C Bus. Dadurch können mit einem weiteren I2C Schreiben oder I2C Lesen Element weitere Daten gesendet oder gelesen werden. Sofern nicht zwischen lesen und schreiben gewechselt wird oder eine Lesebefehl mit Unteradresse ausgeführt wird, wird die Geräteadresse von folgenden I2C Elementen nicht neu gesendet. Bei einem Wechsel zwischen Lesen und Schreiben wird am I2C Bus ein Restart durchgeführt, keine Stopp-Start Sequenz. Der I2C Bus bleibt für den aktuellen Prozess reserviert, bis der aktuelle Prozess ein I2C Element ohne die Option offen lassen ausführt. Andere Prozesse werden solange blockiert, wenn sie I2C Element verwenden.
Diese Funktion ist mit RoboPro 4.2.3 aber stark eingeschränkt worden: viewtopic.php?f=21&t=3306#p22538
Beste Grüße,
Helmut

Hompi
Beiträge: 38
Registriert: 01 Nov 2014, 22:23

Re: IO-Port PCF8574 Programm

Beitrag von Hompi » 20 Feb 2016, 14:42

Hallo zusammen,

bitte entschuldigt das ich mich jetzt erst melde. Ich bin jetzt erst dazu gekommen eure Antworten und Tipps zu testen. Und was soll ich sagen, Ihr habt mir echt weitergeholfen. Die Ansteuerung der Ausgänge funktioniert ohne Problem. Ich wollte das 8574-Modul für die Realisierung eines Lauflichtes verwenden. Mal sehen ob ich das programmiertechnisch hinbekomme. Ich werde berichten...
Danke nochmals für die Unterstützung.

Gruss
Jürgen

chehr
Beiträge: 161
Registriert: 07 Apr 2015, 21:07
Wohnort: Friedrichshafen

Re: IO-Port PCF8574 Programm

Beitrag von chehr » 20 Feb 2016, 17:10

Hallo Jürgen,
obwohl die Ansteuerung des Bausteins nun sehr gut beschrieben ist, habe ich ein RoboPro Treiber Beispiel im Downloadbereich hinterlegt. Da gibt es 8 Schalter mit denen man die Ausgänge P0..P7 unabhängig aus- und einschalten kann, oder aber z.B. die LEDs blinken lassen. Auch gibt es ein Modul von den 8 Eingängen.
Ich bin selbst überrascht - der PCF8574 ist eine tolle Sache um 8 LEDs via RoboPro mit niederer Frequenz blinken zu lassen.
Hier der Link zum RoboPro Treiber mit Beispiele zur einfachen Anwendung... http://ftcommunity.de/data/downloads/ro ... ber1.0.rpp
Anmerkung: Eine externe Spannungsversorgung sollte man verwenden. Damit funktioniert bei mir der 400kHz Modus.

Gruß
Christian
Zuletzt geändert von chehr am 22 Feb 2016, 20:53, insgesamt 1-mal geändert.

Benutzeravatar
DirkW
Beiträge: 355
Registriert: 10 Nov 2014, 16:16
Wohnort: Bad Schwartau
Kontaktdaten:

Re: IO-Port PCF8574 Programm

Beitrag von DirkW » 20 Feb 2016, 17:59

Hallo Jürgen,

wenn du mit dem PCF8574 z.B. die 9 V ft-Lämpchen ansteuern möchtest, so kann ich dir das
8-Kanal Relais 5V dazu empfehlen.

8-Kanal Relais

Dazu brauchst aber eine externe 5V Stromversorgung, wie Christian schon geschrieben hat.

Gruß
Dirk

hamlet
Beiträge: 332
Registriert: 12 Jan 2011, 21:41

Re: IO-Port PCF8574 Programm

Beitrag von hamlet » 20 Feb 2016, 18:42

Hallo,
das Teil wird zur Zeit bei der Amazone zum absoluten Kampfpreis angeboten:
http://www.amazon.de/Kanal-Relay-Relais ... rds=relais
knapp fünf Euro inklusive Versand
Zu beachten ist allerdings, dass das Ding nicht unerheblich Strom zieht: 8*70mA=560mA, falls alle Relais aktiviert sind.
Beste Grüße,
Helmut

Benutzeravatar
H.A.R.R.Y.
Beiträge: 928
Registriert: 01 Okt 2012, 08:38
Wohnort: Westpfalz

Re: IO-Port PCF8574 Programm

Beitrag von H.A.R.R.Y. » 22 Feb 2016, 07:23

DirkW hat geschrieben: [...]

wenn du mit dem PCF8574 z.B. die 9 V ft-Lämpchen ansteuern möchtest, so kann ich dir das
8-Kanal Relais 5V dazu empfehlen. [...]
Also ehrlich, für ft-Lämpchen ist das Relais-Board der absolute overkill. Das braucht ja bald mehr Strom als die Lampen.
Für so etwas schaltet man dem PCF8574 einen ULN2803 nach. Der verträgt sogar induktiv-Lasten, also auch Magnetventil und XS-Motor (evtl. auch S-Motor). 'Common' muß dafür auch an +9V. Datenblatt z.B. hier: http://www.pollin.de/shop/downloads/D101063D.PDF

Grüße
H.A.R.R.Y.
[42] SURVIVE - or die trying

thock
Beiträge: 10
Registriert: 02 Jul 2011, 22:40
Wohnort: Kreis Groß-Gerau

Re: IO-Port PCF8574 Programm

Beitrag von thock » 22 Feb 2016, 11:51

Ich habe mir zu diesem Zwecke ein Output Modul aus dem Horter & Kalb Online Shop bestellt (http://www.horter-shop.de/de/i2c-hutsch ... 60721.html). Hier ist das alles schon zusammen auf einer Platine und kann direkt mit 9V betrieben werden. Da kann man Lämpchen, Motoren, etc. auch direkt anschließen.
Ich habe es schon hier, hatte aber noch keine Zeit es auszuprobieren.

Bis dann Thomas

hamlet
Beiträge: 332
Registriert: 12 Jan 2011, 21:41

Re: IO-Port PCF8574 Programm

Beitrag von hamlet » 18 Mai 2016, 19:38

Hallo Thomas,
Ich habe mir gerade mal das Horter & Kalb Teil genauer angeschaut. Eigentlich ganz schick. Dass die allerdings mit einem Schaltstrom von 500mA werben, ist schon abenteuerlich. Das ist das “absolute maximum rating“ des verbauten kleinen UDN2981A. Laut Datenblatt sollten es nicht mehr als 350mA sein und die als Dauerlast auch nur, falls weniger als drei der acht Ausgänge belastet werden. Bei 100% Duty Cycle auf allen acht Ausgängen sollte man bei 100mA bleiben. Aber das reicht ja, um z.B. ein paar Pneumatik-Ventile anzusteuern, was meine augenblickliche Anwendung wäre.
Blöder ist, dass der Schaltplan so aussieht, als ob das Teil auf der i2c-Seite noch eine externe 3.3V-5V Versorgung benötigte, die der blöde TXT nicht bietet. Oder liege ich da falsch? Mit einem zusätzlichem Spannungsregler wird das - zumindest bei mir - wieder ein hässlicher Kabelverhau.
Beste Grüße,
Helmut

Antworten