Pages: [1]   Go Down
Author Topic: Anleitung: PCF8574 als I2C-Input am Arduino  (Read 4168 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Diese Anleitung dient dazu, die I2C-Kommunikation zwischen dem Arduino-Board und dem Port-Extension-Baustein PCF8574 zu demonstrieren. Der Code fragt drei Taster ab, die als Input am PCF8574 hängen. Je nachdem welche Taste gedrückt wird, leuchtet die rote, gelbe oder grüne LED, welche über das Standardverfahren zum Leuchten gebracht werden.  Anbei findet ihr den Schaltplan, ein Fritzing-Diagramm und den Code. Viel Erfolg mit Euren PCF8074-Experimenten!

Bernie007 grüßt

Code:
/* Programm zur Demonstration des Zusammenspiels zwischen Arduino und PCF8574
=============================================================================

Sinn des Codes:
==============
Auf einem Breadboard stecken drei Taster. Mittels dieser Taster sollen drei LEDs angesteuert werden. Prinzipiell ist das natürlich ohne den Erweiterungsbaustein PCF8574 möglich.
Freilich soll die Schaltung die Verwendung von I2C im Zusammenspiel zwischen dem Arduino und dem Baustein PCF8574 demonstrieren. So hängen die Taster am Erweiterungsbaustein,
während die LEDs wie üblich über das Arduino aus- und eingeschaltet werden.


Schaltplan:
===========
Arduino-Verbindungen mit LEDs:
------------------------------
Arduino-Pin 2: eine rote LED mit einem Vorwiderstand von 330 Ohm->GND
Arduino-Pin 3: eine gelbe LED mit einem Vorwiderstand von 330 Ohm->GND
Arduino-Pin 4: eine grüne LED mit einem Vorwiderstand von 330 Ohm->GND


Arduino-Verbindungen mit PCF8574:
---------------------------------
Arduino-Pin A4: vorgeschriebene SDA-Verbindung zum PCF8574, Pin 15=SDA
Arduino-Pin A5: vorgeschriebene SCL-Verbindung zum PCF8574, Pin 14=SCL
Arduino-Pin GND: vorgeschriebene GND-Verbindung zum PCF8574, Pin 8
Arduino-Pin 5V: vorgeschriebene 5V-Verbindung zum PCF8574, Pin 16

Verbindungen des PCF8574 zur Festlegung der Adresse und der Inputs (Taster):
---------------------------------------------------------------------------
Zunächst wird die Adresse des Porterweiterungsbausteins PCF 8574 definiert, und zwar mittels der Pins 1-3:
PCF8574, Pin1->GND
PCF8574, Pin2->GND
PCF8574, Pin3->GND
Zur Verwendung mehrerer PCF8574 kann man die Adresse natürlich ändern. Wichtig ist nur, dass jeder Baustein seine eigene Adresse hat.

PCF8574, Pin4=Pin P0->Taster 1->GND
PCF8574, Pin4=Pin P1->Taster 2->GND
PCF8574, Pin4=Pin P2->Taster 3-GND
*/

#include <Wire.h>
#define PCF8574 0x20

int ledPinRot=2;
int ledPinGelb=3;
int ledPinGruen=4;
boolean datenkomm=true;  //Das ist ein Mist. Keine Klassen in der Arduino IDE!

//Funktion zum Schreiben auf einen PCF8574-Baustein
void PCF8574_Write(int adresse, byte daten) {
  Wire.beginTransmission(adresse);
  Wire.write(daten);
  Wire.endTransmission();
  delay(5);
}

//Funktion zum Lesen des PCF8574-Bausteins
byte PCF8574_Read(int adresse) {
  byte datenByte=0xff;
  Wire.requestFrom(adresse,1);
  if(Wire.available()){
    datenByte=Wire.read();
    datenkomm=true;
    }
  else {
    datenkomm=false;
  }
  return datenByte;
}

void setup(){
  pinMode(ledPinRot, OUTPUT);
  pinMode(ledPinGelb, OUTPUT);
  pinMode(ledPinGruen, OUTPUT);
 
  //Alle Lampen aus: JA, genau so!!! HIGH heißt aus, LOW ist an! Das liegt am PCF8474
  digitalWrite(ledPinRot,HIGH); 
  digitalWrite(ledPinGelb,HIGH);
  digitalWrite(ledPinGruen,HIGH);
 
  Wire.begin();
  Serial.begin(9600);
  PCF8574_Write(PCF8574,0xff);
  }
 
void loop() {
  byte daten;
  daten=PCF8574_Read(PCF8574);
  if (datenkomm) {
    if(bitRead(daten,0))
      digitalWrite(ledPinRot,LOW);
    else
      digitalWrite(ledPinRot,HIGH);
     
    if(bitRead(daten,1))
      digitalWrite(ledPinGelb,LOW);
    else
      digitalWrite(ledPinGelb,HIGH); 
     
    if(bitRead(daten,2))
      digitalWrite(ledPinGruen,LOW);
    else
      digitalWrite(ledPinGruen,HIGH);
     
    delay(1000);
    }
}





* Arduino mit PCF8574-Input.jpg (160.58 KB, 1034x762 - viewed 983 times.)
Logged

Pages: [1]   Go Up
Jump to: