- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: PCF8574 über Python steuern

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    51
    Beiträge
    128

    PCF8574 über Python steuern

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich ich bin auf der Suche nach einem kleinen Skript in dem ich das Ansprechen eines Ports des PCF8574 über Python nachvollziehen kann.
    ich habe gefühlt das halbe Internet durchsucht aber nicht dergleichen gefunden. Die Beispiele die ich gefunden habe beziehen sich alle auf C.

    Wäre toll wenn mir hier jemand weiterhelfen könnte

    Daniel

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Hey,

    du kannst eigentlich das Modul smbus in Python verwenden.
    Die Handhabung ist sehr, sehr einfach:

    https://pypi.python.org/pypi/smbus-cffi/0.1
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    51
    Beiträge
    128
    Hallo Kampi,

    danke für deine Unterstützung.
    Ich habe jetzt mal versucht mich zurecht zu finden. Im Prinzip müsste es in der Tat ganz easy sein einen Port anzusprechen.
    Mit dem angehängten kleinen Programm sollte jetzt normaler weise an den Ausgänge etwas passieren:
    Code:
    import smbus
    import time
     
    bus = smbus.SMBus(0)
     
    for a in range(0,256):
        bus.write_byte(0x39,a)
        time.sleep(0.1)
    Leider erhalte ich aber immer einen IO-Fehler den ich nicht nachvollziehen kann:


    Klicke auf die Grafik für eine größere Ansicht

Name:	<a href=I2C detect.GIF Hits: 13 Größe: 2,9 KB ID: 27784" class="thumbnail" style="float:CONFIG" />

    Klicke auf die Grafik für eine größere Ansicht

Name:	<a href=I2C python.GIF Hits: 12 Größe: 25,7 KB ID: 27785" class="thumbnail" style="float:CONFIG" />

    Was für einen Denkfehler mache ich?


    ********************************
    Habe den Fehler gefunden!
    bei der Revision 2 der B Veriante des Rapberry Pi mus der Code so lauten:

    Code:
    import smbus
    import time
     
    bus = smbus.SMBus(1)
     
    for a in range(0,256):
        bus.write_byte(0x39,a)
        time.sleep(0.1)
    Geändert von Duesentrieb (15.03.2014 um 15:33 Uhr)

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Genau
    Wobei du auch den Bus 0 hast. Der Fehler kam daher, weil am Bus 0 kein Device mit der Adresse angeschlossen ist.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    51
    Beiträge
    128
    Hi,
    jetzt habe ich aber gleich noch eine Frage die du mir sicher ganz schnell beantworten kannst

    Mit der Angabe einer Dezimalzahl werde ich nicht sehr weit kommen wenn ich die Ports einzel ansprechen möchte.
    Gibt es eine einfacher Möglichkeit, einen Port zu aktivieren/deaktivieren ohne die anderen zu verändern?

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Hey,

    ja, du musst die Ports einlesen und dann den Wert verändern.
    Beispiel:
    Bei deinem PCF sind die Pins 0, 1 und 2 gesetzt. Jetzt willst du Pin 3 mit setzen, also ließt du den Wert ein und bekommst dann als Ergebnis 0x07 (0000 0111).
    Zu diesem Ergebnis addierst du jetzt 2^3, also 8. Dabei steht die 3 für den Pin den du schalten willst. Das Ergebnis der Rechnung ist 0x0F (0000 1111) und das sendest du wieder an den PCF zurück.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    51
    Beiträge
    128
    Hallo Kampi,

    das ist ja ein ganz schöner Rechenaufwand.
    Ich mache mir jetzt gerade Gedanken um die Eingabe.
    Muss das wirklich so aufwendig sein...
    Code:
    import smbus
    from time import sleep
    bus = smbus.SMBus(1)
    
    Adresse = [1, 2, 4, 8, 16, 32, 64, 128]
    
    def main():
        try:
            while True:
                    for n in Adresse:
                        impuls1 = bus.read_byte_data(0x3a, n)
                        if impuls1 < 1:
                                if n == 1:
                                    if Taster1 == 1:
                                        Taster1 = 0
                                    else:
                                        Taster1 = 1
                                        
                                elif n == 2:
                                    if Taster2 == 1:
                                        Taster2 = 0
                                    else:
                                        Taster2 = 1
                                            
                                elif n == 4:
                                    if Taster3 == 1:
                                        Taster3 = 0
                                    else:
                                        Taster3 = 1
    Ich möchte insgesamt 16 Taster einlesen und 16 Relais ansteuern.
    Auch weis ich im Moment nochnicht wie ich einen dauerhaften Kontakt behandeln muss.

    Hast du noch ein oder zwei Tips für mich?

  8. #8
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Hey,

    wie ist den was beschaltet? In deiner if-Abfrage stehen Taster drin, aber was sind das für welche?
    Generell verstehe ich auch den Sinn deiner for-Schleife nicht....
    Probier es mal so:

    Code:
    import smbus
    bus = smbus.SMBus(1)
    Status = bus.read_byte(0x39)
    
    if(Status == 1):
        print "Pin 1 High"
    else:
        print "Pin 1 Low"
    if(Status == 2):
    .
    .
    .
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    51
    Beiträge
    128
    Hallo,
    und wieder vielen Dank! Ich saß gestern den ganzen Tag drann und habe rumgespielt und ausprobiert. Irgend wann sieht man aber den Wald vor Bäumen nicht mehr und dann kommt so etwas raus.

    Na dann mal weiter, jetzt wo ich wieder auf dem rechten Weg bin

  10. #10
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von Duesentrieb Beitrag anzeigen
    Hallo,
    und wieder vielen Dank! Ich saß gestern den ganzen Tag drann und habe rumgespielt und ausprobiert. Irgend wann sieht man aber den Wald vor Bäumen nicht mehr und dann kommt so etwas raus.

    Na dann mal weiter, jetzt wo ich wieder auf dem rechten Weg bin
    Ja das passiert schon mal
    Fang erst einmal klein an und probier das Prinzip aus....wenn du verstanden hast wie es geht wende das Prinzip auf deine Lösung an (wobei der Codeschnipsel den ich dir geschickt habe nicht wirklich getestet wurde...also nicht wundern, falls er nicht 100%ig funktioniert )
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. [ERLEDIGT] GPIO Pins über Python Programieren
    Von avus17 im Forum Raspberry Pi
    Antworten: 17
    Letzter Beitrag: 07.02.2013, 15:22
  2. Antworten: 11
    Letzter Beitrag: 31.10.2012, 23:23
  3. [ERLEDIGT] RP6 über Seriellen Port mit Python connecten
    Von johannes_b im Forum Robby RP6
    Antworten: 11
    Letzter Beitrag: 16.01.2012, 16:15
  4. Antworten: 3
    Letzter Beitrag: 29.10.2008, 15:21
  5. Roboter von PC aus steuern (mit Python)
    Von bmler07 im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 4
    Letzter Beitrag: 08.06.2007, 12:50

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen