Forum: Mikrocontroller und Digitale Elektronik Level-Shifter für SPI


von Endgame (Gast)


Lesenswert?

Hallo,

ich habe eine Platine mit einem ATMEGA1284 der auf 5V läuft.
Nun soll das Projekt um ein neues OLED Grafikdisplay (EA OLEDL128-6) 
erweitert werden, was jedoch 3.3V Logik-Pegel (SPI) benötigt.

Die 4 SPI Pins CLK, MOSI, CS und D/C müsste ich daher von 5V auf 3.3V 
transformieren.

Beim UART (19200baud) habe ich mir schon mit einem Spannungsteile 
beholfen 1K/2K. Aber für SPI dürfte diese Lösung nicht geeignet sein.

Kann jemand einen Level-Translator empfehlen, der sich für SPI gut 
eignet?
Am liebsten wäre mir natürlich billig, SMT und "handlötbar".

Reicht ein 74HC4050 für SPI?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Endgame schrieb:
> Kann jemand einen Level-Translator empfehlen, der sich für SPI gut
> eignet?

SPI hat ja den Vorteil, dass alle Leitungen unidirektional sind.

Maxim hatte sowas mal, weiß nicht, ob's die noch gibt.

Yep, MAX3391 oder MAX3392 sollte da passen. Digikey hat ihn 
beispielsweise.

von S. Landolt (Gast)


Lesenswert?

> Spannungsteile ... für SPI dürfte diese Lösung nicht geeignet ...
Wäre vielleicht doch einen Versuch wert.
  Ich betreibe an einem ATmega1284 (mit 24 MHz) zwei SDCards mit 
Spannungsteiler (in der SDC-Richtung) mit einem Takt von 12 MHz seit 
einigen Jahren völlig problemlos.

von jo mei (Gast)


Lesenswert?

Endgame schrieb:
> Reicht ein 74HC4050 für SPI?

Ja kann man machen.

Hier z.B. macht es jemand:

Beitrag "Re: ILI9341 langsam Verbesserungsvorschläge?"

Oder man nimmt die "handelsüblichen" Arduino-Bauteile.

https://www.ebay.de/itm/4-Kanal-Pegelwandler-I2C-5V-3-3V-Level-Shifter-Konverter-Arduino-Raspberry-Pi/252742078456?hash=item3ad89a0ff8:g:pKkAAOSwCK1b6qwj

Wenn man die Platine nicht will klatscht man sich die 4 Transistoren
und paar Widerstände selbst zusammen. BSS138 Schaltungsvorschlag ...

von Herman Kokoschka (Gast)


Lesenswert?

Schiesst nicht wieder mit Kanonen auf Spatzen.
Widerstände reichen da völlig.

von Gustl B. (gustl_b)


Lesenswert?

TXS0104E

von jo mei (Gast)


Lesenswert?

Herman Kokoschka schrieb:
> Widerstände reichen da völlig.

So ein Spannungsteiler stösst bei höheren SPI Taktraten
an seine Grenzen.

von Herman Kokoschka (Gast)


Lesenswert?

jo mei schrieb:
> So ein Spannungsteiler stösst bei höheren SPI Taktraten
> an seine Grenzen.

Natürlich.
Aber nicht bei so einem Display.

von Bauform B. (bauformb)


Lesenswert?

jo mei schrieb:
> Herman Kokoschka schrieb:
>> Widerstände reichen da völlig.
>
> So ein Spannungsteiler stösst bei höheren SPI Taktraten
> an seine Grenzen.

Was wiederum EMV-mässig günstig ist (wenn der "obere" Widerstand direkt 
am uC sitzt). Wenn die 3.3V fehlen, ist der 4050 wieder im Vorteil; bei 
solchen Display-Treibern traue ich den Eingangsschutzdioden nicht allzu 
viel zu.

: Bearbeitet durch User
von Selenium (Gast)


Lesenswert?

Bei dem Display (unidirektional) dürfte es völlig ausreichen, CLK und 
MOSI über einen Level-Translator zu schicken.
CS und D/C sind bei weitem nicht so schnell - da reicht auch ein 
Spannungsteiler.

