Forum: Mikrocontroller und Digitale Elektronik Port Direction bei I2C Bus


von MIchael (Gast)


Lesenswert?

Hallo Leute,

ich verwende einen ATXMEGA32A4U Mikrocontroller. Ich habe an Port E (Bit 
0 und Bit 1) ein IC angeschlossen das den I2C Bus verwendet.

Ich kann auch inzwischen mit dem IC kommunizieren, jedoch habe ich 
Bedenken das ich die I/O Port Direction richtig eingestellt habe.

Momentan habe ich es so eingestellt.

// PORTE initialization
// OUT register
PORTE.OUT = 0x00;

// Pin0: Input  --> TWI_SDA
// Pin1: Output  --> TWI_SCL
// Pin2: Input
// Pin3: Input
PORTE.DIR = 0x02;

Wenn ich die I2C Schnittstelle benutze übdernimmt diese dann die 
Kontroller über die Ports?

von spess53 (Gast)


Lesenswert?

Hi

>Wenn ich die I2C Schnittstelle benutze übdernimmt diese dann die
>Kontroller über die Ports?

Nicht über die Ports, aber über die I2C-Pins.

MfG Spess

von MIchael (Gast)


Lesenswert?

Ist es demnach egal wie ich die beiden PINs konfiguriere. Ich benutze 
natürlich externe Pullups.

von Oliver R. (orb)


Lesenswert?

Die Umschaltung macht die I2C-Logic im Prozessor. Das ist nötig, weil 
beide Leitungen bidirektional sind und Du sie garnicht richtig vorgeben 
kannst.

von uwe (Gast)


Lesenswert?

> Ist es demnach egal wie ich die beiden PINs konfiguriere. Ich benutze
> natürlich externe Pullups.
Nö ist es nicht. SCL ist beim Master immer Output und an den Slaves 
immer input der Master gibt den Takt an.
SDA kann Input oder Output sein, das ist vom Protokol abhängig. Aber es 
ist wichtig zu wissen das SDA (wenn als Output geschaltet) kein 
richtiger Output ist sondern nur Open Collector bzw. Open Drain. Das 
bedeutet SDA kann nur =V ausgeben (nur der Transitor nach GND kann 
enabled werden). Wenn eine 1 Ausgegeben wird dann wird der Ausgang 
hochohmig und keine Spannung wird ausgegeben. Deshalb muß da halt nen 
Pullup ran, damit VCC anliegen wenn Hochohmig ist. Und deshalb kann auch 
jeder was gleichzeitig senden ohne das was passiert, weil alle nur 0V 
auf SDA legen können.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

uwe schrieb:
> SCL ist beim Master immer Output

Nicht nur, Stichwort "Clock Stretching".

von MIchael (Gast)


Lesenswert?

Demnach sind doch beide Pins Open Collector bzw. Open Drain, es ist ja 
auch an beiden Leitungen ein Pullup angeschlossen. Mit dem Clock 
Stretching wird kann doch eine fehlerhafte Übertragung an den Master 
symbolisiert werden.

von Oliver R. (orb)


Lesenswert?

MIchael schrieb:
> Mit dem Clock
> Stretching wird kann doch eine fehlerhafte Übertragung an den Master
> symbolisiert werden.

Nein, damit signalisiert der Slave daß er noch Zeit braucht. So lassen 
sich sogar 100kHz-Slaves mit 400kHz-Slaves an einem Bus mischen. Und ja, 
beide Leitungen sind OC, jeder Slave kann den Bus anhalten, und 
eigendlich ist nur ein sauberer Low-Pegel interessant.

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.