Forum: Mikrocontroller und Digitale Elektronik Shift Register aneinanderreihen


von Philipp B. (citrullin)


Lesenswert?

Ich habe mal eine kleine Frage zu Shift Registern:
Ich moechte mehrere Shift Register aneinander schalten, sodass ich halt 
128 bit oder sogar 512 bit nutzen kann. Das duerfte ja theoretisch kein 
Thema sein. Sind halt dann einfach echt viele Shift Register.

Nun wollte ich aber mal wissen, wie sich das dann mit der Strecke der 
Verbindungen verhaelt.

Der storageClock und shiftClock kommt ja nur von einem Device und wird 
an alle Shift Register uebertragen. Ich denke jetzt nicht, dass das auf 
einer Strecke von 2 Metern schon so relevant ist, wollte aber mal 
fragen, wie man so etwas loest, wenn man laenger Strecken zuruecklegen 
muss.

von Stephan (Gast)


Lesenswert?


von Joe F. (easylife)


Lesenswert?

512 Bit wären 64 Schieberegister.
64 Clock-Eingänge kann ein einzelner IO Pin nicht treiben.
Du brauchst also in jedem Fall Clock Treiber.
Je nach CLK Frequenz würde ich nicht mehr als 4 bis max. 8 Inputs 
zusammenschalten.

2m sind schon nicht wenig. Du musst berücksichtigen, dass die Leitung 
eine Induktivität und Kapazität hat.

Was immer "laengere" Strecke heisst, das Problem wird entsprechend 
größer.
Auch ESD und EMV ist dabei ein Thema.

von HildeK (Gast)


Lesenswert?

Philipp B. schrieb:
> Der storageClock und shiftClock kommt ja nur von einem Device und wird
> an alle Shift Register uebertragen. Ich denke jetzt nicht, dass das auf
> einer Strecke von 2 Metern schon so relevant ist, wollte aber mal
> fragen, wie man so etwas loest, wenn man laenger Strecken zuruecklegen
> muss.

Ja, das ist sehr relevant. Bei solchen Strecken ist eine getrennte 
Taktführung unumgänglich, ebenso wie eine Serienterminierung an der 
Quelle. Es wird dir für eine sichere Funktion nichts anderes 
übrigbleiben, als genau so viele Takte zu übertragen, wie du weit 
voneinander entfernte Bausteine hast. Dabei sollten die Taktleitungen 
geometrisch den selben Weg nehmen wie die Datenleitungen.

Was gehen könnte: der ankommende Takt an einem Schieberegister wird 
durch einen Buffer wieder weitergereicht an die nächste Kette. Dann muss 
man aber darauf achten, dass der Buffer sehr kurze Durchlaufzeiten hat 
oder die Datenleitung muss einige 10cm länger sein als die Taktleitung.


Joe F. schrieb:
> Je nach CLK Frequenz würde ich nicht mehr als 4 bis max. 8 Inputs
> zusammenschalten.

Wenn jede der 4 (oder 8) Eingänge 2m Abstand voneinander haben, geht das 
einfach nicht!

von Stefan F. (Gast)


Lesenswert?

Was willst du denn an die Ausgänge der Schieberegister hängen?

von Stephan (Gast)


Lesenswert?

vermutlich LED. Anzeige oder würfel schätze ich.

von Axel R. (Gast)


Lesenswert?

Ich kann doch erst ein gültiges Datenwort anlegen und DANACH die 
Taktflanke? Wo seh ich denn hier das Problem nicht? Ich muss doch nicht 
zwingend die Daten EXAKT zur steigenden Flanke bereitstellen (oder zur 
fallenden, wei sich grad nicht) Ich kann das 90Grad zueinander 
verschieben?

StromTuner

von Sebastian S. (amateur)


Lesenswert?

Vier Pferdefüße fallen mir dazu ein:
1. Treiber bei so vielen Teilnehmern.
2. Immer alle Stati wiederholen (z.B. 512 Bit) auch wenn sich nur ein
   Bit geändert hat.
3. Entsprechend (?!?) langsam.
4. Geschwindigkeit entsprechend der Leitungslänge.

Aber prinzipiell kein Problem.

Wegen der Verzögerung (512 Bit) sollte Schieberegister mit Latch 
verwendet werden. Die Übernahme braucht allerdings auch einen Treiber.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Axel R. schrieb:
> Ich muss doch nicht zwingend die Daten EXAKT zur steigenden Flanke
> bereitstellen

