mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR: Lesen was zuletzt auf Port geschrieben wurde


Autor: Annemarie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Annemarie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, Danke an alle.
Ich schätze, ich habe es nun (endlich) kapiert.

Annemarie

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.