Forum: Mikrocontroller und Digitale Elektronik SPI Pegelwandlung


von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich würde gerne einen µC mit einem Arduino verbinden. Dabei habe ich das 
"Problem, dass dieser ja mit 5V versorgt wird und mein µC nur mit 3,3V. 
Ich habe im Netz bei einigen Schaltungen gesehen, dass für diese 
unidirektionale Leitungen (CLK, CS, MOSI) nur ein Spannungsteiler mit 
einem Pull-Up (4k7 oder 10k) gegen 3,3V und eine Standarddiode (im 
Anhang) genügen. Kann mir jemand dabei erklären, wie das 
schaltungstechnisch funktioniert bzw. wie sich dieser 4k7 bzw. 10k 
berechnen lässt, da ich im Netz meist nur "aus Bauchgefühl" Lösungen 
gefunden habe?
Gibt es zu dieser Schaltung auch noch eventuelle "einfache" 
Alternativen?

Vielen Dank im Voraus!
Stefan

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Soll das eine bidirektionale Verbindung werden?
Ein Pull-up-Widerstand bewirkt eine Verlangsamung, die Kapazität des 
Eingangs muss erst aufgeladen werden. Für schnelle Datenraten im 
MHz-Bereich ist eine aktive Pegelwandlung besser.

von Stefan (Gast)


Lesenswert?

Christoph db1uq K. schrieb:
> Soll das eine bidirektionale Verbindung werden?

Grundsätzlich dachte ich mir, dass es eine unidirektionale Verbindung 
werden soll, da der CLK ja vom Arduino an meinen Chip sendet, der MOSI 
vom Arduino zum Chip und der CS ebenfalls das gleiche?! Oder habe ich 
das nicht ganz richtig verstanden?

Christoph db1uq K. schrieb:
> Für schnelle Datenraten im
> MHz-Bereich ist eine aktive Pegelwandlung besser.

Was für alternativen gäbe es da?

von Stefan (Gast)


Lesenswert?

Mein Chip unterstützt maximal 5MHz, also "besonders schnell" muss das 
ganze nicht laufen.

von Falk B. (falk)


Lesenswert?

Stefan schrieb:
> ich würde gerne einen µC mit einem Arduino verbinden. Dabei habe ich das
> "Problem, dass dieser ja mit 5V versorgt wird und mein µC nur mit 3,3V.
> Ich habe im Netz bei einigen Schaltungen gesehen, dass für diese
> unidirektionale Leitungen (CLK, CS, MOSI) nur ein Spannungsteiler mit
> einem Pull-Up (4k7 oder 10k) gegen 3,3V und eine Standarddiode (im
> Anhang) genügen.

Tu dir einen Gefallen und nimm einen RICHTIGEN Pegelwandler. 
74HC4050 und 74HCT125 sind deine Freunde.

> Gibt es zu dieser Schaltung auch noch eventuelle "einfache"
> Alternativen?

Es gibt BESSERE!

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Da sollte die einfache Lösung ausreichen.
Es gibt als Einzelgatter den bidirektionalen 74LVC1T45, der hat zwei 
Versorgungsspannungen, die z.B. 3,3V und 5V betragen dürfen. Aber der 
will noch ein Richtungssignal DIR.
Es gibt auch noch die Schaltung mit MOSFETs als Spannungsbegrenzer, die 
funktionieren ohne Umschaltung in beide Richtungen. Das wird oft am 
I2C-Bus benutzt.
https://www.nxp.com/docs/en/application-note/AN10441.pdf

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

Falk B. schrieb:
> Tu dir einen Gefallen und nimm einen RICHTIGEN Pegelwandler.
> 74HC4050 und 74HCT125 sind deine Freunde.

Vielen Dank dafür! Von denen habe ich auch schon gelesen, ich wollte die 
Schaltung lediglich so einfach und billig wie möglich halten.

Leider würde ein weiterer 74HC4050 bzw. 3 74LVC1T45 die Schaltung nicht 
mehr so "kompakt" halten wie geplant...

Inwiefern ist die Widerstands-Dioden-Schaltung nicht besonders gut?

von Clemens L. (c_l)


