Pull up Widerstand

Gast #3613576
Lesenswert?

Hi,
Wenn ich im Code hinschreibien
1
DDRB &= ~(1<<PB0);
2
  PORTB |= (1<<PB0);
dann habe ich doch den Pin PB0 als Eingang deklariert und den inneren 
Pullup-Widerstand aktiviert oder?
Das heisst, ich muss den Pin mit GND verbinden um ihn zu schalten. Im 
Code schreibe ich dann
1
if(!(PINB&(1<<PINB0))){}
Jetzt habe ich das ganze auf einem STeckbrett aufgebaut um es zu testen. 
Als Signal soll nur eine LED angehen, wenn PB0 mit GND verbunden ist.
Jetzt habe ich das aufgebaut und PB0 kann ich mit einem "Steckkabel"? 
mit GND verbinden.
Allerdings hat er das dann trotzdem nicht gemacht. Erst als ich einen 
Widerstand (10k) zwischen VCC und PB0 gesetzt habe macht er das.
Meine Frage ist jetzt warum ich einen Widerstand einsetzen muss? 
eigentlich habe ich doch oben gesagt, dass er den inneren Widerstand 
nehmen soll.
Gast #3613593
Lesenswert?

Mike schrieb:
> Wenn ich im Code hinschreibien
>   DDRB &= ~(1<<PB0);
>   PORTB |= (1<<PB0);
> dann habe ich doch den Pin PB0 als Eingang deklariert und den inneren
> Pullup-Widerstand aktiviert oder?

Das kommt drauf an, auf was für einem Prozessor dein Code laufen soll.
Bei (vielen?) ATmega mußt du noch das PUD-Bit löschen.
Gast #3613594
Lesenswert?

???
Meintest, dass du der ganze Code fehlt? Dann bitte sagen.
1
#define F_CPU 1000000UL
2
#inclue <avr/io.h>
3

4

5

6
int main(void) {
7
  DDRB &= ~(1<<PB0);    // PB4 -> Eingang
8
  PORTB |= (1<<PB0);  // PB4 -> interner Pullupwiderstand
9
  DDRB |= (1<<PB1);  //PB0 -> Ausgang  
10
  PORTB &= ~(1<<PB1);  // PB0 -> low 
11

12
  while(1){
13
    if(!(PINB&(1<<PINB0))){
14
       PORTB |= (1<<PB1); 
15
    }
16
    else{
17
      PORTB &= ~(1<<PB1);
18
    }
19
  }
20
}
Gast #3613823
Lesenswert?

Abgesehen von der etwas verwirrenden Kommentierung ist der Code in der 
Simulation im AVR Studio lauffähig. Dort kann man ja das Bit PINB0 per 
Hand setzen und die Reaktion des PORTB1 beobachten. Ist die 
Hardwarebeschaltung ok?
Gruß Toralf
Gast #3614111
Lesenswert?

Mike schrieb:
> #include <avr/io.h>war nur ein abschreibefehler. Fehler gibt es keine.

Hmm, Abschreibfehler? Kannst du nicht einfach den Originalcode schicken 
statt irgendwas abgeschriebenes?

Asf schrieb:
> Mit PORTB &= ~(1<<PB1); schaltest Du den Pullup ja wieder aus

Warum sollte das den Pullup von PB0 ausschalten?
#3614150
Lesenswert?

Mike schrieb:
> ???
> Meintest, dass du der ganze Code fehlt? Dann bitte sagen.
>
>
1
> #define F_CPU 1000000UL
2
> #inclue <avr/io.h>
3
> 
4
> 
5
> 
6
> int main(void) {
7
>   DDRB &= ~(1<<PB0);    // PB4 -> Eingang
8
>   PORTB |= (1<<PB0);  // PB4 -> interner Pullupwiderstand
9
>   DDRB |= (1<<PB1);  //PB0 -> Ausgang
10
>   PORTB &= ~(1<<PB1);  // PB0 -> low
11
> 
12
>   while(1){
13
>     if(!(PINB&(1<<PINB0))){
14
>        PORTB |= (1<<PB1);
15
>     }
16
>     else{
17
>       PORTB &= ~(1<<PB1);
18
>     }
19
>   }
20
> }
21
>

Der Code ist völlig richtig (oder ich habe Tomaten auf den Augen und 
sehe etwas nicht) und steht so in jedem Anfängerbuch beschrieben.
Es wird dein Steckbrett sein, was dir einen Streich spielt.
Kommt schon öfter vor und man legt sich immer wieder damit rein.
Kleiner Tipp: Löte dir für so einen Tiny doch was auf Lochraster 
zusammen.
Gast #3614618
Lesenswert?

Mike schrieb:
> DDRB &= ~(1<<PB0);    // PB4 -> Eingang
>   PORTB |= (1<<PB0);  // PB4 -> interner Pullupwiderstand

Die magische Kugel sagt mir: Du benutzt PB0 hast die LED aber an PB4.
Überprüfe deinen Hardwareaufbau nochmal ganz genau. Wenn im Code schon 
verschiedene Pins beschrieben werden, ist in der Hardware auch gerne ein 
Fehler drin.
#3614684
Lesenswert?

T.roll schrieb:
> Mike schrieb:
>> DDRB &= ~(1<<PB0);    // PB4 -> Eingang
>>   PORTB |= (1<<PB0);  // PB4 -> interner Pullupwiderstand
>
> Die magische Kugel sagt mir: Du benutzt PB0 hast die LED aber an PB4.
> Überprüfe deinen Hardwareaufbau nochmal ganz genau. Wenn im Code schon
> verschiedene Pins beschrieben werden, ist in der Hardware auch gerne ein
> Fehler drin.

Guck mal, doch Tomaten auf den Augen. :-)
Hatte den Kommentar gar nicht gelesen/übersehen, dass der anders war.

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