PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "PCF 8574 P" Problem bei Verwendung als Input



fitec
26.02.2009, 13:06
Hallo,
ich benutze den "PCF 8574 P" (von reichelt) eigentlich schon länger erfolgreich um mehr digitale Ausgänge zu bekommen.
Wenn ich dessen I/O Pins aber als digitale Eingänge nutzen möchte klappt das nicht. Ich nutze Bascom.
Das hier ist mein Unterprogramm zum lesen.


Function Pcfread(byval Adress As Byte) As Byte
Local Zustand2 As Byte
I2cstart
I2cwbyte Adress
I2crbyte Zustand2
I2cstop
Pcfread = Zustand2
End Function

Nun zur Hardware (habe den Verdacht es liegt vielleicht daran).
Ich möchte 4 Taster abfragen.
Dazu habe ich folgende Schaltung:

http://cw5yfw.blu.livefilestore.com/y1pODEKQZ8wILgsxDl_scY2N73CQ2RvnVM7Fk9VOjNvWh0YK0M 38-8VnNQ9h0_Cny3xHwSRipzi0SVk4GjWgMIxCg/Tasterinput.tif

Und noch eine Frage. Muss ich bevor ich die I/O Pins lese erst mal alle I/O Pins &HFF setzen?
Danke im Vorraus.

Gruß Nils

Neutro
26.02.2009, 17:28
Dieser Code sollte klappen:

'Make all Pcf8574 pins high -> input
I2cstart
I2cwbyte Pcf8574write
I2cwbyte 255
I2cstop

Do
'Read Pcf8574 port
I2cstart
I2cwbyte Pcf8574read
I2crbyte Pcf8574port , Nack
I2cstop
'Determine state of Switchbit bit
If Pcf8574port.switchbit = 1 Then
Ledwait = Shortwait
Else
Ledwait = Longwait
End If

Set Portd.6
Waitms Ledwait
Reset Portd.6
Waitms Ledwait
Loop


Es sollte aber reichen wenn nur der Port der auch abgefragt werden soll
auf High gesetzt wird. switchbit 1 bedeutet den Zustand des Bit 0 des PCF Port. Man kann also als Eingang nur eine 0 abfragen.

Ich hoffe ich konnte dir damit weiterhelfen

Gruß

Neutro

fitec
26.02.2009, 20:19
Hallo,
danke für die Antwort. Ich werde morgen (sitze grade am Fernseher ;-)) den Code probieren. Ein Frage: Was bedeutet "Nack"?
Noch eine Frage, die read Adresse ist immer writeadresse+1 oder?

Gruß Nils

Jon
26.02.2009, 20:31
Noch eine Frage, die read Adresse ist immer writeadresse+1 oder?
Kurze Antwort: ja!

jon

repi64
03.03.2009, 21:40
den pcf8574 kannst du auch noch einfacher mit dem Befehl
I2CRECEIVE ohne I2C Start und Stop ansprechen.
Ein Blick in die Help kann diesbezüglich sehr informativ sein.