Nein, Du solltest das sogar nicht tun; die Daten müssen eine gewisse 
Minimalzeit vor der Flanke stabil sein. Im Idealfall kann diese Zeit 
nahezu Null sein, in der Realität aber ist sie es nicht. Im Datenblatt 
wird sie als "setup time" spezifiziert.

Beim 74LS166* beträgt diese Zeit mindestens 20 nsec.

Insofern ist Deine 90°-Phasenverschiebungsidee sehr sinnvoll.


*) 
http://pdf.datasheetcatalog.com/datasheet/on_semiconductor/SN74LS166-D.PDF
Seite 5, Tabelle "AC Setup Requirements", Wert "Data Setup Time"

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Rufus Τ. F. schrieb:
> Insofern ist Deine 90°-Phasenverschiebungsidee sehr sinnvoll.
Man kann auch gleich 180° nehmen, dann ändern sich die Daten mit der 
"inaktiven" (nicht speichernden) Taktflanke.

Beim SPI kann man sich mit der falschen ClockPhase sauber ins Knie 
schießen...

: Bearbeitet durch Moderator
von Christian B. (luckyfu)


Lesenswert?

Lothar M. schrieb:
> Beim SPI kann man sich mit der falschen ClockPhase sauber ins Knie
> schießen...

Wie wahr! hatten wir erst vor kurzem: Den 3 8bit Schieberegistern war 
die Clockflanke egal, die waren schnell genug. Als dann aber ein 
µ-Controller in die Kette kam fehlte plötzlich das erste Bit. (Der 
Controller war dummerweise auch noch der letzte in der Reihe und somit 
der Erste vorm Empfänger, wie es halt immer ist)
Aber wenigstens haben wir so noch einen Fehler in der SPI Routine des 
FPGA gefunden.

von Philipp B. (citrullin)


Lesenswert?

Stephan schrieb:
> vermutlich LED. Anzeige oder würfel schätze ich.

Richtig geraten ;)

von X. X. (chrissu)


Lesenswert?

Die maximale Clk-Frequenz ergibt sich dann dann aus den Laufzeiten aller 
Clockbuffer plus Signallaufzeit in den Leitungen...

Bei 180Grad noch durch / 2

Und, mit SchiebeRegistern mit Latch wird das ganze auch nicht 
synchroner... da Du für die Latches ja auch wieder Treiber verwenden 
musst,
die genauso wie die CLK-Treiber verzögern.

Falls Du die Latches und damit die Ausgänge wirklich synchron Ansteuern 
willst, musst Du von der Mitte her einen schönen Treiberbaum aufbauen, 
mit Symetrischen Leitungslängen, mit am Ende aller Äste gleicher 
Laufzeiten... Ist ja Hobby :-)

von Philipp B. (citrullin)


Lesenswert?

HildeK schrieb:
> Was gehen könnte: der ankommende Takt an einem Schieberegister wird
> durch einen Buffer wieder weitergereicht an die nächste Kette. Dann muss
> man aber darauf achten, dass der Buffer sehr kurze Durchlaufzeiten hat
> oder die Datenleitung muss einige 10cm länger sein als die Taktleitung.


An so einen Buffer, vielleicht kleiner Mikrocontroller, habe ich auch 
schon gedacht. Der faengt den Ausgang ab, sammelt die 8 oder 16 bit und 
leitet sie dann weiter. Muss man halt ordentlich synchronisieren.

von X. X. (chrissu)


Lesenswert?

Mit einem uC als Buffer kannst du die SPI-CLK zwar erhöhen,
Es wird aber am Ende auch nicht schneller, als wenn du nur Clk Treiber 
nimmst.

Aber, es wird teurer.

von Philipp B. (citrullin)


Lesenswert?

X. X. schrieb:
> Mit einem uC als Buffer kannst du die SPI-CLK zwar erhöhen,
> Es wird aber am Ende auch nicht schneller, als wenn du nur Clk Treiber
> nimmst.
>
> Aber, es wird teurer.

