was ist ein port latch

Gast #4126786
Lesenswert?

Hi,
Was ist ein port latch? Die Frage kam mir auf, als ich die Register für 
Pins bei einem dspic30f4012 beschreiben wollte. Dort gibt es einen 
Unterschied zwischen PORT-Register und LAT-Register.

Auszug aus Datenblatt:

The differences between the PORT and LAT registers can be summarized as 
follows:
• A write to the PORTx register writes the data value to the port latch.
• A write to the LATx register writes the data value to the port latch.
• A read of the PORTx register reads the data value on the I/O pin.
• A read of the LATx register reads the data value held in the port 
latch.

Also beim schreiben sehe ich keinen Unterschied. beim lesen ja.
- data value on the I/O pin: ist ja wahrscheinlihc der zustand des pins 
(also high oder low)
aber was ist port latch? dort wird ja ein wert gehalten. welcher wert 
ist das denn? und wie kommt der dahin?

Sascha
Gast #4126796
Lesenswert?

>aber was ist port latch? dort wird ja ein wert gehalten. welcher wert
>ist das denn? und wie kommt der dahin?

Vielleicht so?

>• A write to the LATx register writes the data value to the port latch.
Gast #4126822
Lesenswert?

Ist wohl nicht die korrekte Beschreibung, aber zumindest für das 
Verständnis sollte sie reichen:

Das PORTx Register ist sozusagen der Pin an deinem IC.
Mit dem Latch (einer Art Zwischenspeicher) kannst du dem PORT einen Wert 
zuweisen.

Du hast einen Eingang:
Lesen des PORT-Registers tut genau das, was du willst. Nämlich den Wert 
an dem Pin auslesen.
Ein Lesen des Latches gibt dir den Wert zurück der dem PORT einmal 
zugewiesen wurde.

Schreiben:
Der IO-Pin kann den Wert natürlich nicht direkt Speichern. Das Register 
ist quasi eine Art Mapping auf den HW Pin. Also musst du den Wert an 
eine Stelle schreiben, die ihn speichern und dem HW-Pin zuweisen kann. 
Also in das Latch (den Zwischenspeicher). Hättest du kein Latch müsste 
dein Programm dem PORT jeden Takt den Wert neu zuweisen.

So habe ich mir das mal vorgestellt.

Mit etwas mehr Zeit und einem Datenblatt kann man bestimmt noch eine 
genauere (korrektere) Beschreibung machen.
#4126873
Lesenswert?

Wie oben schon beschrieben enthält (speichert) das LATCH den Zustand der 
am Pin anliegen soll, wenn dieser als Ausgang konfiguriert ist.
-> FIGURE 8-1: BLOCK DIAGRAM OF A DEDICATED PORT STRUCTURE

Bei manchen Controllern kann man dieses LATCH auch lesen, bei anderen 
nicht.

Die Lesemöglichkeit für das Latch kann helfen den R-M-W 
(read-modify-write) Effekt in den Griff zu bekommen.

Beim R-M-W handelt es sich um folgendes Phänomen:
Stellen wir uns vor, zwei Pins an einem Port sollen in aufeinander 
folgenden Befehlen getoggelt werden.
Um den ersten Pin zu toggeln wird der Port gelesen, das Bit für den Pin 
getoggelt und das Ergebnis an den PORT (LATCH) zurück geschrieben. Alles 
gut ;-)
Folgt jetzt der zweite Befehl sehr schnell und ist der Level am Pin 
aufgrund irgendwelcher Umstände (kapazitive Last ...) noch nicht auf dem 
neuen Level, dann wird dieser "falsch" eingelesen.
Das toggeln des zweiten Pins im zweiten Befehl funktioniert wieder wie 
gewünscht, aber das toggeln des ersten wird bei Rückschreiben quasi 
wieder rückgängig gemacht.
Es sieht dann möglicherweise so aus als wäre der erste Befehl nie 
ausgeführt worden.
Wenn man anstatt des PORTS das LATCH liest (indem die Zustände stehen 
die man an den Ausgangspins haben will) dann kann das nicht passieren.
#4126884
Lesenswert?

@Sascha

