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 ?
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.
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.
> 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.
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.
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 :-).
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?
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?
Hans schrieb: > Port B als Eingang und Pullup Widerstand aktiv DDRB = 0; alle Pins sind Eingang PORTB = 0xff; alle Pins haben Pullup
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.
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 ...
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.