Arduino NANO: Torbaustein PCF8574 |
![]() ![]() |
|
![]() |
Schaltungsdiagramm
für den Torbaustein PCF 8574 am I2C-Bus des NANO-Boards
Der
I2C-Baustein PCF8574 besitzt 8 Stück digitale Torausgänge
mit offenem Kollektor. Von diesen kann jeder bei entsprechender
Beschaltung als Eingang oder Ausgang benutzt werden. Eine
mögliche Beschaltung der Pins zu Testzwecken, als Ausgang
bzw, Eingang ist dem obigen Bild zu entnehmen. Alternativen
beschreibt das Datenblatt.
Datenblatt
des PCF8574
|
Programm PCF8574,
digitale Torbits setzen und lesen
/*
Erweiterungstorbaustein
PCF8574
===============================
Nach
dem Einschalten des PCF8574 führen die Pins P0-P1 ein
hochohmiges 1-Signal. Bei der im Bild gezeigten
Test-Beschaltung
muß vom Programm sichergestellt werden, dass die
Eingangspins ein 1-Signal ausgeben. Dieses kann vom Taster auf 0
gezogen werden, was auch die Leuchtdioden anzeigen.
*/
#include <Wire.h> // Einbinden der Wire-Bibliothek des Arduino byte I2CadrTORa = 0x20; // Basisadresse des Torbausteins PCF8574,A0=A1=A2=GND => TorA // je nach Beschaltung von A0-A2 sind noch die Adressen 0x21-0x27 // möglich. byte maskeIN = B11110000; // Die Maske bewirkt, dass die Anschlusspins P0-P1 Eingänge sind // P4-P7 sind Ausgänge, die anfänglich auf 0 gesetzt sind. // einmalig: Startbedingungen des Programms einstellen // --------------------------------------------------- void setup() { Wire.begin(); Wire.setClock (100000L); // I2C- Bus mit 100kHz writeTOR(I2CadrTORa, maskeIN); // siehe maskeIN } // dauerhafte Schleife, in welcher das Tor des PCF8574 // gelesen und beschrieben wird // --------------------------------------------------- void loop() { byte torA; // delay bewirkt aus bisher ungeklärten Gründen, trotz // der unmittelbaren Lese/Schreibaktion den angegebenen // Verzug zwischen der Ein- und der Ausgabe // delay(2000); torA =readTOR (I2CadrTORa); // die Maske bewirkt, dass die Eingange bei // der Ausgabe weiterhin auf 1 gesetzt bleiben. writeTOR (I2CadrTORa, maskeIN+(torA>>4)); } // liest das Tor mit der I2C-Adresse 'I2Cadr' // und gibt dessen Wert 'torByte' zurück // ------------------------------------------ byte readTOR(byte I2Cadr){ byte torByte; Wire.beginTransmission (I2Cadr); Wire.requestFrom (I2Cadr, 1); // Master will 1 Byte Daten vom Slave lesen if (Wire.available ()) { // .. wenn die Daten verfügbar sind torByte = Wire.read(); // .. diese lesen } Wire.endTransmission(); return torByte; } // schreibt den angegebenen Wert 'value' // zum Tor mit der I2C-Adresse 'I2Cadr' // ------------------------------------- void writeTOR(byte I2Cadr, byte value){ Wire.beginTransmission (I2Cadr); Wire.write (value); // Ausgabe des Bytes 'value' Wire.endTransmission(); } |
![]() ![]() |