Hallo zusammen,
ich bin zur Zeit dabei, eine Schaltung für ein belebtes Haus mit dem Arduino zu realisieren. Das Haus ist mit den LED-Hausbeleuchtungsplatinen von Viessmann versehen. Diese Platinen sind für eine Spannung von 10-16V ausgelegt. Daher kann ich sie nicht direkt über den Arduino ansteuern. Ausserdem habe ich im Haus 22 Platinen verbaut, so dass mir die Ausgänge des Arduinos auch nicht reichen würden.
Daher habe ich folgendes Vorgehen geplant:
- * Erweiterung der Ausgänge des Arduinos mit 3 8-bit Schieberegister
- * Betrieb der Schieberegister mit 15V DC und Trennung von der Steuerung des Arduinos durch Optokoppler
Herausgekommen ist folgender Schaltplan:
An die Emitterausgänge der Optokoppler habe ich 10kOhm Pulldownwiderstände angeschlossen. Die Schieberegister sind MOS4094 (siehe hier), die Optokoppler sind vom Typ 4N35 (siehe hier).
Die einzelnen Komponenten arbeiten einwandfrei. Das Schieberegister steuert LEDs auf dem Steckbrett korrekt an, die Optokoppler schalten wie geplant. In Kombination ist das Ergebnis nicht das Gewünschte. Es leuchten zwar einzelne Fenster, aber mit jedem neuen Schreiben in das Schieberegister ändern sich die beleuchteten Fenster, obwohl der geschriebene Wert immer der gleich ist. Nach einer Weile wiederholt sich dann das Muster, d.h. das Anfangsmuster erscheint wieder.
Folgenden Code verwende ich für die Tests:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int latchPin = 7;
int clockPin = 12;
int dataPin = 2;
long data = 0B110100110101001101001111;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop()
{
digitalWrite(latchPin, LOW);
digitalWrite(clockPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data >> 16);
digitalWrite(clockPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data >> 8);
digitalWrite(clockPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data);
digitalWrite(latchPin, HIGH);
delay(500);
}
Auch das manuelle Schreiben in das Schieberegister anstelle von shiftOut löst das Problem nicht. Ich hatte hier sogar Delays eingebaut, ohne Erfolg.
Woran könnte das komische Verhalten liegen und wie kann ich es beheben?
Viele Grüße
Uli