Lesenswert?

Stefan schrieb:
> Inwiefern ist die Widerstands-Dioden-Schaltung nicht besonders gut?

Mit den Dioden erzeugt 0 V am Master ca. 0,6 V am Slave. Und wenn der 
Master auf 5 V schaltet, werden die parasitären Kapazitäten in der 
Schaltung nur durch den Pull-Up umgeladen; der Wert des Pull-Ups ist ein 
Kompromiss zwischen Stromverbrauch und Geschwindigkeit.

> Leider würde ein weiterer 74HC4050 bzw. 3 74LVC1T45 die Schaltung nicht
> mehr so "kompakt" halten wie geplant...

Zum Heruntershiften von unidirektionalen Signalen genügt ein beliebiger 
Puffer mit überspannungs-toleranten Eingängen, z.B. 74LVC3G17 (als XSON 
oder BGA wäre er kleiner als dreimal Diode+Pullup).

von Stefan (Gast)


Lesenswert?

Clemens L. schrieb:
> Mit den Dioden erzeugt 0 V am Master ca. 0,6 V am Slave. Und wenn der
> Master auf 5 V schaltet, werden die parasitären Kapazitäten in der
> Schaltung nur durch den Pull-Up umgeladen; der Wert des Pull-Ups ist ein
> Kompromiss zwischen Stromverbrauch und Geschwindigkeit.

Danke für die Erklärung. Also gibt es keine "richtige" Ermittelung für 
den 10k Pull-Up?

Clemens L. schrieb:
> Zum Heruntershiften von unidirektionalen Signalen genügt ein beliebiger
> Puffer mit überspannungs-toleranten Eingängen, z.B. 74LVC3G17 (als XSON
> oder BGA wäre er kleiner als dreimal Diode+Pullup).

Vielen Dank, dieser scheint für 5V als optimal!
Was ich leider vergessen habe zu erwähnen ist, dass ich die Schaltung 
eventuell auch mit 3,3V betreiben würde, was die Pegelschaltung 
überflüssig macht. Somit werden ich den 74LVC3G17 leider nicht verwenden 
können.

von Soul E. (Gast)


Lesenswert?

Stefan schrieb:

> Gibt es zu dieser Schaltung auch noch eventuelle "einfache"
> Alternativen?

Die Dioden kannst Du Dir sparen wenn Dein 5 V - Controller open drain - 
Ausgänge hat. Bzw wenn Du Dir den open drain selber baust indem Du den 
Pin bei Low auf Output Low und bei High auf Input schaltest.

Die Pullup-Widerstände müssen eher klein gewählt werden, damit die 
Anstiegszeit der Signale schnell genug ist.

von A. S. (Gast)


Lesenswert?

Statt Diode und R kannst Du auch einfach 1 ... 10k in die Leitungen 
schalten, wenn Dein 3V Kreis mehr als 0.5 ... 5mA verbraucht und das 
Device keine ungewöhnlichen eingangspins hat.

von Stefan (Gast)


Lesenswert?

Soul E. schrieb:
> Die Dioden kannst Du Dir sparen wenn Dein 5 V - Controller open drain -
> Ausgänge hat. Bzw wenn Du Dir den open drain selber baust indem Du den
> Pin bei Low auf Output Low und bei High auf Input schaltest.

Also benötige ich die Diode nur, wenn es keine fixen Ausgänge gibt bzw. 
wenn dieser nicht standardmäßig auf Open-Drain ist?

Soul E. schrieb:
> Die Pullup-Widerstände müssen eher klein gewählt werden, damit die
> Anstiegszeit der Signale schnell genug ist.

Was heißt eher klein? So in etwa 4k7?

von Stefan (Gast)


Lesenswert?

A. S. schrieb:
> Statt Diode und R kannst Du auch einfach 1 ... 10k in die Leitungen
> schalten, wenn Dein 3V Kreis mehr als 0.5 ... 5mA verbraucht und das
> Device keine ungewöhnlichen eingangspins hat.

Also einfach einen R (1-10k) seriell in die Leitung schalten? Ist das 
ganze dann aber 3,3V UND 5V kompatibel?

von Soul E. (Gast)


