I2C: SDA auf 2 V statt 0 V

M

Marko Aschoff

Guest
Hallo ng,

In meinem I2C-Netz (1 x Master: PIC18F252, 2 x Slave: PIC18F452) tritt
folgendes Problem auf: Die Slaves können die Datenleitung nicht auf Null,
sondern nur auf etwa 2 V ziehen. Prinzipiell funktioniert die
Kommunikation, ich möchte jedoch saubere Signale haben.

Hier meine Schaltung (jeweils für SDA/SCL):

o +5V
| _____R 1k_____ Slave 1
R 1k8 |
| |
Master _x_______x____R 1k_____ Slave 2

Danke für eure Hilfe.

Viele Grüße,
Marko
 
Marko Aschoff schrieb:

o +5V
| _____R 1k_____ Slave 1
R 1k8 |
| |
Master _x_______x____R 1k_____ Slave 2
Dass die Slaves die Leitung nur bis 1,8V runterziehen können ist ja wohl
klar, man Spannungsteiler. Wenn du die Ausgänge vor Kollision schützen
möchtest, dann muss da sowohl beim Master wie bei den Slaves eine Diode
parallel mit einem Widerstand rein, der Pullup bleibt.


Gruß Dieter
 
Marko Aschoff wrote:

Hallo ng,

In meinem I2C-Netz (1 x Master: PIC18F252, 2 x Slave: PIC18F452) tritt
folgendes Problem auf: Die Slaves können die Datenleitung nicht auf Null,
sondern nur auf etwa 2 V ziehen. Prinzipiell funktioniert die
Kommunikation, ich möchte jedoch saubere Signale haben.

Hier meine Schaltung (jeweils für SDA/SCL):

o +5V
| _____R 1k_____ Slave 1
R 1k8 |
| |
Master _x_______x____R 1k_____ Slave 2

Pullup auf 47 kOhm vergrössern.

Robert
 
Am Wed, 23 Jun 2004 09:33:45 +0200 hat Marko Aschoff <marko@no.spam>
geschrieben:

Hallo ng,

In meinem I2C-Netz (1 x Master: PIC18F252, 2 x Slave: PIC18F452) tritt
folgendes Problem auf: Die Slaves können die Datenleitung nicht auf Null,
sondern nur auf etwa 2 V ziehen. Prinzipiell funktioniert die
Kommunikation, ich möchte jedoch saubere Signale haben.

Hier meine Schaltung (jeweils für SDA/SCL):

o +5V
| _____R 1k_____ Slave 1
R 1k8 |
| |
Master _x_______x____R 1k_____ Slave 2

Danke für eure Hilfe.

Den Pullup kannst du etwas größer amchen (3k3) aber die 1k Widerstände
sind seltsam. Normal verwendet I2C Open Collector Ausgänge, damit sind
keine gefährlichen Kollisionen möglich (nur die dominanten/rezessiven
Bits). Das macht man meist, indem man den sendenden port auf Low schaltet
und die Datenbits per Datenrichtignsregister ausgibt. D.h. L = Output, für
H schaltest du auf Input = Hochohmig. Damit simulierst du einen Open
Coll./Drain Ausgang. Sollte das mit dem ľC nicht möglich sein, dann kann
man Dioden in Serie (A an Bus, K an Slave) schalten, die man für die
Eingangssignale mit Widerständen (1k..10k) überbrückt.

--
Martin
 
Den Pullup kannst du etwas größer amchen (3k3) aber die 1k Widerstände
sind seltsam. Normal verwendet I2C Open Collector Ausgänge, damit sind
keine gefährlichen Kollisionen möglich (nur die dominanten/rezessiven
Bits).
Laut AN736 S.14

http://ww1.microchip.com/downloads/en/AppNotes/00736a.pdf

sind die Serienwiderstände für die I/O Isolation auf den Leitungen
(Hotplug der Slaves). Eine Größenangabe fehlte jedoch, also habe ich
einfach mal 1k genommen.


Sollte das mit dem ľC nicht möglich sein, dann kann man Dioden in Serie
A an Bus, K an Slave) schalten, die man für die Eingangssignale mit
Widerständen (1k..10k) überbrückt.
Welcher Typ sollte dann eingesetzt werden?
 
Marko Aschoff schrieb:

http://ww1.microchip.com/downloads/en/AppNotes/00736a.pdf

sind die Serienwiderstände für die I/O Isolation auf den Leitungen
(Hotplug der Slaves). Eine Größenangabe fehlte jedoch, also habe ich
einfach mal 1k genommen.
Ach je, I2C ist ja eigentlich nicht für hot plugging gedacht, aber 1k
ist bedeutend zuviel. Nimm 100R.


