externer PullUp

Gast #4637221
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.
Gast #4637229
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?!?
(Firma: Vescomp) #4637232
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 ?
Moderator (Firma: Titel) Persönliche Seite #4637262
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?
Gast #4637317
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!

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