Forum: Mikrocontroller und Digitale Elektronik MCP230XX - GPIO vs OLAT


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Sebastian S. (godito)


Lesenswert?

Hallo,
ich habe ein Verständnisproblem: was genau ist der Unterschied zwischen 
den Ports GPIO und OLAT. Ich konnte in einem Beispielsketch einen 
MCP23008 mit OLAT beschalten, den 23017 aber nicht. Jetzt gehen 
plötzlich beide mit GPIO. Aber egal: was genau ist der UNterschied, ich 
verstehs nicht. Im Datenblatt steht (bei beiden identisch):
"The GPIO register reflects the value on the port. Reading from this 
register reads the port. Writing to this register modifies the Output 
Latch (OLAT) register."
und
"The OLAT register provides access to the output latches. A read from 
this register results in a read of the OLAT and not the port itself. A 
write to this register modifies the output latches that modifies the 
pins configured as outputs."
Da liegt der Unterschied doch nur beim Lesen, oder?
Vielen Dank für hilfreiche Antworten und schönes Wochenende
Sebastian

von Thomas K. (thomas_k39)


Lesenswert?

Der Unterschied ist im Kapitel 1.5 schön herausgearbeitet:

Reading the GPIO register reads the value on the port.
Reading the OLAT register only reads the OLAT, not
the actual value on the port.

Writing to the GPIO register actually causes a write to
the  OLAT.  Writing  to  the  OLAT  register  forces  the
associated output drivers to drive to the level in OLAT.
Pins configured as inputs turn off the associated output
driver and put it in high-impedance.

-> Der Unterschied liegt wirklich nur beim Lesen.

von Sebastian S. (godito)


Lesenswert?

Entschuldigung, ich hatte mich wohl nicht klar ausgedrückt, denn dass 
der
"Unterschied ist im Kapitel 1.5 schön herausgearbeitet" ist, finde ich 
nicht.
Mein Verständnisproblem liegt wohl bei der Hardware.
Warum gibt es denn GPIO und OLAT? Wenn "Writing to the GPIO register 
actually causes a write to the  OLAT.", warum schreibe ich dann nicht 
gleich auf OLAT?
Und wenn ich den Port und den OLAT getrennt auslesen kann, nämlich über 
GPIO lesen und OLAT lesen, dann heißt dass doch, dass der Wert vom Pin 
sich auch unabhängig vom an das OLAT geschickten Wert ändern kann, oder? 
Warum sonst sollte man das machen? Das letztere ist doch nur dann 
wichtig, wenn ich den MCP als Inputexpander nehme, oder? Vielleicht steh 
ich hier auf dem Schlauch, weil ich ihn eigentlich nur als 
Output-Expander benutze. Und daher bleibe ich bei meiner ursprünglichen 
Fragestellung: was genau ist der Unterschied zwischen den Ports GPIO und 
OLAT?
Schönes Wochenende

von Blubber (Gast)


Lesenswert?

Sebastian Strauch schrieb:
> Entschuldigung, ich hatte mich wohl nicht klar ausgedrückt, denn
> dass
> der
> "Unterschied ist im Kapitel 1.5 schön herausgearbeitet" ist, finde ich
> nicht.
> Mein Verständnisproblem liegt wohl bei der Hardware.
> Warum gibt es denn GPIO und OLAT? Wenn "Writing to the GPIO register
> actually causes a write to the  OLAT.", warum schreibe ich dann nicht
> gleich auf OLAT?
> Und wenn ich den Port und den OLAT getrennt auslesen kann, nämlich über
> GPIO lesen und OLAT lesen, dann heißt dass doch, dass der Wert vom Pin
> sich auch unabhängig vom an das OLAT geschickten Wert ändern kann, oder?
> Warum sonst sollte man das machen? Das letztere ist doch nur dann
> wichtig, wenn ich den MCP als Inputexpander nehme, oder? Vielleicht steh
> ich hier auf dem Schlauch, weil ich ihn eigentlich nur als
> Output-Expander benutze. Und daher bleibe ich bei meiner ursprünglichen
> Fragestellung: was genau ist der Unterschied zwischen den Ports GPIO und
> OLAT?
> Schönes Wochenende

Du kannst die Pins des IC als Eingang und Ausgang benutzen.
GPIO gibt die den aktuellen Pegen der Pins, egal ob Ein- oder Ausgang.

OLAT = Output-LATch ist ein Chip-Interne LATch für den Output.
Das kanst du setzen und lesen.
Wenn aber Pins als Eingang geschaltent sind gibt GPIO eventuell einen 
anderen Wert als OLAT, weil halt am Eingang was anderes anliegt.

Die Register sind halt für Ein- und Ausgang getrennt. Das ist einfacher 
zu Bauen und wird bei allen mir bekannten IO-Chips seit Jahrzehnten so 
gemacht.

Wenn du nur Ausgänge brauchst ist GPIO für DICH uninteressant.
Leute die auf einem Port Ein- UND Ausgänge haben brauchen das aber.
Für jeden einen eigenen Chip zu basteln lohnt sich nicht.

Ich hoffe das war etwas verständlicher ...

von Sebastian S. (godito)


Lesenswert?

Hallo Blubber,
danke für die schnelle Antwort. Ich hab's soweit kapiert und werde mal 
noch ein bißchen mit dem IC als Eingangsexpander rumspielen.
Ciao

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.