Forum: Mikrocontroller und Digitale Elektronik ATmega2560 Logik Level und Pull-Up-Widerstände für UART, I2C, SPI


von Hans F. (snuff)


Lesenswert?

Hallo Community

Ich versuche gerade ein kleines Projekt zu realisieren bei dem im 
diverse Schnittstellen (UART, SPI, I2C) verwenden möchte. Bei der 
Beschaltung und Betrieb dieser Schnittstellen habe ich aber noch einige 
Unklarheiten und bräuchte etwas Hilfe.

Das Board das ich verwende ist ein Arduino Mega 2560 R3

Erstmal zwei Grundlegende Fragen:

1. Das Board wird mit 5V Betrieben. Der Logik-Output-Pegel des Boards 
ist gemäss Datenblatt damit minimal 4.2V für HIGH und maximal 0.9V für 
LOW. Gilt dies für alle Schnittstellen, also auch für die Anschlüsse von 
SPI, UART und I2C? Ich frage deshalb weil viele Peripheriegeräte für 
diese Schnittstellen einen Logik-Pegel von 3.3V verwenden.

2. Die digitalen Ein/Ausgänge können mit einem Internen 
Pull-Up-Widerstand beschalten werden, welcher sich manuell aktivieren 
lässt. Ist dies für die Datenleitungen von SPI, UART und I2C auch 
möglich? Falls ja, müssen diese manuell aktiviert werden? Oder haben 
diese Schnittstellen schon einen fixen Pull-Up-Widerstand da dieser ja 
eigentlich immer benötigt wird?

Die nächsten Fragen beziehen sich etwas spezifischer auf Peripherie. Im 
ersten Fall geht es konkret um das RTC Modul Ds3231.
https://www.distrelec.ch/Web/Downloads/_t/ds/ds3231_eng_tds.pdf

3. Das Modul möche ich am I2C Bus betreiben. Dieses IC kann gemäss 
Datenblatt mit 2.3V - 5.5V versorgt werden. (Datenblatt ab Seite 2)

Für den Fall dass ich es wie mein Board mit 5V Betreibe liegen die 
Logik-Pegel für den Eingang damit zwischen 3.5V und 5.3V für den HIGH 
Zustand und -0.3V bis 1.5V für LOW.

Da ich die Antwort auf Frage 1 noch nicht kenne gehe ich mal davon aus, 
dass das Board auf dem I2C Bus mit 5V Logik-Pegel arbeitet. Da nun beide 
Komponenten (RTC und u-Controller-Board) mit diesem Pegel glücklich zu 
sein scheinen, kann ich das RTC IC also direkt verwenden ohne 
Pegel-Korrektur?

4. Die Frage bezieht sich wieder auf das DS3231 Modul. Im Datenblatt 
sind für die Datenleitungen externe Pull-Up-Widerstände verlangt. (Seite 
9) Angenommen das Board hat eigene Pull-Up-Widerstände für die 
Schnittstelle (Frage 2), brauche ich dann noch zusätzliche manuel 
hinzuzufügen? Falls ja, in welchem Bereich sollten die Liegen? Würde es 
schaden, wenn ich die Widerstände einfüge obwohl das Board schon welche 
hätte?

5. In meinem Projekt möchte ich gerne einen externen Speicher 
ansprechen. Es gibt ja Speicherbausteine mit seriellen Interfaces wie 
z.B. EEPROM ICs welche per SPI angesteuert werden können. Diese Speicher 
verlangen oftmals deutlich niedrige Logik-Pegel. Dementsprechend wird 
eine Pegel-Korrektur von Seitens des Mikrocontrollers nötig sein.

In diesem Forum gibt es schon Beiträge dazu. In denen ist von 
"Voltage-Level-Shiftern" die Rede wie z.B. den TXB0104
http://www.ti.com/lit/ds/symlink/txb0104.pdf

Sind diese notwendig oder genügt ein einfacher Spannungsteiler, also 
zwei Widerstände, um auf die gewünschte Spannung zu kommen?

Besten Dank für jede Hilfe und freundliche Grüsse!

von Einer K. (Gast)


Lesenswert?

I2C braucht die Pullup, die es braucht!
Leitungslänge, Anzahl Teilnehmer, Versorgungsspannung und noch ein paar 
Dinge spielen eine Rolle.
Levelshifter können nötig werden.


Auf dem SPI Bus würde ich Pullup an den jeweiligen CS anbringen. Damit 
die Slaves sich nicht aus versehen angesprochen fühlen. Denn sonst 
könnte ISP versagen.
Levelshifter können nötig werden.

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.