Hallo an alle, ich liebäugele, mit dem ADC MCP37D31 ein Projekt zu starten. Ich bin als erstes über die für mich seltsame SPI-Implementation gestolpert. Ich habe bislang noch keine Bekanntschaft mit einem SPI gemacht, bei dem der Daten-In und Daten-Out auf ein und demselben Pin liegen. Das ist nach meinem dafürhalten auf keinen Fall kompatibel mit einem "normalen" SPI, daisy chaining des Datenpins mit anderen SPI-Bausteinen kann nicht klappen... Ist das eine "Spezial-Microchip-Implementation? Gibt es Codeblöcke für gängige Mikrocontroller (STM32, Arduino etc.) dafür? Kennt jemand diese Art von SPI-Schnittstelle und kann helfen? https://ww1.microchip.com/downloads/en/DeviceDoc/20005322E.pdf
Andreas R. schrieb: > ich liebäugele, mit dem ADC MCP37D31 ein Projekt zu starten. Ich bezweifle dass du einen 16-Bit-ADC sinnvoll nutzen kannst. Schon alleine deswegen weil du nach einen "Codeblock für gängige Mikrocontroller" fragst. Wer solch einen ADC wirklich nutzen kann braucht keinen "Codeblock".
Andreas R. schrieb: > Gibt es > Codeblöcke für gängige Mikrocontroller (STM32, Arduino etc.) dafür? Die STM32 unterstützen half-duplex SPI. Code kannst du dir vom STM32Cube-Generator erzeugen lassen, Beispiele gibt's im Cube-Paket.
Na, so schwer ist das nun auch nicht. Du brauchst ein 74AHC1G125 zwischen MOSI des uC und SDIO des ADC. MISO des uC verbindests Du direkt mit SDIO vom ADC. Die ersten zwei Bytes gehen immer von uC zum ADC. Da schaltest Du G von AHC1G125 auf 0 und damit dessen Ausgang durch. Danach hängt es vom RW Bit des Headers ab, ob SDIO Eingang oder Ausgang ist, und Du setzt G des 74HC1G125 entsprechend dem RW bit. Damit unterbrichst Du den Signalfluss zwischen MOSI von uC und dem SDIO-Pin, wenn SDIO Ausgang ist, und MISO bekommt die Daten vom SDIO. Wenn SDIO ein Eingang ist, liest MISO vom uC die gesendeten Daten von MOSI ein. Denk mal drüber nach. fchk
Die eigentliche Frage ist doch: Wie liest man Daten bei 200 Msps auf einem Mikrocontroller ein und macht was sinnvolles damit? Wenn man das hinbekommt ist das SPI doch ein Klacks.
Andreas R. schrieb: > ich liebäugele, mit dem ADC MCP37D31 ein Projekt zu starten. Ein 200 MSMPS/s ADC. Holla die Waldfee! > Ich bin als > erstes über die für mich seltsame SPI-Implementation gestolpert. Ich > habe bislang noch keine Bekanntschaft mit einem SPI gemacht, bei dem der > Daten-In und Daten-Out auf ein und demselben Pin liegen. Doch, sowas gibt es schon sehr lange, vor allem als Konfugurationsschnittstelle für Interface ICs, Ethernet & Co. > Das ist nach > meinem dafürhalten auf keinen Fall kompatibel mit einem "normalen" SPI, Jain. > daisy chaining des Datenpins mit anderen SPI-Bausteinen kann nicht > klappen... Ist das eine "Spezial-Microchip-Implementation? Nein. > Codeblöcke für gängige Mikrocontroller (STM32, Arduino etc.) dafür? > Kennt jemand diese Art von SPI-Schnittstelle und kann helfen? Wo liegt das Problem? Man kann den IC mit anderen, normalen SPI-Slaves am gleichen Bus mit wenig Aufwand verwenden, siehe Anhang. Wenn Daten von MOSI nach SDIO übertragen werden, ist R1 unbedeutend. Wenn SDIO auf Ausgang schaltet, werden MISO und SDIO voneinander entkoppelt und ein Kurzschluß von zwei Ausgängen verhindert. Einzig daß man die 50MHz, die der IC zuläßt, hiermit nicht mehr erreicht, denn R1 verschleift die Flanken des Datensignals. 10MHz sollten drin sein und für die Konfiguration reichen.
Niklas G. schrieb: > Die eigentliche Frage ist doch: Wie liest man Daten bei 200 Msps auf > einem Mikrocontroller ein und macht was sinnvolles damit? Vielleicht ist die Datensenke gar kein Mikrocontroller sondern ein FPGA? > Wenn man das > hinbekommt ist das SPI doch ein Klacks. Jaja, schön gelabert und nicht eine Sekunde was zum Thema beigetragen. Bravo!
Muss ich dem Vorredner zustimmen. Ich habe mal kurz das Datenblatt überflogen und frage mich, was jemand, der nach Arduino Code fragt, mit einem 200Msps ADC will. Das SPI Interface ist im Datenblatt klar erklärt. Unter welchen Bedingungen der GPIO SDI und wann SDO ist. Aber das Ding ist definitiv eher für ein FPGA gedacht. Ich kenne keine MCU die 200Msps in 16 Bit verarbeiten könnte. Nimm einen MCP356x, da wirst du vermutlich glücklicher mit, auch mit Arduino
Falk B. schrieb: > Vielleicht ist die Datensenke gar kein Mikrocontroller sondern ein FPGA? Schon möglich. Aber half-duplex SPI auf einem FPGA umzusetzen sollte doch auch kein großes Ding sein. Aber es ging ja um Mikrocontroller. Andreas R. schrieb: > Arduino Falk B. schrieb: > nicht eine Sekunde was zum Thema beigetragen. Meinen Beitrag zum STM32 überlesen? Eine sinnvollere Lösung als das Zweckentfremden eines normalen SPIs...
:
Bearbeitet durch User
Die Daten (die man ja sehr schön mit integrierten Features dezimieren / reduzieren kann) zu verarbeiten hat absolut nichts mit der Konfiguration zu tun, nach der ich gefragt hatte. Danke für alle konstruktiven Beiträge! Solch ein SPI ist mir tatsächlich noch nie untergekommen.
Beitrag #7771755 wurde vom Autor gelöscht.
Andreas R. schrieb: > ADC MCP37D31 - was ist das für ein SPI-Interface? Übrigens: Ein "SPI-Interface" ist ein Serial Peripheral-Interface Interface.
Niklas G. schrieb: > Die eigentliche Frage ist doch: Wie liest man Daten bei 200 Msps auf > einem Mikrocontroller ein und macht was sinnvolles damit? Die Antwort dafür werden wir vom Interessenten am MCP37D31 wahr- scheinlich nie bekommen. Auch wenn es kein Mikrocontroller sein sollte. Aber er fragte ja ausdrücklich: Andreas R. schrieb: > Gibt es > Codeblöcke für gängige Mikrocontroller (STM32, Arduino etc.) dafür? Also eine Sonntags-Schnapsidee, oder ein verspäteter Freitags-Thread.
Ich möchte mit dem ADC und einem STM32 (eventuell einem FPGA) einen SDR (nur RX) bis 100MHz designen. Da der ADC bereits DDC und Decimation beherrscht und I/Q ausgeben kann bietet er sich dafür an. Die Codeblöcke wollte ich nicht zum 1:1 kopieren, sondern um zu lernen, wie so ein SPI funktioniert. Nach den ausführlichen Erklärungen brauche ich keine Codeblöcke. Ich hatte schlicht und einfach vorher mit den falschen Suchbegriffen gesucht. Hätte ich das Zauberwort "halfduplex" verwendet wäre ich auch selbst auf die Erklärung gekommen - habe ich aber nicht.
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.