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?
Wenns schnell sein soll, nimmt man SPI. Einen SN74LV165A kannst Du mit typisch 115MHz auslesen.
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.
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.
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)
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
uc-Progger schrieb: > 16 Werte lesen + Adressierungsoverhead die 16 Werte (für 16 Eingangskanäle) befinden sich doch innerhalb von 2 Bytes, oder?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.