- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: PCF8574 einzelne I/O Pins ansteuern

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    23.05.2011
    Beiträge
    55

    PCF8574 einzelne I/O Pins ansteuern

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,
    ich habe das RNFBRA Board. Nun möchte ich mal die Programmierung der
    PCF8574AP s in Angriff nehmen. Ich möchte an die Pins 3 und 4 von PCF 3 je einen Taster anschliessen.
    Nun möchte ich die Taster natürlich einzeln auslesen können.

    Wie kann ich das machen? Ich kenne mich leider mit I2C programmierung absolut nicht aus. Mein Programm möchte ich letztendlich in Bascom schreiben.

    Im Internet habe ich leider nichts zu meinem Problem gefunden.

    Danke im Vorraus,

    DarkSoldier

  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,

    schau mal hier:

    http://kampis-elektroecke.de/?page_id=421
    Da findest du ein Programm um eine LED blinken zu lassen.
    Wenn du nun einen Pin nicht schalten, sondern abfragen willst, musst du nur den Schreibbefehl für die Daten durch einen Lesebefehl + NACK ersetzen.

    Edit:
    Ich habe auch noch ein Leseprogramm auf dem Rechner gehabt:

    Code:
    'Mikrocontroller
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 19200
    
    
    'Stacks
    $hwstack = 200
    $swstack = 200
    $framesize = 400
    
    
    'TWI konfigurieren
    Config Sda = Portc.1
    Config Scl = Portc.0
    Config Twi = 100000                                         'TWI Frequenz
    
    
    'Adresse des PCF
    Const Pcf8574w = &H40
    Const Pcf8574r = &H41
    
    
    Dim Bitmuster As Byte
    Bitmuster = 0
    
    
    'I²C initialisieren
    I2cinit
    
    
    Do
    
    
    I2cstart                                                    'TWI Startkondition
    I2cwbyte Pcf8574r
    I2crbyte Bitmuster , Ack
    I2cstop
    
    
    Print "Wert: " ; Bitmuster     
    
    
    Wait 1
    
    
    Loop
    End
    Du kannst es dir ja mal anschauen.
    Falls du Fragen hast immer her damit
    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
    Benutzer Stammmitglied
    Registriert seit
    23.05.2011
    Beiträge
    55
    Hallo,
    danke für deine Antwort ich werde es mir nun mal durchlesen.

    Hoffe dass ich das verstehe


    darksoldier

    - - - Aktualisiert - - -

    Hallo,
    noch mal ne kurze frage
    be dem READ-Programm dass du mir geschickt hast werden doch alle werte des PCFS ausgelesen oder nicht?

    Und wenn nein, an welcher stelle kann ich auswählen welcher pin ausgelesen wird.

    Weil ich möchte ja nur jeweils 1 einzelnen pin auslesen
    danke im vorraus
    darksoldier

  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
    Hey,

    der PCF speichert den Status der Pins in einem Register. Wenn du ihn ausließt, ließt du das komplette Register, sprich alle 8 I/O Pins.
    Wenn du nun den Status eines Pins herausfinden willst musst du das per Bitshift machen.
    Zum Beispiel so:

    Status von IO 0:
    Wenn der Pin auf High liegt und der Rest auf Low, gibt der PCF 0000 0001 (Dezimal 1) zurück
    Dann kannst du z.B. eine Select Case-Abfrage machen:

    Select Case Bitmuster:
    Case 1: Print "Pin 1 auf High"
    Case 2: Print "Pin 2 auf High"
    End Case

    Wenn du nun mehrere Pins auf High hast, z.B. so 0000 0101, kannst du einen Pin herausfiltern. Entweder shiftest du das Bitmuster um zwei Stellen nach rechts, dann sieht es so aus 0000 0001 und anschließend kannst du abfragen

    If Bitmuster = 1 then
    Print "Pin 3 High"
    End If

    Oder du verundest den Spaß mit 4 (0000 0100). Das sieht dann so aus:

    Bitmuster = &b0000 0101
    Bitmuster = Bitmuster AND &b0000 0100

    Als Resultat erhältst du dann:

    Bitmuster = &b0000 0100 (da ja die beiden Werte jeweils "1" sind und somit die UND-Bedingung erfüllt ist)

    Und dann kannst du Abfragen:

    If Bitmuster = 4 then
    Print "Pin 3 High"
    End if
    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

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    23.05.2011
    Beiträge
    55
    Achsoo geht das ^^ Danke

Ähnliche Themen

  1. Atmega16, PortC=Ausgang: einzelne Pins schalten nicht auf 0
    Von Dolfo im Forum AVR Hardwarethemen
    Antworten: 7
    Letzter Beitrag: 27.12.2009, 12:54
  2. Buchsen die man auf einzelne Pins von 2,54mm Steckerleisten.
    Von petermetertr im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 5
    Letzter Beitrag: 24.08.2009, 10:24
  3. Mehrere einzelne Pins mit if-Anweisung abfragen???
    Von Taishifu im Forum Software, Algorithmen und KI
    Antworten: 0
    Letzter Beitrag: 07.01.2008, 20:44
  4. Stecker/Steckhülse für einzelne Pins
    Von gothmog im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 12.12.2006, 19:03
  5. A/D-Port: EInzelne Pins aus- und einschalten...
    Von tobimc im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 03.07.2004, 15:15

Stichworte

Berechtigungen

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

12V Akku bauen