Deaktivierung des internen Pull-up resistors

OP #6716437
Hallo liebes µC-Forum,

dies hier ist mein erster Post. Was die µC-Programmierung mit purem C 
anbelangt, bin ich noch ein blutiger Anfänger. Ich habe bis jetzt nur 
"simple" Sketches in der Arduino IDE programmiert, welche digitale 
Ausgänge schalten. Gegenwärtig bin ich dabei, die digitalen Eingänge 
einzubinden und die Funktion dahinter zu verstehen. Ich habe es 
geschafft, einen Button abzufragen und folglich ein LED ein- bzw. 
auszuschalten.

Jetzt zur eigentlichen Frage:
Ist es möglich, den internen Pull-up resistor, welchen ich zu Beginn für 
den digitalen Eingang einschalte, versehentlich zu deaktivieren, wenn 
ich das Register PORTx in meiner while-Schleife überschreibe? Also z.B.:
PORTD = (1 << 7);
Mit diesem Befehl habe ich ja alle Bits des Registers PORTD mit 0 
überschrieben - ausgenommen davon ist das letzte Bit. Hätte ich Pin 3 
als digitalen Eingang definiert (mit internen Pull-up), wäre jetzt der 
digitale Eingang jetzt nutzlos, da er ja keinen Pull-up mehr besizt. 
oder hab ich da etwas falsch verstanden? Ist es deshalb so wichtig, die 
bitweisen Operatoren zu nutzen, sodass alle anderen Bits nicht 
beeinflusst werden?
Gast
Christoph B. schrieb:
> Ist es möglich, den internen Pull-up resistor, welchen ich zu Beginn für
> den digitalen Eingang einschalte, versehentlich zu deaktivieren, wenn
> ich das Register PORTx in meiner while-Schleife überschreibe? Also z.B.:
> PORTD = (1 << 7);

Ja

Christoph B. schrieb:
> Ist es deshalb so wichtig, die bitweisen Operatoren zu nutzen,
> sodass alle anderen Bits nicht beeinflusst werden?

Wenn du nur einzelne Bits setzen/löschen willst, dann ist es wichtig.
Gast
Schau dir mal das AVR-C-Tutorial an, da,sthet alles über die Bedienung 
der Ports drin.

Christoph B. schrieb:
> wäre jetzt der digitale Eingang jetzt nutzlos, da er ja keinen Pull-up
> mehr besizt.

Ein Eingang ist nicht nutzlos, weil er keinen PU hat; man braucht ihn 
nur in bestimmten Fällen.
Gast
Hallo,

bei den AVRs wie z. B. den ATMEGA328P werden die Pullups in Abhängigkeit 
von den korrespondierenden Bits der Register DDxn und PORTxn und PUD im 
MCUCR aktiviert: PUD im MCUCR muss 0 sein, DDXn = 0 (Direction Input) 
und Portxn = 1 : dann ist der betreffende Pullup enabled, sonst nicht. 
Deswegen dürften hier durch das Überschreiben alle anderen Pullups des 
PORTD disabled sein.

MfG Wuff_W

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 5 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.