Forum: Mikrocontroller und Digitale Elektronik externer PullUp


von HansDampf (Gast)


Lesenswert?

Hallo, brauche dringend Hilfe. Kann mir bitte jemand sagen wie ich einen 
Eingang (PB2) bei einem AtMega32 richtig initialisieren muss wenn ich 
einen externen PullUp Widerstand und einen Taster verwende. Erster 
Schritt ist ja ihn als Eingang zu bestimmen mit DDRB = 0b00001000; (An 
PB3 hängt eine LED). Aber ich muss ja den Zustand "high" noch irgendwie 
festlegen oder? Wie mache ich das? Das Problem ist eben wenn ich nur am 
Sockel messe ohne MC dann springt die Spannung zwischen 5V oder 
0V(Taster gerückt) aber wenn ich den MC aufsetze bleiben die 0V (egal ob 
Taster gedrückt oder nicht). Bitte bitte helft mir.

von Einer K. (Gast)


Lesenswert?

HansDampf schrieb:
> Aber ich muss ja den Zustand "high" noch irgendwie
> festlegen oder?
Nein, das macht der Pullup.
Der zieht auf High.

HansDampf schrieb:
> Das Problem ist eben wenn ich nur am
> Sockel messe ohne MC dann springt die Spannung zwischen 5V oder
> 0V(Taster gerückt) aber wenn ich den MC aufsetze bleiben die 0V (egal ob
> Taster gedrückt oder nicht)

Dein µC zeigt unerwartetes Verhalten.
Ein Programmfehler!?!
Ein Hardwarefehler?!?

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

HansDampf schrieb:
>  Bitte bitte helft mir.

 Bei ATMEGA32 braucht man normalerweise keinen externen Pullup und
 beim Einschalten sind alle Pins Eingänge aber interne Pullups sind
 nicht eingeschaltet.
 Interne Pullup Widerstände sind zwischen 20-50KOhm.

 Mach es einfach so (PB.2 = INP, PB.3 = OUT):
1
#define sbi(x, y) (x) |= (1 << (y))
2
#define cbi(x, y) (x) &= ~(1 << (y))
3
4
 sbi(DDRB, 3);   // PortB.3 ist Ausgang
5
 sbi(PORTB, 3);  // LED aus (falls PB.3 an LED Kathode)
6
7
 cbi(DDRB, 2);   // PinB.2 ist Eingang
8
 sbi(PORTB, 2);  // Internes Pullup an PINB.2 einschalten
9
10
//*** So kannst du pruefen, ob Taster gedrueckt ist
11
 if ( !(PINB & (1<<PINB2)) ) {
12
   cbi(PORTB, 3);  // LED ein (falls PB.3 an LED Kathode)
13
 }

> Sockel messe ohne MC dann springt die Spannung zwischen 5V oder
> 0V(Taster gerückt) aber wenn ich den MC aufsetze bleiben die 0V (egal ob
> Taster gedrückt oder nicht).

 Nochmal die Verbindungen prüfen.
 Ist der Taster auch zwischen GND und PB.2 angeschlossen ?

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

HansDampf schrieb:
> aber wenn ich den MC aufsetze bleiben die 0V
Was ist sonst noch am uC angeschlossen? GND? Vcc?
Zeig doch einfach mal deinen Schaltplan und ein Foto von deinem Aufbau 
(das hat z.B. im Beitrag "Blinkgeber IRF1010 vs IRF540" auch 
geholfen).

> einen externen PullUp Widerstand
Welcher Wert?

> (Taster gerückt)
Wohin?

: Bearbeitet durch Moderator
von HildeK (Gast)


Lesenswert?

HansDampf schrieb:
> Erster
> Schritt ist ja ihn als Eingang zu bestimmen mit DDRB = 0b00001000;

Damit schaltest du ihn auf Output.
Und nach dem Reset ist PORTB 3 auf Null, daher ist der Pin auf LOW. Er 
verhält sich also so, wie es sein soll. Wenn er HIGH werden soll, dann 
fehlt noch der Befehl:
PORTB  = (1<<PB3) ;
Dann sollte aber an dem Pin kein Taster nach GND sein ...

Unklar ist mir allerdings: du hast an PB3 einen Taster mit ext. Pullup 
UND eine LED?
Wie sagte doch

Lothar M. schrieb:
> Zeig doch einfach mal deinen Schaltplan

Also: Auf geht's!

von Einer K. (Gast)


Lesenswert?

Text nicht gelesen...?
Taster an PB2
LED an PB3

von HildeK (Gast)


Lesenswert?

U. F. schrieb:
> Text nicht gelesen...?

Ja, wer lesen kann, ist klar im Vorteil ...
Ist noch zu früh am Morgen :-)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Und bitte auch beim Mega32 alle GND anschliessen (2 Pins beim DIL, 4 
Pins beim TQFP/MLF) und alle Vcc und AVcc (2 Pins beim DIL, 4 Pins beim 
TQFP/MLF).

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.