Hallo, ich bin auf der Suche nach einem Mikrocontroller der wirklich schnell 2x12 Bit parallel ausgeben kann. Derzeit ist dies mit einem Raspi realisiert und dies ist nicht wirklich schnell. Meine Idee war nun einen ESP32 zu nehmen dort die Daten über DMA und I2S rauszuschicken. Geschwindigkeit ist da wohl nicht das Problem, da ist eher das Problem des stabilen Timings. Wenn man alle 5us sendet schwankt es wohl ziemlich um diesen Wert. Weiteres Problem, der ESP32 hat nur 21 GPIOS die als Output definiert werden können. Hat jemand einen Tipp um 2x12 Bit schnell und stabil parallel senden zu können?
"... dies ist nicht wirklich schnell." Mich interessiert der Unterschied - in Bit pro Sekunden - zwischen, 'nicht schnell' und 'nicht wirklich schnell'.
Hm... 5 µS ist in der Größenordnung von 192 kHz Samplerate. Warum nicht einen Audio-Codec beim RPi nehmen, der 192 kHz kann? Das könnte dann hinreichend stabil sein.
Der Raspi ist irgendwo im ms Bereich. Schön wäre wenn die 2x12 Bit im us Berich gesendet werden könnten. So 5us und aufwärts.
Tobi schrieb: > Hat jemand einen Tipp um 2x12 Bit schnell und stabil parallel senden zu > können? Nimm einen µC, der nicht nebenher ein Betriebssystem zu bedienen hat. > parallel senden zu können? Wie sieht dabei das Handshake aus? Alle parallelen Busse haben einen Mechanismus, der signalisiert "jetzt sind die Daten stabil, jetzt kannst du sie übernehmen". > da ist eher das Problem des stabilen Timings. Das ist also die zweite Anforderung? Oder ist das im Grunde die einzige? Denn 24 Bit pro 5µs ist eigentlich recht langsam...
:
Bearbeitet durch Moderator
Genau, hatte gedacht ESP32 mit FreeRTOS. Stabiles Timing wäre schön. Hauptanforderung wäre die Daten schnell zu senden.
Wobei ich jetzt dachte, du betreibst einen 2x12 bit DA Wandler (wegen I²S). Aber das muss ja nicht sein. Aber wenn I²S eine Lösung wäre, dann gehen ja viele µC, z.B. die STM32F40x.
Handshake gibt es keinen. Es soll ein Vector Modulator angesteuert werden der I und Q mittels jeweils 12 Bit Daten bekommt. Habe grade geschaut, der Modulator hat eine maximale Schaltgeschwindigkeit von 500ns/2Mhz. Wenn der uC das schaffen würde wäre Top
:
Bearbeitet durch User
Ich blicks nicht... Wie kommt man darauf eine serielle Schnittstelle (I2S) zu verwenden, wenn man 24bit parallel übertragen will?
Tobi T. schrieb: > Wenn der uC das schaffen würde wäre Top Der µC ist nicht das Problem, sondern die darauf laufende Software. Und das kann durchaus spannend werden, wenn man die Googletreffer so anschaut: https://www.google.com/search?q=FreeRTOS+jitter > der Modulator hat eine maximale Schaltgeschwindigkeit von 500ns/2Mhz. Das ist jetzt aber doch 10x schneller als vorhin, oder wie passen die 5µs jetzt da rein?
I²S = Inter Sound. Kann man beim ESP32 nehmen weil es schnell ist und die Daten direkt aus dem DMA nimmt. https://github.com/TobleMiner/esp_i2s_parallel
Lothar M. schrieb: > Tobi T. schrieb: >> der Modulator hat eine maximale Schaltgeschwindigkeit von 500ns/2Mhz. > Das ist jetzt aber doch 10x schneller als vorhin, oder wie passen die > 5µs jetzt da rein? 5uS würden mir erstmal reichen. Das maximum was er kann wäre das optimum
Für ein wirklich exaktes Timing nimmst Du einen FIFO-Baustein, z.B. sowas hier: https://www.renesas.com/eu/en/products/memory-logic/fifo-products/synchronous-fifos/72v36100-64k-x-36-supersync-ii-fifo-33v? Der hat einen Speicher von 64k-Worten zu 36 Bit. Den Eingäng fütterst Du aus irgendeiner Quelle, wobei das Timing da unkritisch ist - du musst eben nur im Mittel die Datenrate schaffen. Die reingeschriebenen Daten kannst Du ab Ausgang abholen, wobei mit jedem RXCLK ein Wort herausfällt. Die Genauigkeit des RXCLK bestimmt die Genauigkeit des gesamten Systems, und so bekommst Du ein wirklich präzises Timing hin. Dieser konkrete FIFO kann auch Busbreiten umsetzen. D.h. Du kannst mit 18 Bit reinschreiben und mit 36 Bit auslesen. Als Controller würde ich irgend einen 32-Bit Controller mit genügend IO-Pins nehmen. Digikey hat z.B. gerade TM4C1233 im TQFP144 lieferbar. (296-35820-ND). Heutzutage werden FIFOs nur noch selten als Einzelbausteine eingesetzt, sondern finden sich in vielen FPGAs. fchk
RP2040 Mit dem PIO des Raspberry-Mikrocontrollers sollten sich Timing-Wünsche sehr präzise und jitterfrei erfüllen lassen. Daten-Nachschub geht per DMA.
Tilo R. schrieb: > RP2040 > > Mit dem PIO des Raspberry-Mikrocontrollers sollten sich Timing-Wünsche > sehr präzise und jitterfrei erfüllen lassen. > Daten-Nachschub geht per DMA. So ist es. Allerdings wird es mit den Pins etwas eng. Wenn man 24 für die Ausgabe braucht, bleiben nur noch genau zwei für andere Aufgaben über...
STM32 mit FMC, die Adressleitungen werden als Datenausgänge "mißbraucht", dann den Write-FIFO (für Adressen und Daten!!!) via CPU regelmäßig nachfüllen. Die Datenleitungen des FMC bleiben für anderweitige Verwendung frei, was als Datum geschrieben wird, ist egal. Die Datenleitungen zu verwenden, wär' schöner, aber es gibt deren nur 16. Man könnte aber natürlich auch "mischen", dann käme man auf max. 28+16 Ausgänge.
Die Frage ist nicht nur wie schnell die Daten rausgehen, sondern auch woher sie kommen. Ich nehme an, es muss noch etwas damit gerechnet werden. Ich wuerd mal an ein FPGA denken.
donvido schrieb: > Wie kommt man darauf eine serielle Schnittstelle (I2S) zu verwenden, > wenn man 24bit parallel übertragen will? Vielleicht deshalb, weil es Wandlerchips dafür gibt und man mit I2S ausreichend schnell ist? Mein XMOS-board macht 384kHz Stereo 32 Bit in I2S, bei S/PDIF über eine Leitung.
Die 56k DSPs haben 24 bit Wortbreite. Damit ist natuerlich einfach 24 bit parallel und mit genauem Timing auszugeben. Wenn man ein Byte "verschwendet" sollten auch alle TMS320C5xyz das leicht koennen. Eigentlich alle 32 bit Controller die ein externes Speicherinterface haben. Z.B. Renesas SH-3/4/... Schlussendlich tut es ein FPGA natuerlich sowieso. Wenn der TO nicht ganz ungeschickt ist, auch ein nicht zu kleiner CPLD. Aber wie es aussieht, spielt der TO nur mit Bastlermainstreamzeug herum.
Tobi T. schrieb: > Handshake gibt es keinen. > Es soll ein Vector Modulator angesteuert werden der I und Q mittels > jeweils 12 Bit Daten bekommt. > Habe grade geschaut, der Modulator hat eine maximale > Schaltgeschwindigkeit von 500ns/2Mhz. Wenn der uC das schaffen würde > wäre Top Man nehme Dr. Oetker, ähhh, ein kleines FPGA Evaluation Board mit bissel SRAM. Damit ist das ein Kinderspiel, mit 2 MHz 24 Bit Datenwörter jitterfrei auszugeben. Den RAM kann man per SPI über das FPGA an jede X-beliebigen Controller anbinden und von dort die passenden Daten laden. Fertig ist der beliebig programmierbare Funktionsgenerator. Eine andere Möglichkeit wäre ein paralleler FLASH-Speicher, den man mit einem einfachen CMOS-Zähler ala 74HC4060 oder ähnlich als Adresszähler benutzt. Den kann man auch sehr gleichmäßig takten und damit die Daten ausgeben. Das Programmieren ist halt deutlich langsamer. Wenn ein deutlich kleinerer Speicher ausreicht, tut es auch ein SRAM.
Was man mit dem RasPi und VIEL HACKER Spirit machen könnte. Man programmiert den LCD-Controller auf die passende Frequenz (einfach) und gibt ein Bild aus, welches in den 24 Bit RGB-Daten die gewünschten Daten enthält! Man muss nur dafür sorgen, daß die H/V Sync Ränder (Front/Back Porch) auf 0 gesetzt werden, damit keine Lücken im Datenstrom entstehen. Ob der LCD-Controller das mitmacht, weiß ich nicht. Wenn ja, könnte man dann über das SDI (Serial Digital Interface) und den Adapter für den Touchscreen eben letzteren ersetzen und die 24 Bild Daten anzapfen, sogar mit zugehörigem Takt! Das alles würde dann ohne einen Funken CPU-Last laufen, 100% per DMA und mit Standardhardware!
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.