Forum: Mikrocontroller und Digitale Elektronik Welcher Datenbus?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Johnny S. (sgt_johnny)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (achs)


Bewertung
0 lesenswert
nicht 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".

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.