PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PCF8574 einzelne I/O Pins ansteuern



DarkSoldier
22.11.2012, 15:02
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

Kampi
22.11.2012, 15:44
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:



'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 :)

DarkSoldier
22.11.2012, 15:59
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

Kampi
22.11.2012, 16:36
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

DarkSoldier
22.11.2012, 20:04
Achsoo geht das ^^ Danke ;)