Eingang hat immer 5 V Atmega 32

Gast #5109511
Hallo Ich möchte den Eingang PB0 meines Atmega 32 benutzen.
Leider gibt mir liegen dort direkt 5 V an ohne in zu beschalten.

DDRB &= ~(1 << PB0);  // damit ist dann PB0 ein Eingang
DDRB = 0x01;           // Kompletten Port B als Eingang definieren 
(DDB0....DDB7)
PORTB = 0xfe;          // Pull-up Widerstand einschalten (Interner 
Widerstand von PB0....PB7)

Sollte doch eigentlich richtig sein oder ?
#5109514
Hans schrieb:
> DDRB &= ~(1 << PB0);  // damit ist dann PB0 ein Eingang
> DDRB = 0x01;           // Kompletten Port B als Eingang definieren
Denk doch bitte noch einmal über diese beiden Zeilen nach.

Und, ein offener Eingang, der den Pullup aktiv hat, wird Vcc (meist 5V) 
anzeigen. Das ist der Sinn des Pullup.
Gast #5109515
Hans schrieb:
> Leider gibt mir liegen dort direkt 5 V an ohne in zu beschalten.
>
> DDRB &= ~(1 << PB0);  // damit ist dann PB0 ein Eingang

Was erwartest Du denn an diesem Eingang? Bedenke, Du hast einen 
pullup-Widerstand nach 5V geschaltet.
Gast #5109519
> Eingang, der den Pullup aktiv hat
>  hast einen pullup-Widerstand nach 5V geschaltet.
Pardon, hatte erst zwei Tassen Kaffee, wo wird hier dieser Pullup auf B0 
eingeschaltet?
 Ich sehe B0 als Ausgang und auf GND, kann mir also das beschriebene 
Verhalten nicht erklären.
#5109535
Mal die Kommentare etwas berichtigt:

Hans schrieb:
> DDRB &= ~(1 << PB0);  // damit ist dann PB0 ein Eingang
Stimmt.

> DDRB = 0x01;           // Kompletten Port B als Eingang definieren
Falsch, damit werden DB7...DB1 Eingänge, DB0 wird Ausgang.

> PORTB = 0xfe;          // Pull-up Widerstand einschalten (Interner
Fast richtig. Die Pullups für DB7...DB1 werden eingeschaltet, DB0 geht 
auf LOW.
Gast #5109657
DDRB &= ~( (1<<PB0) | (1<<PB1) | (1<<PB2)| (1<<PB3)| (1<<PB4)| (1<<PB5)| 
(1<<PB6)| (1<<PB7));
PORTB |= ( (1<<PB0) | (1<<PB1) | (1<<PB2)| (1<<PB3)| (1<<PB4)| (1<<PB5)| 
(1<<PB6)| (1<<PB7) );


so wäre es besser?
#5109661
Hans schrieb:
> DDRB &= ~( (1<<PB0) | (1<<PB1) | (1<<PB2)| (1<<PB3)| (1<<PB4)| (1<<PB5)|
> (1<<PB6)| (1<<PB7));
Setzt alle Portbits auf Ausgang.

> PORTB |= ( (1<<PB0) | (1<<PB1) | (1<<PB2)| (1<<PB3)| (1<<PB4)| (1<<PB5)|
> (1<<PB6)| (1<<PB7) );
Setzt alle Portbits auf HIGH

> so wäre es besser?
Gute Frage. Was willst du erreichen?
Moderator (Firma: Titel) Persönliche Seite #5109706
Georg G. schrieb:
> Gute Frage. Was willst du erreichen?
Genau das frage ich mich auch...

Hans schrieb:
> Hallo Ich möchte den Eingang PB0 meines Atmega 32 benutzen.
> Leider gibt mir liegen dort direkt 5 V an ohne in zu beschalten.
Was würdest du dir denn sonst wünschen? Der Portpin kann ja nur 1 oder 
0 nach innen geben. Und es ist eben eine enorm schlechte Idee, einen 
CMOS Eingang unbeschaltet zu lassen.

Hans schrieb:
> Hat dieser Anweisung noch Auswirkung auf andere Ports ?
Nein, nur auf den Port B.
Gast #5109718
Georg G. schrieb:
> Hans schrieb:
>> DDRB &= ~( (1<<PB0) | (1<<PB1) | (1<<PB2)| (1<<PB3)| (1<<PB4)| (1<<PB5)|
>> (1<<PB6)| (1<<PB7));
> Setzt alle Portbits auf Ausgang.
Ähh, sicher? Das ist doch das selbe wie DDRB = 0; und bewirkt damit: 
setze alle Portbits auf Eingang!
>
>> PORTB |= ( (1<<PB0) | (1<<PB1) | (1<<PB2)| (1<<PB3)| (1<<PB4)| (1<<PB5)|
>> (1<<PB6)| (1<<PB7) );
> Setzt alle Portbits auf HIGH
Weil oben auf Eingang gesetzt wurde, wird hier der Pullup aktiv.

Das ist dann schon das, was der TO wollte ...
Gast #5109723
HildeK schrieb:

|
>>> (1<<PB6)| (1<<PB7) );
>> Setzt alle Portbits auf HIGH
> Weil oben auf Eingang gesetzt wurde, wird hier der Pullup aktiv.
>
> Das ist dann schon das, was der TO wollte ...

Er wundert sich aber wieso da 5V anliegen.

 Kurt
Gast #5109794
Kurt schrieb:
> Er wundert sich aber wieso da 5V anliegen.

Ja, ich weiß, er wollte Eingang mit aktivem Pullup, hat das eingestellt 
und misst dann (hochohmig? - ich nehme nicht an, dass er den Ausgang 
belastet hat) am Eingang 5V und wundert sich über das korrekte Verhalten 
:-).

Aber, die Aussage von Georg G., es sei bei der Einstellung
1
DDRB &= ~( (1<<PB0) | (1<<PB1) | (1<<PB2)| (1<<PB3) | (1<<PB4) | (1<<PB5)| 1<<PB6) | (1<<PB7));
alles am PORTB auf Ausgang, die wollte ich korrigieren.

Antwort schreiben

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