Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

08 Multiplexing

Multiplexing

Da das Arduino nur 6 analoge Eingänge bereithält kann es sehr schnell passieren, dass uns diese Pins ausgehen. In diesem Fall bietet das sog. Multiplexing eine Möglichkeit für weitere Eingänge zu sorgen. Ein Multiplexer arbeitet so ähnlich wie das schon besprochene ShiftRegister. Mit Hilfe von 3 Digitalen Pins werden die Eingänge des Multiplexers dabei so geschalten, dass immer nur einer mit dem gemeinsamen Output verbunden ist. So können wir mit nur einem einzigen analogen Eingang acht weitere einlesen. In diesem Tutorial verwenden wir dazu ein 8-Kanal analog Multiplexer von NXP (Typ: HEF4051).

8-Kanal Multiplexer HEF4051

Das Datenblatt gibt Aufschluss über die Pinbelegung des IC's ... Datenblatt: HEF4051 Vdd = 5V (Spannungsversorgung) Vss = GND (Ground) Vee = GND (Negative Spannungsversorgung) E = GND (Enable Pin Aktiv == LOW) Z = A0 (Gemeinsamer Output) S1..S3 = D4..D6 (Input Auswahl) Y0..Y7 = Inputs (Unabhängige Inputs)

Schaltung

Um den HEF4051 an das Arduino anzuschliessen verbinden wir zunächst die Spannungsversorgung (Vcc und Vss), danach die negative Spannungsversorgung (Vee) und den Enable-Pin (E). Dann verbinden wir den gemeinsamen Output (Z) mit einem der analogen Eingänge des Arduino (in diesem Fall A0). Zuletzt verbinden wir die Auswahl-Pins (S1..S3) mit drei digitalen Ausgängen des Arduino (D4..D6). Die linke Darstellung zeigt diese Schaltung. Auf der rechten Seite sieht man die unabhängigen Inputs...

Code

Um zu sehen, wie wir die Auswahl-Pins schalten müssen um die unabhängigen Inputs abzurufen hilft ein weiterer Blick in das Datenblatt... Werden z.B. S1, S2 und S3 gleichzeitig auf LOW geschaltet, so ist der Eingang Y0 ausgewählt. Hingegen wählt man z.B. Eingang Y5 über die Kombination: S1 = HIGH, S2 = LOW, S3 = HIGH usw.
#define S1 6 // Auswahl-Pins
#define S2 5
#define S3 4

#define COMMON_OUTPUT A0 // Gemeinsamer Output an A0

int inputSelect[][] = // Dieses Array speichert die Schalt-Tabelle
{
  {0,0,0},
  {1,0,0},
  {0,1,0},
  {1,1,0},
  {0,0,1},
  {1,0,1},
  {0,1,1},
  {1,1,1},
};

int reading = 0; // Hier werden die Werte gespeichert

void setup()
{
  pinMode(S1, OUTPUT); // Auswahl Pins als OUTPUT setzen
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  
  Serial.begin(9600); // Serielle Kommunikation starten
}

void loop()
{
  for(int i=0; i<8; i++) // Alle Pins nacheinander lesen
  {
    digitalWrite(S1, inputSelect[i][0]); // Auswahl setzen
    digitalWrite(S2, inputSelect[i][1]);
    digitalWrite(S3, inputSelect[i][2]);
    
    reading = analogRead(COMMON_OUTPUT); // Wert abholen und speichern
    
    Serial.println(reading); // Wert über serielle Schnittstelle ausgeben
  }
}

Weitere Informationen

HEF4051 auf dem Arduino Playground