Ich habe 7 Pins eines Ports als Ausgang definiert, einen als Eingang. Wenn ich nun die Ausgänge setzen will (Portd = &B00111111), wie kann ich den einen Pin auslassen? Beispiel: Portd = &B001X1111, das X steht für den Einganspin.
Gar nicht. Aber du kannst vorher den Port einlesen, den Zustand dieses 1 Bits feststellen, den im auszugebenden Byte einsetzen und dann dieses so gepimpte Byte ausgeben. Oder aber du setzt die 7 Bits einzeln.
Was bewirkt das Setzen des Bits überhaupt wenn der Pin als Eingang Konfiguriert ist?
Hallo, wenn per DDR-Register der Pin auf Eingang gesetzt wurde, einfach eine Null an der entsprechenden Position ausgeben, dann passiert nichts. @ Karl Heinz Buchegger: Dein Verfahren wäre möglicherweise kontraproduktiv, da bei Eingängen ein gesetztes Bit im Port-Register (zumindest bei AVR's) den Pullup-Widerstand aktiviert. Z.B. ein Analogsignal am ADC-Eingang würde das sicherlich nicht so gut finden ... :-( Sollte es sich um einen 8051-kompatiblen Controller handeln, sähe die Sache etwas anders aus. Der TO hat allerdings keinen Controllertyp angegeben. > Was bewirkt das Setzen des Bits überhaupt wenn der Pin als Eingang > konfiguriert ist? Die Frage ist damit beantwortet. Das steht alles auch im Datenblatt des Controllers ...
Danke. Es ist ein Atmega8. Hab das im DB eigentlich auch so verstanden mit dem Pull-Up (mein Englisch ist nicht das Beste). Werde also dann das Bit entsprechend der benötigten Pull-Up Einstellung immer mit ausgeben.
Informer schrieb: > Hallo, > > wenn per DDR-Register der Pin auf Eingang gesetzt wurde, einfach eine > Null an der entsprechenden Position ausgeben, dann passiert nichts. Gratuliere. Damit hast du einen möglicherweise eingeschalteten Pullup Widerstand gerade abgeschaltet. Sowas garantiert im Fehlerfall lange Suchzeiten.
Informer schrieb: > Hallo, > > wenn per DDR-Register der Pin auf Eingang gesetzt wurde, einfach eine > Null an der entsprechenden Position ausgeben, dann passiert nichts. > > @ Karl Heinz Buchegger: > Dein Verfahren wäre möglicherweise kontraproduktiv, da bei Eingängen ein > gesetztes Bit im Port-Register (zumindest bei AVR's) den > Pullup-Widerstand aktiviert. Z.B. ein Analogsignal am ADC-Eingang würde > das sicherlich nicht so gut finden ... :-( Und was ist da jetzt so schlimm daran, wenn man an diesem einen Pin sicherstellt, dass sich der Wert nicht ändert? Denn genau darauf läuft es hinaus. Ist der Inhalt des Port Registers an dieser Bitposition 1, dann schreibt man eben da auch eine 1 drauf. Ist er 0, dann schreibt man eine 0 drauf. Ergo: Nach der Zuweisung hat sich an diesem einen Bit nichts verändert. Alles ist danach genau gleich wie es vor der Zuweisung war.
Für den Avr etwas komplizierter aber für dich sicher einfacher anstelle von Portd = &B101x1011 kannst du portd.0 = variable.0 portd.1 = variable.1 portd.2 = variable.2 portd.3 = variable.3 portd.5 = variable.4 portd.6 = variable.5 portd.7 = variable.6
@ Karl Heinz Buchegger: Du hast Recht; es war ein dummer Denkfehler meinerseits. Das Einlesen des PORT-Registers liefert natürlich das richtige Ergebnis. Ich hatte das mit dem Einlesen des PIN-Registers verwechselt ... :-(
Informer schrieb: > @ Karl Heinz Buchegger: > > Du hast Recht; es war ein dummer Denkfehler meinerseits. > Das Einlesen des PORT-Registers liefert natürlich das richtige Ergebnis. > Ich hatte das mit dem Einlesen des PIN-Registers verwechselt ... :-( Alles klar. Ich hatte mich schon gewundert :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.