Ich zitiere: 
[http://www.sprut.de/electronic/pic/fallen/fallen.html#inout]

"Beim anfänglichen Lesen des Ports liest der Prozessor nicht etwa das 
Portregister (z.B. PORTA oder PORTB) aus, sondern liest die momentanen 
Pegel an den Pins des Ports ein. Bei Pins, die auf Output eingestellt 
sind macht das keinen Unterschied, wohl aber für Port-Pins, die auf 
Input eingestellt sind. Deren Bits im Port-Register können dadurch 
unbeabsichtigter Weise verändert werden. Nach dem Umschalten auf Output, 
haben diese Pins dann einen anderen Pegel als beabsichtigt."

Das Latchregister enthält jedoch den tatsächlich programmierten Wert 
(High/Low).

mfG Ottmar
Moderator (Firma: Titel) Persönliche Seite #4126894
Lesenswert?

Stefan Us schrieb:
> Ein Latch ist ein D-Flipflop.
Naja, das möchte ich aber dringend bezweifeln.
Aber ich würde auch sagen, dass der Begriff "LATCH" im hier durchgängig 
falsch verwendet wird. Ein D-Flipflop ist flankengesteuert. Ein Latch 
ist pegelgesteuert. Das ist ein signifikanter Unterschied!

Zurück zum Thema. Ein IO-Port ist üblicherweise so aufgebaut:
1
 Pin  <-------------------------------------------------.
2
 Register <-------------------.       __________        |
3
                 ______       |      | Tristate |       |
4
 Dout >---------|D    Q|------o------| Buffer   |-------o------- Pin
5
 Sysclk >-------|>     |             |__________|
6
 WriteEnable >--|WE____|                  |
7
                                          |
8
 HiZ >------------------------------------'
Es kann also nur das Register (=LATCH) beschrieben werden. Und danach 
kann der Zustand des Registers oder der des Pins zurückgelesen werden. 
Denn der Pin könnte ja abhängig vom Tristate-Signal ein Eingang sein...
#4126895
Lesenswert?

Ottmar K. schrieb:
> Bei Pins, die auf Output eingestellt
> sind macht das keinen Unterschied, wohl aber für Port-Pins, die auf
> Input eingestellt sind.

Wenn die Pins auf Input gestellt sind* dann ist der Inhalt des 
zugehörigen LATCHbits doch völlig bedeutungslos. (Es wäre egal ob er 
sich ändert)


* und das sich auch nicht ändert (immer Input bleibt)
und das Bit der LATCH-Speicherstelle nicht aus irgendwelchen
Gründen für irgendwas ganz anderes verwendet wird ...
#4126997
Lesenswert?

Auch bei Bitbefehlen wird immer das ganze Byte gelesen, das Bit geändert 
und das Byte zurück geschrieben.
Dabei kann es passieren, daß gerade als Eingang geschaltete Pins 
ungewollt umschalten. Setzt man sie dann später auf Ausgang, ist das 
Malheur da.
Um das zu vermeiden, macht man die Bitbefehle auf das Latch, 
unbeeinflußt vom gerade außen anliegenden Pegel.
Gast #4127177
Lesenswert?

Man könnte dazu neigen, sich einen I/O-Pin so vorzustellen:
- Man stellt ein, ob es ein Eingang oder ein Ausgang ist
- Wenn es ein Ausgang ist, kann man den Pin beschreiben.
- Wenn es ein Eingang ist, kann man den Pin auslesen.


In der Realität ist es aber etwas anders (wie man an Lothars Bild 
sieht):
- Das Portlatch ist ein Speicherglied. Dies kann man grundsätzlich immer 
schreiben und lesen.
- Den tatsächlichen Zustand des Pins kann man grundsätzlich immer lesen.
- Der Inhalt des Portlatches und der tatsächliche Zustnd des Pins müssen 
nicht zwangsläufig übereinstimmen.
- Der Konfiguration Ausgangstreiber bestimmt, ob er den Pin aktiv treibt 
(gemäß desInhalt des Portlatches) oder ob das Portlatch abgekoppelt ist.

Dadurch kann man tolle Dinge machen, z.B.
- Überprüfen, ob ein Ausgangspin tatsächlich den vorgegebenen Zustand 
annimmt
- einen Open-Collector-Ausgang realisieren (I2C-Bus)
- einen bidirektionalen Pin haben (I2C-Bus)
etc.
Gast #4127202
Lesenswert?

Nun dann schau dir mal einen 8051 an, der kann Pin und Latch nicht 
getrennt ansprechen.
Da liest man immer den Pin und um die R-M-W Problematik zu umgehen muss 
man die Ausgabedaten in einer RAM Zelle zwischenspeichern.
Gast #4127252
Lesenswert?

Lothar Miller schrieb:
> Der kann aber auch keine '1' ausgeben.
> Eine '1' ist da nur ein Pullup, deshalb kennt der 8051 auch Pin
> Datenrichtungsregister. Ja, damals(tm) hat man schon noch so vor sich
> hingemurkst...

Weshalb man damals(tm) ja auch immer gegen Masse geschaltet hat. 
Interessanterweise bin ich diese Angewohnheit bis heute nicht 
losgeworden.
Moderator (Firma: Titel) Persönliche Seite #4127267
Lesenswert?

DJ Tobsen schrieb:
> Interessanterweise bin ich diese Angewohnheit bis heute nicht
> losgeworden.
Viele Enable-Signale an ICs wie z.B. WRn, OEn, CSn usf. und sind noch 
solche Altlasten aus der TTL-Zeit. Auch die AVRs tragen mit ihren 
Pullups noch eine kleine Huldigung der negativen Logik in sich.

Peter Dannegger schrieb:
> Ich fand das sehr elegant.
Klar, was man hat hat man. Ich habe auch Tricks damit gemacht.
> I2C oder 1-Wire wurden dadurch sehr einfach.
Heute nehme ich den einen oder 2 Pins lieber extra in die Hand und habe 
dafür an den restlichen Ports eine definierte '1' wenns drauf ankommt...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren