AVR: Lesen was zuletzt auf Port geschrieben wurde

Gast #965614
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 #965626
Hi

Du kannst auch PORTn auslesen. Du musst nur aufpassen, wenn du für 
Eingänge interne PullUps benutzt. Die werden auch Über PORTn 
eingeschaltet.

MfG Spess
Gast #965633
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
@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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.