Super schnell muss es ja nicht sein. Ich habe jetzt ein paar 8 bit Shift 
Register bestellt. 
(https://assets.nexperia.com/documents/data-sheet/74HC_HCT595.pdf) Mit 
denen wuerde ich das jetzt umsetzen. Der kann in 100 Mhz shiften. 
Muesste dann natuerlich auch einen Prozessor nehmen, der mit mindestens 
100 Mhz arbeitet. Am Ende wuensche ich mir eine Bildfrequenz von 100Hz 
oder 200Hz an. Bei 300 Zeilen muesste ich also in 30Khz oder 60Khz 
shiften.

Was macht denn ein Buffer genau? Kann man das irgendwo schoen nachlesen. 
Du musst wissen, dass ich im Verhaeltnis zu euch ja noch ein blutiger 
Anfaenger bin (Eigentlich Software-Developer) ;)
Habe die Haelfte auch nicht ganz so begriffen. Muss ich mir nachher noch 
in Ruhe durchlesen.

Edit: Hab das PWM total vergessen. Ich muss ja PWM umsetzten, damit ich 
auch tatsaechlich jede Farbe darstellen kann.

: Bearbeitet durch User
von Joe F. (easylife)


Lesenswert?

Philipp B. schrieb:
> Bei 300 Zeilen muesste ich also in 30Khz oder 60Khz
> shiften.

Und wie viele Spalten?
Auch 300?

Womöglich 3D, also auch noch 300 Etagen?

Achso, und dann noch PWM...

Überlege mal, wie lange eine LED dann an ist, und wie lange sie aus ist, 
und ob man sie dann noch leuchten sieht.

: Bearbeitet durch User
von Philipp B. (citrullin)


Lesenswert?

Joe F. schrieb:
> Philipp B. schrieb:
>> Bei 300 Zeilen muesste ich also in 30Khz oder 60Khz
>> shiften.
>
> Und wie viele Spalten?
> Auch 300?
500
>
> Womöglich 3D, also auch noch 300 Etagen?
>
Nein, nur 2D.
> Achso, und dann noch PWM...
>
> Überlege mal, wie lange eine LED dann an ist, und wie lange sie aus ist,
> und ob man sie dann noch leuchten sieht.

Stimmt. Muss dann wohl doch etwas schneller sein. Ab welcher Frequenz 
funktioniert PWM bei einer LED denn? 300 Hz?

: Bearbeitet durch User
von HildeK (Gast)


Lesenswert?

Philipp B. schrieb:
> An so einen Buffer, vielleicht kleiner Mikrocontroller, habe ich auch
> schon gedacht. Der faengt den Ausgang ab, sammelt die 8 oder 16 bit und
> leitet sie dann weiter. Muss man halt ordentlich synchronisieren.

Ja, geht sicher auch. Das Hauptproblem bei dir sind die langen Leitungen 
und die darauf entstehenden Reflexionen. Die sind beim Takt sehr 
kritisch

Was man aber tun könnte mit zwei zusätzlichen Buffern pro Stufe:
1
                   .--o--.   |\    ___               .--o--.   |\    ___
2
    Data o---------|D S Q|---| >--|___|-....---------|D S Q|---| >--|___|-o
3
                   |     |   |/    33R               |     |   |/    33R
4
               .---|>    |                       .---|>    |
5
               |   |  R Q|                       |   |  R Q|
6
               |   '--o--'                       |   '--o--'
7
               |                                 |
8
          |\   |    ___                     |\   |    ___
9
    Clk  -| >--o---|___|----------.......---| >--o---|___|-----------o
10
          |/        33R                     |/        33R
11
(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)
Der Buffer in der Datenleitung dient nur dazu, die zusätzliche Laufzeit 
der Clockbuffer auszugleichen; die aktive Taktflanke muss vor dem 
Datenwechsel am Register sein!
Ev. gehen auch invertierende Buffer nur in der Taktleitung, allerdings 
wird das bei jedem Schieberegister zu einer halben Periode Verzögerung 
führen. Wenn das akzeptabel ist, dann kann man die Buffer in den 
Datenleitungen weglassen. Die Widerstände würde ich bei den Längen auf 
jeden Fall verwenden, ggf. muss der Wert noch an die vorhandene 
Leitungunsimpedanz angepasst werden. Da könnten auch 50R ... 100R gut 
sein.

von Joe F. (easylife)


Lesenswert?

Das Problem ist, dass mit deinem Multiplexing über 300 Zeilen eine LED 
ja max. 1/300 der Zeit an sein kann.
Das ist viel zu wenig.
Und wenn du jetzt noch PWM machen möchtest (sagen wir mal nur 16 
Helligkeitsstufen), reduziert sich die Zeit nochmal um den Faktor 16 bei 
der "dunkelsten" Stufe.

