Forum: Compiler & IDEs Ausgang high => Eingang mit Pullup?


von Jemand (Gast)


Lesenswert?

Hallo,
wenn man an einem Port einen Pin als Augang konfiguriert und ihn high
setzt, dannach aber den Pin als Eingang konfiguriert, ist dann der
interne Pullupwiderstand gesetzt?
Also als kurzer Code:
DDRB |= _BV(1);
PORTB |= _BV(1);
DDRB &= ~_BV(1);

Ginge das ganze auch umgekehrt? Also ein Eingang mit internem Pullup
ergibt einen Ausgang der gleich nach dem setzen als Ausgang high ist.

Wenn das so stimmt wäre ein sehr komisches Problem an dem ich zZ hänge
geklärt.

Gruß Jemand

von Jörg Wunsch (Gast)


Lesenswert?

Ja.
Ja.

von Wolfgang Horn (Gast)


Lesenswert?

Hi, "Jemand",

was Du beschreibst, das erinnert mich an den PCF8574.

Die AVR's sind da aufwendiger aufgebaut:
1. Das PORTBit (wie PORTB) bestimmt den Wert des auszugebenden Bits,
2. Das DataDirectionBit (wie DDRB) bestimmt: "H": Ausgang pusht and
pullt, also kräftig, also Kurzschlußgefahr in beiden Richtungen, "L":
Ausgang wie Open Collector.
3. Das DataInBit (wie PINB) liest den Zustand des Pins, egal, ob der
Pin als Ein- oder Ausgang geschaltet ist. Mit PORTB = 0xff, DDRB = 0x00
und x = PINB hast Du in X abgespeichert, was an den
Open-Collector-Ausgängen wirklich anliegt.

Ciao
Wolfgang

von Hubert.G (Gast)


Lesenswert?

Ich weiss nicht welchen Kontroller du verwendest, aber RTFM. Bei einem
Mega8 siehe Datenblatt Seite 51.
Switching between input with pull-up and output low generates the same
problem. The user must use either the tri-state ({DDxn, PORTxn} = 0b00)
or the output high state
({DDxn, PORTxn} = 0b11) as an intermediate step.

von Jemand (Gast)


Lesenswert?

Damit wäre mir das erkennen der Ursache des Fehlers bestätigt.
Dankeschön.

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.