Forum: Mikrocontroller und Digitale Elektronik CD4015 Schieberegister aneinanderreihen


von Moritz T. (ferb300)


Angehängte Dateien:

Lesenswert?

Hi :)
Vor nicht allzu langer Zeit hab ich mir beim 
Wucherpreis-Elektronikhändler meines Vertrauens dieses Schieberegister 
geleistet: CD4015B. Mit 3 davon würde ich gerne meinen Arduino um 24 
Output Pins erweitern (22 wenn man die verbrauchten Pins abzieht). Mein 
Aufbau ist simpel: Jedes Schieberegister kriegt Spannung und Erdung und 
alle Resetpins sind mit Minus verbunden. Alle Clockpins hängen gemeinsam 
an einem Arduino-Digitalpin. Data A vom ersten Register ist mit einem 
Digitalpin des Arduinos verbunden. Danach hab ich immer den letzen 
Outputpin eines Registers mit dem Datapin des nächsten verbunden. Also 
Q4 A mit Data B am ersten IC; Q4 B vom ersten IC mit Data A vom zweiten 
IC und so weiter. Wenn ich jz mit einem simplen Arduino-Sketch versuche, 
24 High-bits in den Aufbau zu shiften, wird zwar das erste Register ganz 
voll (A und B bereich), danach bleiben alle anderen ICs völlig leer. Ich 
hatte Angst, die Bauteile wären evtl kaputt, also hab ich anstelle des 
ersten ICs eines der baugleichen anderen verwendet und kam zum gleichen 
Ergebnis. Im Datenblatt steht auch, dass sich die Bauteile eignen, um 
auf über 8 bits erweitert zu werden. Meine Breadboard Verkabelung hab 
ich jz schon mehrmals überprüft und ich kann keinen Fehler finden.
Hat jemand hier vllt eine Idee, was mein Problem sein könnte?
Danke für eure Hilfe :)

Link zum Datenblatt:
https://asset.conrad.com/media10/add/160267/c1/-/de/000172715DS01/datenblatt-172715-cd4015be-logik-ic-schieberegister-push-pull-schieberegister-pdip-16.pdf

EDIT: Schaltplan angehängt

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Moritz T. schrieb:
> EDIT: Schaltplan angehängt

Programm (.c, .ino) anhängen wäre auch ne prima Idee.

von Jochen S. (schoenf)


Lesenswert?

Hallo, Moritz!

Deinen Arduino so zu erweitern, müsste zwar funktionieren, ist aber 
nicht sehr elegant. Denn die Schieberegister haben kein Latch, mit dem 
die reingeschobenen Daten synchron auf Ausgänge gegeben werden. Alle 
angeschlossene Peripherie kriegt also die durchgeschobenen Nullen und 
Einsen mit. Wenn es sich "nur" um LEDs handelt, die du leuchten lassen 
willst, ist es relativ unkritisch, weil das menschliche Auge das nicht 
bemerken wird, wenn es schnell genug passiert. Willst du aber mehr damit 
machen, solltest du über einen Portexpander nachdenken. Via SPI oder I²C 
gibt es gute und günstige, z. B. von Microchip, die sich für solche 
Zwecke eignen.

Wenn dein Anspruch jetzt eher akademisch ist, würde ich mal ganz langsam 
takten, so mit 1 Hz etwa, und schauen, ob die erste Eins nach vier 
Takten auch auf Q4A ankommt und nach acht Takten auf Q4B zu sehen ist 
UND auf DATA/A vom nächsten IC anliegt. (Nach deiner Beschreibung 
funktioniert das erste Byte ja.) Dann muss sie eigentlich mit dem 
nächsten Takt auch auf Q1A ausgegeben werden.

Viele Grüße

Jochen

von Jochen S. (schoenf)


Lesenswert?

Im Übrigen würde ich den Fehler, falls ein IC defekt ist, dann eher beim 
zweiten Schieberegister vermuten, nicht beim ersten. Wenn U3 ja alles 
durchschiebt, wäre U2 eine mögliche Fehlerquelle und ein Tausch 
sinnvoller gewesen. Aber du wirst dich schon rantasten. Die ganze Logik 
kannst du ja so langsam bedienen, dass du alle Pins in Ruhe mit dem 
Multimeter durchklingeln kannst.

von Michael B. (laberkopp)


Lesenswert?

Moritz T. schrieb:
> Hat jemand hier vllt eine Idee, was mein Problem sein könnte

Schaltplan sollte funktionieren, hast du Abblockkondensatoren verbaut 
und hängt an den Ausgängen schon was dran (wie eine LED oder so ?)


Tip das ganze langsam mit 1 Hz durchzutakten und LED über mindestens 1k 
Widerstände anzuschliessen ist klug.

von Moritz T. (ferb300)


Lesenswert?

Danke für die ganzen Antworten!
Dass die Register keinen Latch haben wusste ich schon und das ist für 
meine Anwendung auch relativ unkritisch :)
Das mit dem Testen durch umsetzen der ICs hab ich bisschen schlecht 
formuliert, ich hab natürlich die Bauteile getauscht und jedes einzelne 
an erster stelle probiert (und die selben jweils an den anderen stellen)
Den Sketch hänge ich auch gleich an, ist aber nichts spektakuläres.
Danke auf jeden Fall für eure Hilfe und dass ihr mir die Korrektheit des 
Schaltplans bestätigen konntet. Ich denke, ich werde es einfach mit dem 
Vorschlag von schoenf versuchen, also langsam bits einclocken und 
schauen, wo genau das problem liegen könnte.

von Moritz T. (ferb300)


Angehängte Dateien:

Lesenswert?

Hier der Arduino Sketch

von Jochen S. (schoenf)


Lesenswert?

Moritz T. schrieb:
> Hier der Arduino Sketch

Da haben wir das Problem doch schon: "Shifts out a byte of data one bit 
at a time." sagt die Doku zu shiftOut.

Musst du also dreimal aufrufen für drei Bytes.

Viele Grüße

Jochen

von Moritz T. (ferb300)


Lesenswert?

Oh well ._.
Naja, wer lesen kann ist eben klar im Vorteil...
Jetzt hat es auf jeden Fall geklappt, vielen Dank euch allen :)

von Gustl B. (gustl_b)


Lesenswert?

Dann erwähne ich noch den SN74LS595, der hat 8 Bits am Stück und ein 
Latch.

von Crazy Harry (crazy_h)


Lesenswert?

Dann erwähne ich den TCA6424. Kein Schieberegister, aber ein 
I2C-Portexpander mit gleich 24 Bit. Oder den PCA9539 oder PCA9555 mit 16 
Bit, die sogar als Ein- oder Ausgänge verwendet werden können.

von Olaf (Gast)


Lesenswert?

Wo ihr schonmal am erwaehnen seit, ueblicherweise hat man dafuer
immer den CD4094 genommen weil der ein Latch hat.

Olaf

von Otto (Gast)


Lesenswert?

Oder 74hc595...

Heute auch komplett mit Code:

https://www.makerblog.at/2015/01/das-schieberegister-74hc595-am-arduino/

von Helmut -. (dc3yc)


Lesenswert?

Moritz T. schrieb:
> um 24
> Output Pins erweitern (22 wenn man die verbrauchten Pins abzieht).

Die beiden Pins sind nicht "verbraucht", die kannst du auch noch als 
Ausgänge nutzen! Dann hängen halt zwei Verbraucher an einem Ausgang.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.