PCA9555 Tastenauswerten

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • PCA9555 Tastenauswerten

      Hallo zusammen,
      versuche gerade mit dem Portexpander PCA9555 und I2C 16 Ausgänge über Tasten zu schalten.
      Einschalten geht gut..aber wie schaltet man die eintelnen Ausgänge wieder ab?
      Bin für jeden Tipp dankbar, auch ein Codeschnipsel hilft ev.Weiter.
      Danke erstmal.
      Rudi
      Files
      • PCA9555.bas

        (6.06 kB, downloaded 17 times, last: )
    • Hallo Pluto25,
      dein Tipp war gut...aber: es werden ja alle Ausgänge miteinander abgeschaltet.
      Es sollte aber jede Taste ihren zugeteilten Ausgang ein und auch wieder ausschalten können, ohne die Restlichen zu beeinflussen.
      ev.habe ich Deinen Tipp nicht richtig umgesetzt.
    • RUBI52 wrote:

      alle Ausgänge miteinander abgeschaltet
      Das war der Plan.
      Wenn ich's jetzt richtig verstanden haben soll er nicht zeigen welche Taste gerade gedrückt ist sondern jede Taste soll ihren Ausgang Ein und beim nächsten Druck wieder Aus schalten?
      Das sollte mit toggle erreicht werden:
      Select Case Key
      Case 1 : Toggle Ausgang_0_a 'Taste 1
      ....

      Sollen beim Einschalten Ausgänge schon Ein sein können die vor dem Do gesetzt werden. So sind immer alle Aus bis eine Taste gedrückt wird.
    • Hallo Pluto25,
      wie kann ich nun 3 Stück Pcf9555 kaskadieren um 48 Ausgänge zu haben?
      Mein Plan: die 3 Schreibadressen als Constanten am Anfang definieren.
      Die I2C Routinen je nach Tasten : 1 - 16, 17 - 32 und 33 - 48 anspringen.
      ist mein Gedanke richtig?
      Mfg
      Rudi
    • Hallo PLuto25,
      hab 2 Tastenplatinen mit je 16 Tasten an 2 PCA9555 angeschlossen und an den Ports jeweils 16 LED's. Adressen gesetzt.Bus terminiert ( 2 x 10 K )
      Alle Tasten von Platine 1 getestet LED - an - aus funktioniert. das gleiche mit Tasten von Platine 2 funktioniert.
      Wenn aber auf einer Platine mehrere LED eingeschaltet sind, und auf der anderen eine LED eingeschaltet wird,übernimmt
      diese das LED Muster der anderen.
      z.Bspl: LED 1 und LED 2 auf Platine 1 an. z.Bspl: Taste 7 auf Platie 2 schaltet LED7 ein und LED 1 und LED 2 gehen auch an.
      Kannst Du mir bitte weiterhelfen?
      MfG
      Rudi
      Files
      • PCF9555_vES.bas

        (11.57 kB, downloaded 5 times, last: )
    • Es ist auch ein wenig schwierig 48 Zustände in 16Bits zu packen :D
      Ich würde die weiteren Ausgänge ihre eigenen Variablen geben.
      z.B. Ausgang_2 und Ausgang_3 für den zweiten sowie.._3 und 4 für den dritten.
      Das sollte dann auch in der Select Case Key angewandt werden:
      Case 1 : Toggle Ausgang_0_a '= 1 'Taste 1
      Case 17 : Toggle Ausgang_2_a '= 1 'Taste 1 Feld 2
      Case 33 : Toggle Ausgang_4_a '= 1 'Taste 1 Feld 3


      PS Bascom lässt auch bit Operationen in Words zu. Wenn du Dich an 0,1,2...15 anstelle a,b..h gewöhnen kannst erspart Dir das viel Schreibarbeit z.B.
      Dim Ausgang_0 as Word, Ausgang_1 as word,Ausgang_2 as Word '(je eine Pro Pca)
      Case 1 : Toggle Ausgang_0.0
      ...
      case 48: Toggle Ausgang_3.15
      Das würde auch die Ausrechnung in den I2c_ausgangsrotinen vereinfachen. Die If Ausgang..... wären nicht mehr nötig. Das erste I2cwrite muss dann noch ein High(Ausgang_2) bekommen damit er das Höherwertige Byte sendet, Beim zweiten ist kein Low(..) nötig da der Befehl(I2cwrite) immer das Lowbyte sendet auch wenn er was größeres als ein Byte bekommt.

      The post was edited 1 time, last by Pluto25 ().

    • Ja, sonst sind es Eingänge. Das sollte aber reichen es einmalig beim Start zu beschreiben. Der merkt sich das bis er abgeschaltet wird (oder sie verändert werden).
      Zur Zeit werden sie beide bei jedem Durchlauf der I2c_ausgangsroutinen beschrieben:
      Nach seiner Adresse bekommt er die Registernummer und setzt das nächste Byte da rein das übernächste wird ins nächste Register geschrieben.
      Ein vollständiges 'Init' könnte so aussehen
      I2cstart
      I2cwbyte Pca9555_schreib_adresse_1
      I2cwbyte 4
      I2cwbyte 0 (Register4=0: Alle LowPins nicht invertiert)
      I2cwbyte 0
      I2cwbyte 0
      I2cwbyte 0 (Register 7=0: Alle HighPins Ausgang)
      I2cstop
    • Beim PCA konfigurieren sollte immer nur einer angesprochen werden. So wird dem ersten 'schwindelig' während die anderen nicht mehr zuhören.
      I2cstart 'Alle hören zu
      I2cwbyte Pca9555_schreib_adresse_1 'Nur der erste erwachtet weitere Bytes den anderen ist egal was da noch kommt
      I2cwbyte Pca9555_schreib_adresse_2 'das ist für den ersten die Registeradresse. 66 hat er nicht, evt wirds als 2 genommen
      I2cwbyte Pca9555_schreib_adresse_3 'das kommt in Register 2?
      I2cwbyte 6 'das dann in Register 3
      I2cwbyte 7 'das in Register 4
      I2cwbyte &B00000000 'die 0 in 5
      I2cwbyte &B00000000 'und noch eine in 6
      I2cstop
      In den Ausgangsroutinen wird die 7 ins Register 6 geschrieben, eine 0 in Register7 und eine 0 sonstwohin
      Dort wird es auch nicht mehr benötigt wenn das Konfigurieren richtig durchgelaufen ist.
      I2cstart:I2cwbyte Pca9555_schreib_adresse_1:I2cwbyte 6:I2cwbyte 0:I2cwbyte 0:i2cstop
      und noch zwei mal das gleiche mit den anderen Adressen.

      Die Zeilen 66-81 würde ich (schreibfaul) durch Aus_0=$ffff ersetzen.
      Die Ausgangsroutinen sind auch nicht richtig gut. Wenn das Aus anfangs zu null wird gehen die vorherigen Tasten verloren.
      Dann sollten die richtigen 'aus' genutzt werden damit Pca3 nicht die lowbytes von 1 und 2 ausgibt
      I2cstart
      I2cwbyte Pca9555_schreib_adresse_3
      I2cwbyte 2
      I2cwbyte High(Aus_2)
      I2cwbyte Aus_2
      I2cstop
    • Hallo Pluto25,
      Vielen Dank !! Es läuft !!
      Werde noch die Tasten gegenseitig verriegeln müssen.
      Warum das ganze: vor 6 Jahren hab ich mal eine Steuerung mit 20 Tasten, 20 LED's gebaut. Über eine Stromschleife ( 50 m) werden 20 Relais geschaltet.
      Damals wurde ein Mega 32 wegen der 4 Port's verwendet. Jetzt soll die Anlage auf 48 Schaltausgänge erweitert werden.
      Also Danke noch mals
      MfG
      Rudi
      Files