AVR: Lesen was zuletzt auf Port geschrieben wurde

Gast #965614
Lesenswert?

Hallo,

Eine kurze Frage, das AVR Datenblatt verwirrt mich da irgendwie, für die 
meisten hier aber sicher kein Problem:

Ein Port ist als AUSGANG geschaltet (ddrn->255)
Ich möchte nun auslesen, welchen aktuellen Zustand die Portpins haben, 
diese Werte modifizieren und zurückschreiben. Damit ich den laufenden 
Zustand nicht in einer Variable mitprotokollieren muss.
Portweise, also nicht mit sbi/cbi/sbic/sbis.
Muss ich dazu PINx oder PORTx auslesen?

Und was wäre wenn der Port mixed-io hätte, also manche Pins als Ein- und 
andere als Ausgang. Wenn ich das ganze Portbyte auslese, die Output-Bits 
ändere und das ganze Portbyte zurückschreibe. Ändert sich dann etwas an 
dem Zustand derjeniegen Pins, die als Input geschaltet sind? Das möchte 
ich nämlich nicht.

Gruss
Annemarie
Gast #965633
Lesenswert?

Die Sache ist folgende:

Wenn du was ins PORT-Register schreibst, bleibt das auch auf Biegen und 
Brechen in jedem Fall da stehen. D.h., du kannsts mit Sicherheit wieder 
rauslesen. Also: Was du ins PORT-Register schreibst, kommt nachher auch 
wieder raus.

Anders beim PIN-Register: Hier steht nicht der Wert, der vorher ins 
PORT-Register gesetzt wurde, sondern hier steht der tatsächliche Zustand 
des Pins. D.h., wenn du eine '1' ins PORT-Register schreibst, den 
entsprechenden Pin dann extern auf Masse kurzschließt, dann wirst du aus 
dem PIN-Register eine '0' lesen und dein Prozessor würd sich geringfügig 
(...) erwärmen :-)
#965635
Lesenswert?

@Annemarie
Auslesen kannst du beide. Für Ausgänge ist PORTx sozusagen der Sollwert, 
PINx der Ist-Wert. Für Bit-Manipulationen empfehle ich, den Wert von 
PORTx einzulesen und sicher zu stellen, dass nur Bits verändert werden, 
wo es auch gewollt ist. Dann gibt es auch keine Probleme mit den 
Pull-Ups.

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