mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Eingang hat immer 5 V Atmega 32


Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Georg G. (df2au)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Zweifler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: S. Landolt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Georg G. (df2au)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
S. Landolt schrieb:
> Ich sehe B0 als Ausgang und auf GND, kann mir also das beschriebene
> Verhalten nicht erklären.

Ich auch, aber die Erklärung sitzt vor dem Bildschirm :-).

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Georg G. (df2au)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Port B als Eingang und Pullup Widerstand aktiv

Autor: Georg G. (df2au)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans schrieb:
> Port B als Eingang und Pullup Widerstand aktiv

DDRB = 0; alle Pins sind Eingang
PORTB = 0xff; alle Pins haben Pullup

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat dieser Anweisung noch Auswirkung auf andere Ports ?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
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.

Autor: Georg G. (df2au)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HildeK schrieb:
> Ähh, sicher?

Sorry, hatte das ~ übersehen.

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Georg G. schrieb:
> Sorry, hatte das ~ übersehen.

Ja, und auch das '&' - oder? :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.