Forum: Mikrocontroller und Digitale Elektronik Bascom 7 Pins eines Ports setzen


von Gerd (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Gerd (Gast)


Lesenswert?

Was bewirkt das Setzen des Bits überhaupt wenn der Pin als Eingang 
Konfiguriert ist?

von Informer (Gast)


Lesenswert?

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 ...

von Gerd (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Sven (Gast)


Lesenswert?

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

von Informer (Gast)


Lesenswert?

@ 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 ...  :-(

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.