Archiv verlassen und diese Seite im Standarddesign anzeigen : PCF8574 einzelne I/O Pins ansteuern
DarkSoldier
22.11.2012, 16: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
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, 16: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
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, 21:04
Achsoo geht das ^^ Danke ;)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.