Forum: Mikrocontroller und Digitale Elektronik maximale Datenrate bei Porterweiterung mit ADP5589


von uc-Progger (Gast)


Lesenswert?

Ich liebäugle mit einem Testboard für schnelle Hardwarezugriffe und 
möchte abschätzen, ob ich damit hinkomme. Oder genauer: Wieviele ich 
brauche.

Das board benutzt den ADP5589, einen universellen Baustein, den ich aber 
noch nicht kenne. Laut Datenblatt ist der mit I2C und 1Mbps zu 
betreiben. Wenn ich meine alten I2C-Kenntnisse ausgrabe, braucht man 
rund 10Bit je Wort und wenigstens 3 Worte fürs einzelne Lesen eines 
Werts (Adresse setzen 2 und dann Lesen) ...
 ... oder so ähnlich. Für jeden weiteren Lesebefehl braucht es wieder 
ein Read.

Ich brauche also für alle 16 Kanäle mit Rücksprung auf die erste Adresse 
rund 20 Worte.

Damit kann ich (nur) 1 Mio  10  20 = 5kHz Abtastrate für die gesamten 
IOs (Inputs) bekommen.

Stimmt das ungefähr?

Mit welchem Baustein könnte ich mehr erreichen?

von Peter D. (peda)


Lesenswert?

Wenns schnell sein soll, nimmt man SPI.
Einen SN74LV165A kannst Du mit typisch 115MHz auslesen.

von Bauform B. (bauformb)


Lesenswert?

Wenn es schnell sein soll, nimmt man natürlich garkeine Porterweiterung. 
16 Eingänge kann jeder uC direkt einlesen.

Auch 100 Eingänge sollten kein Problem sein, LQFP-144 Gehäuse würde ich 
noch als handhabbar bezeichnen. Wenn das immer noch nicht reicht, kann 
man auch 1 bis 2 uC rein als Porterweiterung laufen lassen.

von alles ungefähr (Gast)


Lesenswert?

uc-Progger schrieb:
> rund 10Bit je Wort und wenigstens 3 Worte

Worte sind nur Schall und Rauch. Kein Schwein kann sich
vorstellen wie gross dein "Wort" sein mag da du dich nicht
auf irgendeine Hardware-Architektur beziehst.

Im Übrigen rechnet man auch in den Termen von I2C immer mit
ganzzahligen Viefachen von 8 Bit. Du kannst zwar sparsam sein,
dir eine Soft-I2C-Implementierung selbst bauen und nur 10 Bit
statt 16 übertragen aber das wird dir nichts helfen.

von Achim S. (Gast)


Lesenswert?

uc-Progger schrieb:
> Ich brauche also für alle 16 Kanäle mit Rücksprung auf die erste Adresse
> rund 20 Worte.

Es gibt auch Multi-Byte Read (siehe Fig. 30 im Datenblatt), mit denen du 
z.B. nacheinander GPI_STATUS_A und GPI_STATUS_B auslesen kannst. Der 
Adressierungs-Overhead fällt dann nur einmal für deine zwei Lesebytes 
an.

Um den Status von 16 Kanälen (zwei Byte) auszulesen brauchst du nach 
meiner Rechnung mindestens ~60µs. Aber richtig schnell ist das immer 
noch nicht. Und I2C mit 1MHz zu taken ist auch schon sportlich. Wie 
schon geschrieben wurde: wenn es auf Geschwindigkeit ankommt würde ich 
nicht ausgerechnet mit I2C arbeiten.

Wie du auf 20 Worte kommst, verstehe ich nicht (auch nicht mit single 
Byte Read)

von uc-Progger (Gast)


Lesenswert?

Peter D. schrieb:
> Wenns schnell sein soll, nimmt man SPI.
Wenn man sich das mal immer aussuchen könnte

Achim S. schrieb:
> Es gibt auch Multi-Byte Read
das hatte ich in Erinnerung, ja

Achim S. schrieb:
> Wie du auf 20 Worte kommst,
16 Werte lesen + Adressierungsoverhead

von Achim S. (Gast)


Lesenswert?

uc-Progger schrieb:
> 16 Werte lesen + Adressierungsoverhead

die 16 Werte (für 16 Eingangskanäle) befinden sich doch innerhalb von 2 
Bytes, oder?

von Achim S. (Gast)


Lesenswert?

Achim S. schrieb:
> innerhalb von 2
> Bytes, oder?

oder - um es klarer zu formulieren - innerhalb von 2 Registern (z.B. 
GPI_STATUS_A und GPI_STATUS_B), die jeweils ein Byte groß sind.

Oder planst du irgendwelche "komplexeren Werte" auzulesen? Der ADP5589 
bietet diesbezüglich ja einige Möglichkeiten, aber deine bisherige 
Beschreibung klang für mich einfach nach regelmäßiger Abfrage des 
Pegels.

von J. S. (engineer) Benutzerseite


Lesenswert?

uc-Progger schrieb:
> mit I2C und 1Mbps ...
> Damit kann ich (nur) 1 Mio  10  20 = 5kHz Abtastrate für ...
> die gesamten IOs (Inputs) bekommen.
I2C ist am Besten dann geeignet, wenn man viele Teilnehmer hat, die 
selten was liefern sollen. Für regelmäßiges schnelles Abtasten ist das 
nicht optimal.

16 Kanäle bekommt man auch mit 2 der 165er Bausteine rein. Die können 
bei Luftverdrahtung locker 16MHz Takt und damit 1MHz Rate je Pin. 
Braucht halt einen PLD, der das steuert und dann deinen Controller die 
Registerwerte bereitstellt. Abholung am Besten mit SPI.

Ich sample so DMX, MIDI und 230er UART völlig asynchron mit dem kleinen 
gemeinsamen Vielfachen aller Eingänge mit einem MAX2. Der bedient 64 
Kanäle dieser Art.

Hier gibt es aber einen ähnlichen thread:
Beitrag "Re: Sinc3 Filter von VHDL in Bit Logik umsetzen"

Stand: Man nehme I2S oder ein anderes Schieberegisterprotokoll, das auch 
dem Prozessor der das auslesen soll, bereits (in Hardware) implementiert 
ist.

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.