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?
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
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.
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.