Ich würde dir empfehlen erstmal klein anzufangen (8x8 Matrix), um ein 
bischen Erfahrung zu sammeln, ohne gleich größere Mengen Geld zu 
verbrennen.

von HildeK (Gast)


Lesenswert?

Nachtrag: die oben gezeichneten FF sollen für je eine 
Schieberegisterstufe stehen. FFs gibt's in der AACircuit Lib, ein 
Shiftregister hab ich keines gesehen.

von Peter (Gast)


Lesenswert?

Clock-Leitung von der gegenüberliegenden Seite (als die Datenleitung) 
einspeisen. Das verlängert die Setup und Hold Zeit ein bisschen.
Bei SPI am Mikrocontroller kannst du zwar über die Phase einstellen dass 
die Daten an der "passiven" Flanke übernommen werden, aber zum Beispiel 
beim 74XX595 werden die Daten an der Flanke angelegt an der sie auch 
übernommen werden.

von Philipp B. (citrullin)


Lesenswert?

Joe F. schrieb:
> Das Problem ist, dass mit deinem Multiplexing über 300 Zeilen eine LED
> ja max. 1/300 der Zeit an sein kann.
> Das ist viel zu wenig.
Das ist tatsaechlich etwas zu wenig. Ich habe mir ein Board mit dem 
Allwinner H5 bestellt. Der kann sich wohl auf 1 Ghz takten. Sagen wir 
ich koennte mit 800 Mhz Multiplexen. Dann waere das wohl kein Thema 
mehr. Die Frage ist nur, welcher Multiplexer mit der Geschwindigkeit 
arbeiten kann.

> Und wenn du jetzt noch PWM machen möchtest (sagen wir mal nur 16
> Helligkeitsstufen), reduziert sich die Zeit nochmal um den Faktor 16 bei
> der "dunkelsten" Stufe.
Im Idealfall sollten es sogar 255 sein. Aber ja, sagen wir mal 16.
>
> Ich würde dir empfehlen erstmal klein anzufangen (8x8 Matrix), um ein
> bischen Erfahrung zu sammeln, ohne gleich größere Mengen Geld zu
> verbrennen.

Ja klar, fange sowieso erst einmal mit einer kleineren Matrix an. Die 
Sachen, also LEDs sind aber schon in groesseren Mengen bestellt. Kosten 
sowieso nicht die Welt. Fuer mich ist das kein Verlust mal 60 Euro zu 
verlieren, wenn ich dadurch was lerne ;)

Edit: Wenn ich so drueber nachdenke, werde ich wohl nicht drum herum 
kommen, mehrere Mikrocontroller zu nutzen. Alleine schon wegen der Pins 
und dem Multiplexing.

: Bearbeitet durch User
von Joe F. (easylife)


Lesenswert?

Philipp B. schrieb:
> Alleine schon wegen der Pins
> und dem Multiplexing.

...und weil deine aktuelle Zahl von 800 MHz die sonst so üblichen 
Clock-Frequenzen etwa um den Faktor 100 übersteigt. Aber das wirst du 
dann bei dem kleineren Projekt lernen.

Höhere CLK Frequenz bedeutet übrigens nicht, dass die einzelne LED ein 
günstigeres ein/aus Verhältnis hat.

: Bearbeitet durch User
von Johnny B. (johnnyb)


Lesenswert?

Schieberegister sind zwar schon lustig zum spielen, aber für eine 
LED-Anzeige ist das doch heutzutage viel zu kompliziert und 
Fehleranfällig.

Für SPI würde ich fertige RGB-LED's mit eingebauter Signalaufbereitung 
und PWM nehmen wie z.B. die APA102C.
Man kann auch fertige Stips mit denen kaufen, dann spart man sich sogar 
noch viel Mühe und Zeit beim Aufbau.

von X. X. (chrissu)


Lesenswert?

Natürlich... takte 2m Leitung mit 100MHz...
Jetzt wird's aber albern.

Ich bin raus.

von Philipp B. (citrullin)


Lesenswert?

