Forum: Mikrocontroller und Digitale Elektronik Welcher Datenbus?


von Johnny S. (sgt_johnny)


Lesenswert?

Ich benötigen für ein zukünftiges Projekt einen Datenbus.

Problem:

Ich habe 48 Shift-Register mit jeh 32 Ausgängen, das heisst, für einen 
Signalwechsel muss ich jeweils 1104 bit senden. Die Register sind 8Mz. 
Die Clock-Dauer muss mindestens 62ns sein. Für ein Bit also 124ns 
(high&low), also besser 140ns.

140ns * 1104bit = 150us.

Das ist schon eine ganze Menge.

Aus diesem Grund, werde ich wohl jeweils 1 oder 2 register mit einem 
kleinen uC ausstatten und diesen dann an einen Bus hängen, dann kann ich 
die Daten über einen schnelleren Bus, und vorallem als "Zahl" 
übertragen.

Nur was für ein Bus eignet sich gut?. Das ganze sollte mit 5 Volt 
laufen, und wenn möglich möchte ich ATMEGA als "shift-cpu" benutzen. Als 
"Main-CPU" entweder Atmega oder STM32. Der Bus müsste insgesammt eine 
Stecke von sicher 2m KABEL (LAN-Kabel z.b.)  und dann noch etwa 2-3m auf 
Platinen die jeweils mit Flachband oder so verbunden sind.

Was wäre da am besten geeignet?

von Danish B. (danishbelal)


Lesenswert?

Wie wäre es mit einem 4bit Parallelbus? Dann kannst du die Aderpaare von 
den Ethernet-Kabeln nutzen (also jeweils 4 differentielle Paare).

Wenn du keine weiteren Steuerleitungen legst, dann musst du den 
asynchronen Bus über z.B. Startbits synchronisieren.

: Bearbeitet durch User
von 1234567890 (Gast)


Lesenswert?

Johnny S. schrieb:
> 48 Shift-Register mit jeh 32 Ausgängen, das heisst, für einen
> Signalwechsel muss ich jeweils 1104 bit senden.

1536

Johnny S. schrieb:
> 140ns

das sind etwas über 7Mhz

Johnny S. schrieb:
> 140ns * 1104bit = 150us.

140ns * 1536bit = 215us.

Ein kompletter Zyklus dauert ca 215us plus etwas Overhead für die 
Aufbereitung/Generierung der Daten sowie ChipSelect on/off usw.
Wenn ich für den Overhead mal nicht ganz 300us annehme, dauert ein 
kompletter Zuyklus gerade mal 500us.

Mit 500us Zykluszeit kann man die kompletten Daten (dabei ist die 
Generierung der Daten inklusive) 2000 mal in der Sekunde 
austauschen/aktualisieren.
Und jetzt meine Frage: Brauchst du diese Wiederholrate tatsächlich?

Wenn du uns beschreibst, was du vor hast, kommt vielleicht ein noch 
besseres Ergebnis heraus.

Falls es eine steuerbare Weihnachtsbeleuchtung wird, solltest du dir bei 
einem statischen Betrieb von über 1500 LEDs an über 1500 
Registerausgängen mal Gedanken übers Netzteil machen. Für solche 
Anwendungen gibt es bessere Ideen.

von Jim M. (turboj)


Lesenswert?

Johnny S. schrieb:
> Ich habe 48 Shift-Register mit jeh 32 Ausgängen, das heisst, für einen
> Signalwechsel muss ich jeweils 1104 bit senden.

Als Software SPI könnte man die auch 8-bit oder 16-bittig parallel 
senden. Ginge sogar noch breiter wenn man noch weitere GPIOs übrig hat. 
Also einfach den ganzen Port für Datenleitungen nehmen und dann einen 
einzelnen GPIO als Clock.

Für die Clock würde ich einfach ein paar 74xx Hex-inverter als 
Verstärker (Fan-Out!) benutzen.

Johnny S. schrieb:
> Als
> "Main-CPU" entweder Atmega oder STM32.

STM32 könnte dieses "Software SPI" auch als Scatter-gather DMA 
ausführen, d.h. via DMA die Pins toggeln.

Würde ich aber nur machen wenn die Hauptschleife mit was anderem 
beschäftigt ist. Ein paar "schnellere" I/Os könnte man auch an den 
normalen SPI Bus hängen.

Johnny S. schrieb:
> Der Bus müsste insgesammt eine
> Stecke von sicher 2m KABEL (LAN-Kabel z.b.)  und dann noch etwa 2-3m auf
> Platinen die jeweils mit Flachband oder so verbunden sind.

Oh. Meine Lösung funktioniert IMHO nur auf einer großen Platine richtig 
gut. SPI über Flachbandkabel müsste man ausprobieren -> Oszi.

von Johnny S. (sgt_johnny)


Lesenswert?

Mein hauptproblem ist die Dauer der übertragung.

Es handelt sich um shiftregister für die ansteuerung von 
Gasendtladungsdisplays (Markenname "Panaplex"). Da jede davon 17 
Elemente hat, reicht ein 16bit nicht aus, also kommt ein 32er pro 
Anzeige.
Die Shiftregister sind sehr rustikal gebaut, Daten können entweder 
"live" übertragen werden, was bedeuted das die Ausgänge "rumschalten", 
oder man kann via eines Eingangs alle Pins auf LOW setzen. Den 
sogenannten "Latch Enable" wie man Ihn von den 595 Registern kennt, gibt 
es nicht!

Bei 500us "LOW" ist das schon sehr gut erkennnbar, das da abgeschaltet 
wird, meine Tests haben festgestellt das man unter 50uS bleiben sollte, 
damit man das nicht merkt.



Jim M. schrieb:

> Für die Clock würde ich einfach ein paar 74xx Hex-inverter als
> Verstärker (Fan-Out!) benutzen.
>
Also 2 in Serie, sonnst ist die Clock verdreht?

von A. S. (Gast)


Lesenswert?

Die Schnellste und einfachste Art, X Register Parallel zu schalten ist 
der Missbrauch des Daten-Adress-Busses (sofern vorhanden).

Wenn du z.B. 16 Bit Datenbus  und 24 Adressbits hast, dann kannst Du 
meist ohne weiteres 2*24 Shift-Register parallel betreiben, indem Du 
ansonsten ungenutzte Adresspins als Clock und Enable etc. 
"missbrauchst".

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.