Forum: Mikrocontroller und Digitale Elektronik ADC MCP37D31 - was ist das für ein SPI-Interface?


von Andreas R. (df8oe)


Lesenswert?

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

von Wastl (hartundweichware)


Lesenswert?

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".

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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.

von Frank K. (fchk)


Lesenswert?

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

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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!

von Johannes (zuberjo)


Lesenswert?

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

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

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
von Andreas R. (df8oe)


Lesenswert?

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.
von Wastl (hartundweichware)


Lesenswert?

Andreas R. schrieb:
> ADC MCP37D31 - was ist das für ein SPI-Interface?

Übrigens:

Ein "SPI-Interface" ist ein Serial Peripheral-Interface Interface.

von Andreas R. (df8oe)


Lesenswert?

@Wastl

Klasse - danke ;)

von Wastl (hartundweichware)


Lesenswert?

Andreas R. schrieb:
> Klasse - danke

Vorsprung durch Wissen!

von Wastl (hartundweichware)


Lesenswert?

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.

von Andreas R. (df8oe)


Lesenswert?

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
Noch kein Account? Hier anmelden.