Lesenswert?

Stefan schrieb:

> Also benötige ich die Diode nur, wenn es keine fixen Ausgänge gibt bzw.
> wenn dieser nicht standardmäßig auf Open-Drain ist?

Dein Controller darf an seinem Pin niemals High-Pegel (5 V) ausgeben. 
Wenn Du das sicherstellen kannst, brauchst Du keine Diode.

Falls Du die Verbindung in SW steuerst ("bitbanging"), dann schaltest Du 
den Pin für Low auf Output Low und für High auf Input. In diesem Fall 
sorgt der Pullup für den 3,3 V-Pegel.

Wenn Du eine Hardware-SPI verwendest, welche die Pins direkt steuert, 
dann müssen diese auf open drain konfiguriert werden um sich so zu 
verhalten wie oben beschrieben. Ob Dein Controller das kann steht im 
Datenblatt.


>> Die Pullup-Widerstände müssen eher klein gewählt werden, damit die
>> Anstiegszeit der Signale schnell genug ist.
>
> Was heißt eher klein? So in etwa 4k7?

Der Wert hängt ab von der Streukapazität der Leiterbahnen und der 
Portpins.
Bei 3 MHz SPI-Takt und 5 cm Leitungslänge hat sich bei mir 1 kOhm 
bewährt.

Guck Dir die steigende Flanke mit dem Oszilloskop an. Die muss steil 
genug sein, dass die Setup- und Hold-Zeiten (schon wieder Englisch...) 
eingehalten werden.

von A. S. (Gast)


Lesenswert?

Stefan schrieb:
> Also einfach einen R (1-10k) seriell in die Leitung schalten? Ist das
> ganze dann aber 3,3V UND 5V kompatibel?

Signale von 5V zu 3.3 oder 5V sind OK. Auch von 3.3V zu 3.3V.

Was nicht geht, sind von 3.3V nach 5V. Wenn Du das auch brauchst, dann 
müsstest Du schauen, welche Eingangspegel das 5V-Device hat. Meist 
80%Vcc für High, also 4V. Das geht mit diesem Transistor wie bei I2C 
bidirektional oder auch mit einem beliebigen Pegelwandler. Oder mit 
einem 74HCT-Baustein. Das sind zwar keine Pegelwandler, aber die 
brauchen nur TTL-Pegel am Eingang, da reichen die 3.3V.

von Wolfgang (Gast)


Lesenswert?

Stefan schrieb:
> Vielen Dank dafür! Von denen habe ich auch schon gelesen, ich wollte die
> Schaltung lediglich so einfach und billig wie möglich halten.

Ein 74HC4050 kostet in Einzelstückzahlen um die 40ct. Wieviel Aufwand 
willst du denn treiben, um diese Investition zu vermeiden? ;-)

von Drehspulmeßinstrument (Gast)


Lesenswert?

Es gab doch da die ursprüngliche, bidirektionale I2C Schaltung von 
Philips mit den zwei BSS138 FET, die nun auch fix und fertig als Arduino 
Baukastenteil vierkanalig hier https://www.adafruit.com/product/757 oder 
wahlweise vom Chinesen zu haben ist. Oder eben Selbstnachbau. Genial, 
einfach, billig und gut. Ob die nun SPI Fullspeed kann steht natürlich 
auf einem anderen Blatt.

von Manfred (Gast)


Lesenswert?

A. S. schrieb:
> Oder mit einem 74HCT-Baustein.

Reden wir von Einzelstücken oder von Serie?
Ist es wichtig, ob die Summe der Bauteile 5 Euro oder sieben beträgt?
Muß unbedingt Platz gespart werden?

Sowohl für I2C als auch SPI verwende ich den TXS018E, gibt es 
Lochrasterfreundlich als 'Breakoutboard' vom Chinesen um einen Euro und 
der bedient beide Richtungen.

A. S. schrieb:
> Was nicht geht, sind von 3.3V nach 5V.

Da habe ich mal einen 74HCT125 eingesetzt, um den Rückweg eines 
China-µSD-Moduls zum A*-Nano sicher zu machen. Den Wandler in die andere 
Richtung haben die ab Werk drauf. Die meisten Pfuscherschaltungen 
verlassen sich darauf, dass der 5V-AT328 ein 3V-High noch erkennt, ich 
mag das nicht.

