Eingang hat immer 5 V Atmega 32

Gast #5109511
Lesenswert?

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 ?
Gast #5109519
Lesenswert?

> 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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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 #5109794
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren