Arduino 74hc595 shift register

Hallo ich hätte gerne ne frage.
Ich habe ein Arduino UNO R3 und ich wolte mehr Pins haben.
Also habe ich mir Schiebe Registern (74hc595) gekauft.
Es hat alles funktioniert wir ich wollte.

Ich möchte aber in meinem Projekts die Pins vom Shiebe Register auch mit digitalWrite(); benutzen können
z.b. digitalWrite(23, HIGH);

Könnte mir jemand bitte helfen?

Ein 1 bis 8 MUX / DEMUX (zum Beispiel 74LS138 oder SN74CBT3251) könnte für das, was Sie tun möchten, besser geeignet sein.

hi,

mit digitalWrite wird’s schwieriger, aber wenn Dir ein mydigitalWrite genügt, dann schreib’ Dir eine solche funktion, die alles pinnummern für den arduino mit dem originalen digitalwrite bedient, und für alle darüber die programmierung für den 595er übernimmt.

soll es wirklich das wörtliche digitalWrite sein, muß Du diese funktion in der arduino-library umschreiben.

dann wär’s am besten, wenn Du diese library ins sketch-verzeichnis kopierst, dort änderst und mit " " statt mit < > einbindest.

gruß stefan

Evtl. wäre für deine Anwendung auch ein I2C-Portexpander geeignet.
Für den MCP23017 gibt es auch eine fertige Library.

Der 74HC595 wie auch der 74HC164 sind serial zu paralell Schieberegister (SIPO) und kann darum nur als 8 fach Ausgang verwendert werden.
Für Eingänge braucht es ein paralell zu serial Schiebregister (PISO) wie zB den 74HC165.

sherzaad:
Ein 1 bis 8 MUX / DEMUX (zum Beispiel 74LS138 oder SN74CBT3251) könnte für das, was Sie tun möchten, besser geeignet sein.

Ein Multiplexer ist als Ausgänge nicht geeignet weil immer nur 1 Pin mit dem gemeinsamen Pin verbunden ist und die restlichen Pins in der Luft hängen.

Grüße Uwe

Ausserdem muss auch jemand wissen, wo/wie du deine Schieberegister angeschlossen hast.

z.B. so:

Shiftregister r1(9, 10, 11); // Latch / Clock / Data Pins


void setup() {
   r1.init(24); // 3 verkettete Schieberegister, alle Bit auf 0 setzen
}
void loop() {
   r1.write(0, (millis() >> 9) & 1); // blink ca. 1 Hz, ohne mühsame Division 
   r1.write(1, HIGH);
   r1.write(2, (millis() / 500) & 1); // blink, ziemlich genau 1 Hz
}

Evtl. ist es besser, eine eigene Methode r1.update() für alle n*8 Bit zu erfinden.
So kommst du immer weiter von deinem digitalWrite - Ansatz weg ...

Ich werde es mal versuchen mit der Methode r1.init();

Vergiss nicht, dir zuerst eine Klasse namens Schiftregister zu schreiben. :wink:

Sowas gibt es schon fertig.
>kuste hier<
oder
>HIER<
und
>HIER<

Gruß
DerDani

Da fehlt als Basis erst mal der Link zur Lib, es gibt mehrere mit dem gleichen Namen.

Gruß Tommy

Das ist kein Link, das ist eine URL. Deine Angabe können Leser mit mobilen Geräten nicht öffnen.

Das ist ein Link.

Gruß Tommy