Hallo, ich versuche gerade ein Accelerometer (MMA8452q) zum Laufen zu bekommen und habe da ein Verständnisproblem mit den logic levels. Der Sensor braucht 3,3V. Der Arduino liefert aber 5V. Im Tutorial von Sparkfun (https://learn.sparkfun.com/tutorials/mma8452q-accelerometer-breakout-hookup-guide/example-hookup) werden einfach zwei 330 Ohm Widerstände seriell in die Datenleitungen gehängt (siehe Bild). Wie führen die Widerstände nun zu einer Anpassung der Spannung von 5V auf 3,3V? Vielen Dank und beste Grüße!
Lukas Neumann schrieb: > Wie führen die Widerstände nun zu einer Anpassung der Spannung von 5V > auf 3,3V? Murksig. AN10441 von NXP sagt wie mans richtig machen kann.
Der Arduino / Atmega 328P nimmt einen Pin ab 0,6*Vcc, also 3,0V bei 5V sicher als HIGH an. Es ist kein Problem bei einem 5V Arduino I2C mit 3,3V Bus-Spannung zu betreiben - hab ich auch praktisch schon mehrfach gemacht. Auf Level-Shifting kann man hier verzichten. Einfach die internen Pullups des Atmega 328P deaktivieren und selber ~10k gegen 3,3V legen. Je nach Anwendung kann man natürlich auch den Arduino mit 3,3V betreiben, wobei das Datenblatt sagt dass er dann theoretisch nicht mehr mit 16 MHz laufen darf.
Das heißt bei dem 330 Ohm Widerstand fällt einfach ein bisschen Spannung ab, sodass der Pegel dann eher irgendwo bei 3,3V liegt. Seh ich das richtig? Wieviel Strom fließt denn da in den Sensor? Würde gerne nachvollziehen können wieviel da abfällt.
Das ist eine interessante Frage. Habe mich kurz durchgegoogelt, ein Fragen bleiben aber offen: - es sind nirgends I2C Pull-Up-Widerstände. Auch auf dem Arduino nicht. Sind evtl. im ATMega328P welche Softwaremässig aktivierbar? Im DaBla sah ich nichts auf die Schnelle. - der MMA8452Q hat in den AMR "Input voltage on any control pin (SA0, SCL, SDA) Vin –0.3 to VDDIO + 0.3 V", also max. 3.6! SCL und SDA sind Open-Drain, sind da auch Body-Dioden drinn? Die würden die Spannung begrenzen... Wenn es also Pull-Ups braucht, könnte man die auf der 3.3V-Seite reintun. Sonst wären wohl richtige Level-Shifter die sauberste Lösung! Gruss Chregu
Tom schrieb: > Einfach die internen Pullups des Atmega 328P deaktivieren und selber > ~10k gegen 3,3V legen. 10kΩ Pull-Up für einen I2C mit 3,3V ist arg wenig. Wenn man dann einen vernünftigen Strom fließen läßt, spielen die 20..50kΩ der internen Pull-Ups keine wirkliche Rolle, m.a.W. es ist eigentlich egal, ob die aktiv sind oder nicht. VDDIO+0.3V sind zulässig, d.h. unterhalb von 4.3kΩ für den Pull-Up nach 3,3V ist man innerhalb der Spezifikation. Abgesehen davon, schadet es niemandem, wenn die 70µA vom internen Pull-up des ATmega328 durch die Schutzdiode des MMA8452Q fließen würden (ohne Pull-Up nach 3,3V), auch wenn dazu nichts im Datenblatt steht.
Hab mal die Schematics vom Breakout Board eingefügt. Die Pull-Up-Widerstände für die I2C Leitungen sind da schon drauf.
Tom schrieb: > Der Arduino / Atmega 328P nimmt einen Pin ab 0,6*Vcc, also 3,0V bei 5V > sicher als HIGH an. Doller Störabstand, und das auch noch bei o.C. Für den Bastelwastel mags reichen...
Ja habe grad genauer gelesen: Die internen Pull-Ups im Atmega kann man disablen! Mach doch das! Gruss Chregu
hinz schrieb: > Doller Störabstand, und das auch noch bei o.C. Die AN10441 als vernünftige Lösung wurde genannt. Was will man dem hinzufügen ...
Man kann sich jetzt natürlich kräftig aufpusten und auf den minimalen high-Pegel 0,7 x VDD bestehen. Nur bringt es im vorliegenden Fall nichts. Störsicherheit und IIC passen sowieso nicht zusammen. Sieht man genauer ins Datenblatt eines ATmega328, dann kann man erkennen, daß für alle Eingangssignale jeweils ein einziger Schmitt-Trigger zuständig ist, dessen typ. VOH bei 2,6 V liegt. Das reicht (erwiesenermaßen) zur IIC-Kommunikation mit einem 3,3 V Baustein aus.
Hallo, in AN10441 wird schön gezeigt, wie es geht. Nur, welche Kleinsignal-Mosfets wären dafür geeignet? MfG
Christian M. schrieb: > Ja habe grad genauer gelesen: Die internen Pull-Ups im Atmega kann > man > disablen! Mach doch das! Das heißt die Spannung der I2C Leutungen liegt dann auf 3,3V und damit is gut? KAnn ich mir dann die 330Ohm Widerstände sparen? Wolfgang schrieb: > Die AN10441 als vernünftige Lösung wurde genannt. Was will man dem > hinzufügen ... Die Frage war ja eigentlich was die 330 Ohm Widerstände genau bewirken und wie sich dadurch das Level anpasst. Ich bin noch nicht so fix in der Elektrotechnik und würde Zusammenhänge gerne verstehen lernen anstatt Dinge einfach so hinzunehmen.
Was die 330 Ohm Widerstände hier konkret bewirken sollen ist mir auch schleierhaft, da sie zumindest in der vorliegenden Standard-Konfiguration in Serie mit den internen Pullups des Atmega liegen, welche ein bis zwei Größenordnungen größer sind, und somit vernachlässigbar sind. Normal hat man solche Serienwiderstände, da die Eingänge eines 3,3V ICs typischerweise mit Schutzdioden gegen Vcc beschaltet sind. Diese leiten also alles ab was größer 3,3V (+Spannungsabfall der Diode) ist und somit würde ein riesen Strom entstehen wenn man 5V anlegt und der IC zerstört werden. In dem Fall begrenzt der Serienwiderstand den Strom sodass die Schutzdioden nicht kaputt gehen und die Eingangsspannung dann even Vcc+Diode beträgt. Wenn du die internen Pullups des Atmega328P abschaltest (und ja bloß nie die Ausgänge auf HIGH setzt!) kannst du dir die 330 Ohm sparen. Die sind einfach nur für den Worst Case da, falls du doch mal 5V/HIGH an den Bus anlegst. Für I2C/TWI werden die IOs nur zwischen LOW und INPUT (ohne Pullup) umgeschalten. Bzg. 3,3V Bus und Störabstand... Man wird die Pullups bei hohen Datenraten evtl. nochmal weiter reduzieren müssen damit die Flanken schärfer werden... Trotzdem, ich hab schon länger einen 5V Atmega382P (Slave) via I2C an einem 3,3V ESP8266 (Master). Ich hab damals, eben wegen dieser Frage, 24h lang Daten mit 2 MHz fehlerfrei übertragen. War mir zuverlässig genug...
Bestell Dir ein solches Bord und gut ist es: http://www.ebay.com/bhp/level-shifter Die Dinger funktionieren einwandfrei und sind spottbillig und sehr klein. Sie sind nach der von NXP vorgeschlagenen Schaltweise mit Klein MOSFETs konzipiert. Ist ideal für zusammengewürfelte Steckbrettprojekte. Auch sonst lassen sie sich nutzbringend einsetzen. Vorteil ist, dass keine Anpassungen am 5V Teil notwendig sind. Gerhard
Sich auf die CMOS Chip Schutzdioden mittels Strombegrenzung zu verlassen kann bei gewissen ICs in die Hose gehen. Mir ist diesbezüglich mal ein Faux Pas passiert. Ein gewisser 24-bit ADC den ich mal verwendete, hatte an den Eingängen so geringe zulässige Eingangschutzdioden Strombegrenzungswerte, dass dem Datenblatt nach bei Überlastung trotz Eingangschutzwiderständen auch mit nur 1mA Überstrom durch die Device Schutzdioden mit möglichen Latchup gerechnet werden müsste. Das konnte beim diesbezüglichen absichtlichen Testen auch bestätigt werden. Das ist Hersteller und Device abhängig. Also immer diesbezüglich das Datenblatt lesen und sich danach halten. Bei vielen uC hat man diesbezüglich viel mehr Spielraum und man verläßt sich darauf. Nicht alle amderen Bauteile verhalten sich ähnlich. "Don't take anything for granted!" Gerhard
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.