Sollte das mit dem ľC nicht möglich sein, dann kann man Dioden in Serie
A an Bus, K an Slave) schalten, die man für die Eingangssignale mit
Widerständen (1k..10k) überbrückt.

Welcher Typ sollte dann eingesetzt werden?
Für den Zweck ist folgendes erprobt:

1N4148
.--->|--.
___ | ___ |
Bus-|___|--o-|___|-o--Slave/
100R 470R Master
created by Andy´s ASCII-Circuit v1.24.140803 Beta www.tech-chat.de

Die 1N4148 kann man für verbesserten Störabstand durch BAT41 o.ä.
ersetzen, Pullup am Bus sollte >= 1k sein.


Gruß Dieter
 
Dieter Wiedmann schrieb:
Marko Aschoff schrieb:


http://ww1.microchip.com/downloads/en/AppNotes/00736a.pdf

sind die Serienwiderstände für die I/O Isolation auf den Leitungen
(Hotplug der Slaves). Eine Größenangabe fehlte jedoch, also habe ich
einfach mal 1k genommen.


Ach je, I2C ist ja eigentlich nicht für hot plugging gedacht, aber 1k
ist bedeutend zuviel. Nimm 100R.
Was ist in diesem Kontext eigentlich unter I/O Isolation zu verstehen?
 
Marko Aschoff schrieb:

Was ist in diesem Kontext eigentlich unter I/O Isolation zu verstehen?
Die Widerstände sollen einen übermäßigen Strom (durch ESD) verhindern.

BTW: Hast du eigentlich die Contact-Sequence beachtet?


Gruß Dieter
 
Die Widerstände sollen einen übermäßigen Strom (durch ESD) verhindern.

BTW: Hast du eigentlich die Contact-Sequence beachtet?
Ja habe ich beachtet. Welcher Strom wird denn hier begrenzt, der vom
Salve auf den Bus oder umgekehrt?

Grüße,
Marko
 
Marko Aschoff schrieb:

Ja habe ich beachtet. Welcher Strom wird denn hier begrenzt, der vom
Salve auf den Bus oder umgekehrt?
Der von deinen geladenen Griffeln auf den Slave.


Gruß Dieter
 
Marko Aschoff wrote:

In meinem I2C-Netz (1 x Master: PIC18F252, 2 x Slave: PIC18F452) tritt
folgendes Problem auf: Die Slaves können die Datenleitung nicht auf Null,
sondern nur auf etwa 2 V ziehen. Prinzipiell funktioniert die
Kommunikation, ich möchte jedoch saubere Signale haben.

Hier meine Schaltung (jeweils für SDA/SCL):

o +5V
| _____R 1k_____ Slave 1
R 1k8 |
| |
Master _x_______x____R 1k_____ Slave 2
Warum kommt mir das nur so bekannt vor, das versuchen manche Kunden
auch immer :).

Dein Problem sind die Serienwiderstände, die zusammen mit den
Pullups einen Spannungsteiler bilden, so daß Du die Leitung nicht
richtig auf 0V ziehen kannst.

Serienwiderständen sind bei I2C ganz übel und 1k deutlich zuviel.

cu, Marco

--
E-Mail: mb-news-b<ät>linuxhaven.de
Deutsches Linux HOWTO Projekt: http://www.linuxhaven.de
 
R.Freitag wrote:

Pullup auf 47 kOhm vergrössern.
Das dürfte dann aber das Senden mit 400 kHz ziemlich
schwierig machen, da die Flanken dann nicht steil
genug sind.

cu, Marco

--
E-Mail: mb-news-b<ät>linuxhaven.de
Deutsches Linux HOWTO Projekt: http://www.linuxhaven.de
 
Marko Aschoff wrote:

sind die Serienwiderstände für die I/O Isolation auf den Leitungen
Serienwiderstände und Kapazitäten sind die Probleme bei I2C.

Serienwiderstände würde ich in der Regel eher mehr oder wenig
wegoptimieren. Wir setzen dafür, wenn ich mich richtig erinnere,
was um 100 Ohm ein.

Zum Schutz verwendet man besser Schutzdioden mit niedriger
Kapazität.

(Hotplug der Slaves).
I2C kann kein Hotplugging.

cu, Marco

--
E-Mail: mb-news-b<ät>linuxhaven.de
Deutsches Linux HOWTO Projekt: http://www.linuxhaven.de
 
Dieter Wiedmann wrote:

Die Widerstände sollen einen übermäßigen Strom (durch ESD) verhindern.
Dafür verwendet man aber besser Schutzdioden parallel zum Eingang.

cu, Marco

--
E-Mail: mb-news-b<ät>linuxhaven.de
Deutsches Linux HOWTO Projekt: http://www.linuxhaven.de
 

Welcome to EDABoard.com

Sponsor

Back
Top