MCP23017 mit 5V betreiben

  • Hallo zusammen,

    für die Porterweiterung des Raspi verwende ich den Baustein MCP23017...insgesamt 8 Stück (64 Eingänge / 64 Ausgänge). Da die Ausgänge über LEDs angezeigt werden sollen, und das den maximalen Strom von 50mA des PIs überschreitet, möchte ich den MCP über eine externe Spannungsquelle versorgen.
    Das einfachste wäre jetzt eine 5V Spannungsquelle zu verwenden, da ich diesen Pegel für andere Komponenten auch benötige. Laut Datenblatt des MCP sollte dieser sogar 5,5V verkraften. Das Blöde ist jetzt, ab ca. 4,5V funktioniert der MCP nicht mehr, d.h. er wird nicht mehr am Bus erkannt. Reduziere ich die Spannung wieder, funkt wieder alles.

    Hat jemand von euch den MCP23017 schon mal mit 5V betrieben??? Wenn es irgendwie geht, möchte ich mir den DC-DC Wandler / Spannungsregler sparen. Schon mal Danke für eure Antworten ;)

    Gruß, Rednose

  • Hast Du mal die Anzahl der ICs reduziert und z.B. nur einen probiert?
    I2C sollte OC sein, und die Pullups dafür sind am RPi ...
    Also ich wüsste jetzt ehrlich gesagt ad hoc nicht, warum das nicht funktionieren sollte :s
    Mit 3V3 geht's, oder wie?

    cu,
    -ds-

  • Mit 5V: Bau einen Pegelwandler 3.3V zu 5V für I2C ein. Benötigt zwei Transistoren BSS138 und 4 Widerstände.

    Mit 3.3V: Niemand zwingt Dich, für die Versorgung der MCPs die 3.3V aus dem Raspi zu nehmen, nimm einen externen Schaltwandler 5V auf 3.3V ausreichender Leistung. Ich würde aber noch je 100ohm in die beiden Datenleitungen vom Raspi schalten, um die Pins bei ausfallender externer Versorgung zu schützen. Und natürlich darfst Du die 3.3V des Raspi nicht mit den externen 3.3V verbinden.
    Automatisch zusammengefügt:

    Also ich wüsste jetzt ehrlich gesagt ad hoc nicht, warum das nicht funktionieren sollte

    Weil der MCP bei 5V einen höheren Pegel als high erkennt als bei 3.3V. Zwar wird der Pegel, der vom Raspi mit 3.3V vorgegeben wird als solcher akzeptiert. Aber beim Übergang low=>high folgt der Spannungsanstieg einer Exponentialfunktion, weil die Leitungskapazität über die Pull-up-Widerstände geladen werden muss. Durch die verschobenen Pegel wird die Schaltschwelle später erreicht und das Timing kommt durcheinander.

    Natürlich kann sowas auch passieren, wenn die kapazitive Last am I2C zu hoch wird, durch zu lange Leitungen oder zu viele Pins (jeder Pin hat eine Eingangskapazität). Dafür gibt es dann Leitungstreiber. Aber dann würde es auch bei 3.3V schon nicht funktionieren.

    Einmal editiert, zuletzt von Timm Thaler (5. Dezember 2016 um 00:42)

  • Hi,

    bitte killed mich nicht wenn ich Falsch liege.

    Der I2C Bus am RPI ist ein OC mit 3.3V.
    Laut Datenblatt des MCP23017 muss auf SCL/SCK für ein High Signal, VIH (Voltage Input High) 0.8 VDD bis VDD anliegen.
    Bei einer Versorgungsspannung von 5V würden 0.8 VDD 4Volt entsprechen. Die Spannung wird nicht erreicht.
    Bei 4.5V wäre es dann auch noch 3.6V. Da dürften evtl. Toleranzen noch mitspielen.

    Cheers!

  • Hallo zusammen,

    zunächst vielen Dank für eure Beiträge! :bravo2:

    Zitat

    ... Laut Datenblatt ... 0.8 VDD bis VDD anliegen.


    Das erklärt natürlich einiges...und das erklärt natürlich auch, warum der MCP bis ca. 4,5V funktioniert.

    Jetzt muss ich mir die Frage stellen, wie ich die 5V am Einfachsten auf 3,3V bringe :s . Der PCA9515 kommt für mich eher nicht in Frage, vor allem auch wegen dem Satz in der Doku "Two or more PCA9515s cannot be put in series".
    Zum Thema DC-DC Wandlung stolpert man immer wieder über die Begriffe Linearregler, Schaltregler und Z-Diode. Hat jemand eine Empfehlung, welche Methodik man für die Spannungswandlung von 5V auf 3,3V idealerweise verwendet?!?!

    Gruß, Rednose

  • Hi,
    ich schmeiss mal -> den AMS1117-3.3 <- in den Raum ... die hab' ich hier oft im Einsatz: braucht nur zwei Kondensatoren, bringt bis zu 1000 mA und wird Dir in der Bucht hinterhergeschmissen ...
    cu,
    -ds-

  • Hallo Rednose,


    ... maximalen Strom von 50mA des PIs überschreitet,


    Die 50mA beziehen sich nicht auf die Belastung des Schaltreglers sondern auf die GPIO's. Insofern könntest Du sehr wohl die Versorgungsspannung der MCP's zunächst mal aus dem Raspi ziehen...


    Das einfachste wäre jetzt eine 5V Spannungsquelle zu verwenden, da ich diesen Pegel für andere Komponenten auch benötige.


    Das Einfachste wäre hier, den MCP23017 durch einen MCP23018 zu ersetzen. Der ist pinkompatibel und dessen IO sind 5V tolerant (bei einer Versorgungsspannung von 3,3V).

    Einen Levelshifter zu bauen ist aber auch kein Hexenwerk, wie Timm Thaler schon schrieb. Schau mal >>> hier <<<. Seite 4 und zwei 2N7000 (oder BSN20...) sind Deine Freunde. Die Pullups auf der Raspiseite (3,3V) läßt Du weg - der hat eh' schon welche. Auf der 5V-Seite kannst Du mal mit 1,8k anfangen und ggf. noch variieren.

    Schöne Grüße

    schnasseldag

  • Servus dag ...


    ... Die 50mA beziehen sich nicht auf die Belastung des Schaltreglers ...

    hm ... tun sie afair schon ;)

    Zitat


    Maximum permitted current draw from the 3v3 pin is 50mA.


    ich hab' da auf die Schnelle zu dem Thema jetzt nur -> das hier <- gefunden ....

    btw: das Problem mit den Käfern war ja, dass bei einer Versorgung mit 5V die Bausteine nicht mehr erkannt wurden, weil die Pegel nicht mehr stimmten ( RSPB Richi hatte -> hier darauf hingewiesen <- ).

    Wenn ich jetzt die Einschränkung mit den 50 mA einbeziehe erscheint es mir am sinnvollsten, einfach 5V abzugreifen und auf 3V3 runterzuregeln. Damit ist sowohl das Problem der Spannungsversorgung als auch das der Bus-Pegel erledigt ;)

    cheers,
    -ds-


  • Servus dag ...

    hm ... tun sie afair schon ;)


    ich hab' da auf die Schnelle zu dem Thema jetzt nur -> das hier <- gefunden ....

    Wenn Du einen Blick in die Schematics des Raspi R 1.0 wirfst (26 Pin GPIO), dann siehst Du dort einen NCP1117-3v3, der 1A liefert. Ich kann mir nicht vorstellen, daß das Schaltungslayout so gewählt wurde, daß bei 1A Auslegung neben den On-Board IC's nur noch 50mA zusätzlich entnommen werden dürfen. Das hieße, man reserviert sich (oder benötigt) 95% der Leistung des Linearreglers für den Normalbetrieb? Ich halte das eher für unwahrscheinlich?! Die späteren Designs mit PAM2305 Stepdownwandler (den genauen Typ habe ich nicht gefunden) verwenden Drosseln zur Glättung je 2A. Der PAM2305AX-Typ leistet ebenfalls 1A.
    Quellen: https://github.com/raspberrypi/do…rypi/schematics

    Aber selbst 8 MCP23017 benötigen bei unbelasteten IO's gerade mal je 1mA. Da sind wir weit weg von 50mA. Die "Nichterkennung" bei 5V liegt eindeutig in den Pegeln - wie bereits geschrieben.


    Ich tippe hier auf einen Dokufehler (mindestens jedoch auf eine extrem pessimistische Betrachtung wie LAN, HDMI, USB, CPU usw. auf Vollast), lasse mich aber gern eines Besseren belehren, insbesondere durch Meßreihen - kennst mich ja. ;) Wie weit man von der Grenze weg ist, müßte sich ja ggf. per Temperaturmessung abschätzen lassen...

  • Wenn Du einen Blick in die Schematics des Raspi R 1.0 wirfst (26 Pin GPIO), dann siehst Du dort einen NCP1117-3v3, der 1A liefert...

    Leider gehst Du hier von mehreren falschen Annahmen aus:

    1. Der 1117 ist ein Linearregler. Die Spannungsdifferenz wird verbraten. Macht bei 1.7V und 1A fast 2W, die abgeführt werden wollen, das ist bei der Bauform eigentlich gar nicht möglich. Nicht umsonst gibt es für den Pi 1 auch Schaltregler zum Nachrüsten.

    2. Die MCPs mögen so wenig Strom ziehen, aber er will da LED dranhängen, und wenn ich es richtig verstanden habe direkt aus den MCP ansteuern. Bei 64 LED kommt da schon Einiges zusammen.

  • Um das Problem zu lösen, wirst Du mMn um einen DC/DC Wandler nicht umhin kommen. Eine einfache Möglichkeit wäre, wie schon weiter oben vorgeschlagen eine Lösung wie diese:
    https://www.mikrocontroller.net/attachment/11546/levelshifter.pdf
    Für solche Fälle habe ich mal eine Platine erstellt, da ich davon immer mal wieder einen benötige:
    4fach Bidirektionaler Levelshifter / Pegelwandler

    Wenn es etwas weiter gehen soll und zusätzlich eine galvanische Trennung vorgenommen werden soll, könnte man einen ADUM1250 nehmen. Der Aufwand für die externe Beschaltung hält sich in Grenzen, da er im Grunde nur aus den I²C Pullups besteht. Aber soweit ich weiß, gibt es den nur in SMD.

  • Timm Thaler: Eben weil beim Linearregler die Dropoutvoltage sich über den Stromfluß direkt proportional in Wärme umwandelt, läßt sich anhand der Wärme einigermaßen abschätzen, ob Die Spannungsversorgung der MCP's hier nun die Schwachstelle des Schaltungsaufbaus darstellt oder nicht. Beträgt die Temperatur des Linearreglers bei gegebenem Schaltungsaufbau 100°C, na dann würde ich ihn nicht weiter belasten. Beträgt sie 40°C bei Raumtemperatur, na dann besteht noch Luft. Ich stimme Dir zu, daß sich 2 Watt über die Leiterplatte und gegebener Bauform schwerlich ableiten lassen. Mithin kann die Obergrenze von 1A des Schaltreglers nicht als praktisch und langfristig verträgliche Obergrenze angesehen werden. Umso schwammiger wirkt dabei natürlich eine Spezifikation die besagt, daß "50mA zusätzlich gezogen werden dürfen". Da hätte man auch 60mA, 100mA, 5mA oder sonst etwas schreiben können.

    Der TE will LED's an den MCP anschließen. Da kommt es nun darauf an welche und wie. Sicherlich ist 64 x xmA eine große Zahl wenn x nur entsprechend groß wird. Und leicht findet sich eine LED, sodaß x zu einem Gesamtstrom eines halben Ampere und viel Wärme führt. Da hast Du völlig Recht!

    @All: Dennoch halte ich den Weg an der "dünnsten Stelle" anzusetzen und den I2C-Bus auf 2 Kabeln (SDA/SCL) auf 5V zu shiften für besser, als alle MCP's über eine zweite separate 3,3V Stromversorgung laufen zu lassen (zumindest, wenn keine zwingenden Gründe dafür vorliegen). Tatsächlich schreibt der TE: "Das einfachste wäre jetzt eine 5V Spannungsquelle zu verwenden, da ich diesen Pegel für andere Komponenten auch benötige.". Er möchte mit 5V weiterarbeiten! Wie macht er das, wenn die MCP's über 3,3V laufen? Klar über 64 Treiberstufen. Man mag jetzt sagen, die braucht er sowieso, weil "dahinter kommt ja was, was auch Strom braucht"?! Vielleicht braucht er sie, vielleicht auch nicht?! Wir wissen es nicht, da wir nichts vom Schaltplan kennen. "Billiger", als mit 2 Transistoren und 2 Widerständen bekommt er die Schaltung aber sicher nicht. Falls jemand eine Idee hat, dann würde mich das sehr interessieren. (Der MCP23018 scheidet als Antwort aus, diese Lösung hatte ich schon weiter oben erwähnt. ;) )

  • Hallo,

    danke für eure Beträge!

    Zitat

    Der TE will LED's an den MCP anschließen. Da kommt es nun darauf an welche und wie. Sicherlich ist 64 x xmA eine große Zahl wenn x nur entsprechend groß wird.


    Es sind 20mA Leds...da kommt dann schon ein bisschen was zusammen.


    Zitat

    Er möchte mit 5V weiterarbeiten! Wie macht er das, wenn die MCP's über 3,3V laufen? Klar über 64 Treiberstufen. Man mag jetzt sagen, die braucht er sowieso, weil "dahinter kommt ja was, was auch Strom braucht"?! Vielleicht braucht er sie, vielleicht auch nicht?! Wir wissen es nicht, da wir nichts vom Schaltplan kennen.


    Schaltplan gibt's leider keinen ordentlichen ;) . Aber als Ein- und Ausgangstreiber für den MCP verwende ich jeweils einen ULN2803. Für die Eingangsseite des MCP habe ich die internen 100k Pull-Ups aktiviert. Und zwischen MCP-Ausgang und ULN-Eingang werden die LEDs geschalten.

    Ich habe mich jetzt für eine Lösung mit einem LM317T entschieden...funkt fürs erste mal sehr gut! Ich denke, von 5V auf 3.3V ist es auch erträglich was verbraten wird und die Lösung ist sehr pragmatisch.

    Gruß, Rednose

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!