externer PullUp

Gast #4637221
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
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
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 ?
Gast #4637317
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.