von Markus M. (adrock)


Lesenswert?

Ich nehme gerne die kleinen von TI:

SN74LV1T34
SN74LV1T125

Ja, ist sicher die "premium" Lösung, aber warum sich mit Krücken 
zufrieden geben, wenn es auf die paar Cent nicht ankommt.

von MJ (Gast)


Lesenswert?

Schau mal die LVC Logikfamilie an. Da kannst du zumindest schon mal 5V 
nach 3,3V umsetzen, wenn du das Gatter mit 3,3V betreibst, z.B. die 
buffer 74lvc126 oder tri-state bus Treiber 74lvc245.
3,3V könnten als High-Pegel am Eingang reichen, ansonsten geht da ein 
single Gatter mit TTL kompatiblen Eingängen, z.B. 74AHCT.

Gibt aber direkt für SPI gedachte High-speed Pegelwandler. Da kannst du 
bei TI mal auf der Seite suchen, aber Standardlogik ist meist am 
günstigsten.

von Crazy Harry (crazy_h)


Lesenswert?

Ich verwende dafür (uSD-Karte an Mega1280) immer einen 74VHC08 betrieben 
mit 3.3V. Die Eingänge sind 5V-tolerant.

von Schmierfett (Gast)


Lesenswert?

Gustl B. schrieb:
> TXS0104E

Hallo,

bin gerade zufällig hierüber gestolpert und klink' mich einfach mal ein 
;)

Mein SPI Slave benötigt 3V, mein SPI Master kann nur 5V. Den 
angesprochenen TXS0104E finde ich sehr interessant, zumal er wesentlich 
günstiger ist als die MAX3372/92

Allerdings frage ich mich, wie ich OE sinnvollerweise beschalte.
Der darf nur 3.3V und aus meinem µC kommen ja 5. Ginge das wiederum mit 
einem Spannungsteiler? Etwa so:
1
 
2
<µC-Pin>--------+
3
                |
4
               [10K]
5
                |
6
                +----<TXB0104.OE>
7
                |
8
               [20K]
9
                |
10
GND-------------+

Dann wäre der 20K Widerstand gleichzeitig auch Pulldown beim Startup, 
oder?

von Gustl B. (-gb-)


Lesenswert?

The TXS0104E is designed so that the OE input circuit is supplied by 
VCCA.

Du verbindest also OE direkt mit VCCA. Wieso willst du das mit dem uC 
schalten? Ich verwende den Stein auf mehreren Platinen auch für SPI und 
der funktioniert wunderbar wenn OE dauerhaft High ist.

Aber ja, der Spannungsteiler sollte funktionieren. Oder eben ein zweiter 
Pegelwandler für den OE^^.

: Bearbeitet durch User
von Peter S. (cbscpe)


Lesenswert?

Wenn kein MISO benötigt wird (keine Daten von Slave, so wie dieses OLED) 
spielt es keine Rolle ob du einen Spannungsteiler oder eine Pegelwandler 
nimmst. Kritisch wird es erst wenn die Laufzeit vom CLK zum Slave und 
zurück vom Slave zum Master (MISO) grösser als der halbe SPI Takt wird. 
In solchen Fällen nehme ich den 74HC4050. (und nicht den CD4050 wie ich 
mal fälschlicherweise eingebaut hatte, warum sind SMD Teile auch immer 
so klein beschriftet :-).

Ich kannte den TXS0104E auch nicht, der kommt wohl das nächste mal zum 
Zug, sieht sehr gut aus.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Schmierfett schrieb:
> Ginge das wiederum mit einem Spannungsteiler? Etwa so:

Ja, aber niederohmiger. Ich würde es mit 1kΩ und 2,2kΩ versuchen. 
Vielleicht sogar noch weniger - je nach Übertragungsrate und 
Anforderungen an die Flankensteilheit. Ist bei OE vielleicht noch egal, 
aber bei MOSI und SCK wichtig.

