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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Endgame (Gast)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Ebay-Artikel Nr. 252742078456

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

von Herman Kokoschka (Gast)


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

von Gustl B. (gustl_b)


Bewertung
0 lesenswert
nicht lesenswert
TXS0104E

von jo mei (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 H. (crazy_h)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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-)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
von Gustl B. (-gb-)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


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

Ja, ganz primitiv.

von Maxim B. (max182)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.