X. X. schrieb:
> Natürlich... takte 2m Leitung mit 100MHz...
> Jetzt wird's aber albern.
>
Wieso albern? Schade, dass du mich nicht ernst nimmst. Ich bin kein 
Elektroingenieur, daher fehlt es mir an manchen Stellen an Wissen. 
Deshalb frage ich ja nach. Wieseo ist das denn albern eine 2 Meter 
leitung mit 100 Mhz zu takten? Weil das Rauschen so gross ist und die 
100 Mhz gar nicht am Ende ankommen?

Wie waere es dann mit LVDS?

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Philipp B. schrieb:
> Wieseo ist das denn albern eine 2 Meter leitung mit 100 Mhz zu takten?
Eine 2m lange Leitung an einem 100Mhz Signal nennt man Antenne.

Und ein 100MHz Rechteck hat im Handumdrehen Frequenzen his 1GHz in 
sich...

von X. X. (chrissu)


Lesenswert?

Wenn das der Fall ist, dann fange klein an.
Wie bereits geschrieben.

Ach, wie lange ist eigentlich Deine UKW Antenne ?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Philipp B. schrieb:
> Wie waere es dann mit LVDS?
Anfänger verhält sich zu 100MHz LVDS
wie Dreirad zu Formel 1

Wie wäre es denn, wenn du dir einfach mal genau ansiehst, wie Andere 
dieses Problem gelöst haben?

von Philipp B. (citrullin)


Lesenswert?

Lothar M. schrieb:
> Philipp B. schrieb:
>> Wie waere es dann mit LVDS?
> Anfänger verhält sich zu 100MHz LVDS
> wie Dreirad zu Formel 1
>
> Wie wäre es denn, wenn du dir einfach mal genau ansiehst, wie Andere
> dieses Problem gelöst haben?

Finde dazu nichts. Die nehmen einfach die LEDs aus den Strips, die man 
aneinander Reihen kann. Da hoert es nach 512 aber auch auf.

von André R. (andr_r619)


Lesenswert?

Dem will ich mich anschließen. Selbst wenn Du das System auf 100 GHz 
taktest, wird jede LED stets nur 1/300 der Zeit leuchten können mit 
dieser Konstruktion. Das wird nicht funktionieren.

Bei einer derart großen Konstruktion wirst Du um ordentliche Komponenten 
wohl nicht herum kommen. Mit ein paar Schieberegistern ist das nicht 
getan.

von Joe F. (easylife)


Lesenswert?

Philipp B. schrieb:
> Da hoert es nach 512 aber auch auf.

Aus gutem Grund ;-)

Nein, es ist leicht einen Anfänger auf den Arm zu nehmen, aber bitte 
nimm' dir für dein erstes Elektronikprojekt nicht zu viel vor.

100 MHz über Kabel, LVDS, das sind alles Sachen, die Profis anfassen, 
nachdem sie >5 Jahre Berufserfahrung haben, und das nötige und sehr 
umfangreiche Fachwissen haben über Strom, Spannung, Kapazitäten, 
Induktivitäten, Wellenwiderstand, Abstrahlung, Dämpfung etc.

Es ist komplett sinnlos große Mengen LEDs zu bestellen (womöglich noch 
einen haufen Dicke Kabel und Netzteile), wenn man noch keine kleine 
Testschaltung aufgebaut hat, die funktioniert.
Dann kann man diese Testschaltung um lange Kabel erweitern.
Dann kann man mit der Clockrate rumspielen und seine Erfahrungen machen.
Dann kann man sich überlegen, ob das große Projekt überhaupt irgend eine 
Aussicht auf Erfolg hat.
Und auf dem Weg dahin stellt man fest, dass man auch ein ordentliches 
Oszilloskop und möglichst auch einen Logicanalyzer braucht.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Philipp B. schrieb:
> Da hoert es nach 512 aber auch auf.
Das ist ja auch der Trick an der Sache...

Dann muß man nämlich nur noch "ganz einfach" viele solcher 512er Cluster 
parallel mit Daten versorgen.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Philipp B. schrieb:
> Finde dazu nichts.

Reicht dir eine LED-Installation mit insgesamt 350000 LEDs?

https://www.youtube.com/watch?v=9Qlmywxjau0

Oder eine Installation die direkt Farb-LCDs nimmt, statt einzelne LEDs 
zu steuern:

https://www.youtube.com/watch?v=dPzeEw3zVwQ&list=PL0KZLmPyL6Ak1bArDuLo77yhx95yMsjHL&index=8

: Bearbeitet durch User
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.