von Gustl B. (-gb-)


Lesenswert?

Welche Datenrate willst du darüber machen? Der TXS0104E kann nur maximal 
24 MBit/s. Wenn du mehr willst kann ich dir den TXS0108E empfehlen. 
Warum auch immer ist der eine Ecke schneller und kann 110 MBit/s.

von Manfred (Gast)


Lesenswert?

Gustl B. schrieb:
> kann ich dir den TXS0108E empfehlen.

Den gibt es aus Fernost günstig auf Platinchen, habe ich sowohl am SPI 
als auch I2C mehrfach eingesetzt.

Ist nur eine Richtung gefragt, haben die China MikroSD-Platinchen einen 
74LVC125 drauf, den bekommt man auch günstig. Der wird mit 3V3 
betrieben, darf aber 5V an den Eingängen.

In der Gegenrichtung, 3V3-Signal auf 5V-µC, habe ich einen 74HCT125 in 
die Schaltung geschraubt - der erkennt high ab 2 Volt.

von Peter S. (cbscpe)


Lesenswert?

Bei einem AVR mit 24 MHz kann SPI maximal 12MHz sein und im Datenblatt 
steht, dass SPI maximal 10MHz sein darf, der TXS0104E reicht also.

von Clemens L. (c_l)


Lesenswert?

Schmierfett schrieb:
> Allerdings frage ich mich, wie ich OE sinnvollerweise beschalte.
> Der darf nur 3.3V

Nein, OE verträgt auch 5 V.

von Pandur S. (jetztnicht)


Lesenswert?

Man kann auch etwas bescheissen. HCMOS schaltet bei 2/3 Vcc. 3.3V sind 
grad 2/3 von 5V. Wenn man also an den 5V etwas dreht und/oder an den 
3.3V etwas dreht ist man auf der sicheren Seite. Man kann die 5V zB auf 
4.6V erniedrigen, oder 3.3V auf 3.5V hoch.

von Stefan F. (Gast)


Lesenswert?

Joggel E. schrieb:
> Man kann auch etwas bescheissen. HCMOS schaltet bei 2/3 Vcc. 3.3V sind
> grad 2/3 von 5V. Wenn man also an den 5V etwas dreht und/oder an den
> 3.3V etwas dreht ist man auf der sicheren Seite.

Korrekt. Ich habe deswegen schon einige Arduino Nano Module absichtlich 
mit 4,3V betrieben.

von Rudolph R. (rudolph)


Lesenswert?

Stefan ⛄ F. schrieb:
> Korrekt. Ich habe deswegen schon einige Arduino Nano Module absichtlich
> mit 4,3V betrieben.

Hmm, per Diode in der 5V Versorgung?

von Stefan F. (Gast)


Lesenswert?

Rudolph R. schrieb:
> Hmm, per Diode in der 5V Versorgung?

Ja, ganz primitiv.

von Maxim B. (max182)


Lesenswert?

Endgame schrieb:
> Hallo,
> Kann jemand einen Level-Translator empfehlen, der sich für SPI gut
> eignet?
> Am liebsten wäre mir natürlich billig, SMT und "handlötbar".

SO-14 ist zwar SMD, aber mit 1,27 mm Pin immer noch gut lötbar.
SCK, MOSI und SS: 74LVC14A Inv. paarweise. 74VHC08. 74VHC573. Und noch 
1000 Variante aus LVC und VHC.
MISO: 74HCT125 oder andere Ventile aus HCT-Serie.

> Reicht ein 74HC4050 für SPI?
Für SCK, MOSI und SS reicht. Für MISO brauchst du etwas noch, mit 5 Volt 
Vcc und Schwellspannung zwischen ca. 1 und 2,5 Volt. HCT-Serie paßt gut.

Gustl B. schrieb:
> Der TXS0104E kann nur maximal
> 24 MBit/s. Wenn du mehr willst kann ich dir den TXS0108E empfehlen.
Die sind gut, aber alles andere als "gut handlötbar".

: Bearbeitet durch User
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.