Drehspulmeßinstrument schrieb:
> Es gab doch da die ursprüngliche, bidirektionale I2C Schaltung von
> Philips mit den zwei BSS138 FET, die nun auch fix und fertig als
> Arduino Baukastenteil vierkanalig hier

Kenne ich, würde mich am SPI aber lieber nicht drauf verlassen, Thema 
Geschwindigkeit.

von Stefan (Gast)


Lesenswert?

Wolfgang schrieb:
> Ein 74HC4050 kostet in Einzelstückzahlen um die 40ct. Wieviel Aufwand
> willst du denn treiben, um diese Investition zu vermeiden? ;-)

Grundsätzlich wäre ich damit zufrieden, nur stellt sich mir die Frage ob 
das für meinen Fall geht, da ich ja mit 3,3V UND 5V betreiben will.

Manfred schrieb:
> Reden wir von Einzelstücken oder von Serie?

Ein paar Stück... entschuldige für die Angabe, wieviele es sind, weiß 
ich leider noch selber nicht.

Manfred schrieb:
> Ist es wichtig, ob die Summe der Bauteile 5 Euro oder sieben beträgt?
> Muß unbedingt Platz gespart werden?

Naja, da es schlussendlich doch einige Platinen werden, wäre mir 
billiger lieber. Aber nur wegen dem Preis sollte die Qualität/Leistung 
nicht darunter leiden.
Bezüglich Platz. Mir wäre eine platzsparendere Platine von Vorteil :)

von Falk B. (falk)


Lesenswert?

Drehspulmeßinstrument schrieb:
> Es gab doch da die ursprüngliche, bidirektionale I2C Schaltung von
> Philips mit den zwei BSS138 FET, die nun auch fix und fertig als Arduino
> Baukastenteil vierkanalig hier https://www.adafruit.com/product/757 oder
> wahlweise vom Chinesen zu haben ist. Oder eben Selbstnachbau. Genial,
> einfach, billig und gut. Ob die nun SPI Fullspeed kann steht natürlich
> auf einem anderen Blatt.

DAS ist das Problem! Ein I2C Pegelwandler ist schwach, hochohmig und 
langsam, da reden wir von 2-3kOhm Pull-Up Widerstand! Ein echter, 
aktiver Pegelwandler mit einem Baustein hat vielleicht 30-50 Ohm 
Ausgangswiderstand, sowohlb bei LOW und HIGH und ist damit im 
Größenordnungen stärker, schneller und besser!

von Manfred (Gast)


Lesenswert?

Stefan schrieb:
>> Reden wir von Einzelstücken oder von Serie?
> Ein paar Stück...
> entschuldige für die Angabe, wieviele es sind,
> weiß ich leider noch selber nicht.

Kein Problem, letztendlich musst Du kalkulieren.
Eine grobe Abschätzung 10 Stück oder 5000 sollte schon vorliegen.

> Manfred schrieb:
>> Ist es wichtig, ob die Summe der Bauteile 5 Euro oder sieben beträgt?
>> Muß unbedingt Platz gespart werden?
>
> Naja, da es schlussendlich doch einige Platinen werden,
> wäre mir billiger lieber.

Musst Du kalkulieren.

> Aber nur wegen dem Preis sollte die Qualität/Leistung
> nicht darunter leiden.

Auch, falls ich mich wiederhole: Ein korrektes Schaltungsdesign 
erfordert nach meinem Gefühl ein IC, welches für diese Aufgabe 
spezifiziert ist.

> Bezüglich Platz.
> Mir wäre eine platzsparendere Platine von Vorteil :)

Ich hatte den TXS0108E erwähnt, der benötigt auf jeden Fall weniger 
Platz als zwei 74xxx. Der hat noch eine kleine Schwester TXS0104E, mit 
der ich aber noch nichts gemacht habe.

Ich denke, Du solltest Dir die Baureihe TI-Pegelwandler anschauen, dabei 
unbedingt die Nachsetzbuchstaben beachten.

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.