Problem mit Pullup bei ATtiny13

Gast #1631104
Lesenswert?

Hallo zusammen,
ich möchte erstmal zum Testen ein Programm schreiben, das mit 
eingeschaltetem Pullup ausliest, ob die Verbindung PB0 zu Ground (über 
1kO) geschlossen ist, und dann eine LED an PB3 zum Leuchten bringt, 
falls ja.
Bei diesem Code:
1
.include "tn13def.inc"
2
rjmp Start
3
Start:
4
sbi ddrb, 3
5
sbi portb, 0
6
sbi portb, 1
7
Anfang:
8
sbic pinb, 0
9
rjmp Anfang
10
sbi portb, 3
11
rjmp Anfang

Kommt immer Dauerleuchten.
Was mache ich falsch?
Vielen Dank für eure Hilfe!
#1631123
Lesenswert?

Wie willst du den sbi portb, 3 erreichen?

Den PB0-Pin kannst du direkt auf GND legen. Mit dem 1 K - Widerstand 
ergibt sich zusammen mit dem Pullup ein Spannungsteiler, der den Pin 
dann irgendwo im Niemandsland hängen läßt. (Das kannst du mit einem 
Voltmeter gegen Masse messen.)

Der Widerstand sollte besser mit der LED in Reihe geschaltet sein.
Gast #1631134
Lesenswert?

1
Anfang:
2
  sbic   pinb, 0
3
  rjmp  b
4
  sbi   portb, 3
5
  rjmp   Anfang
6

7
b:
8
  sbi   portb, 3
9
  rjmp   Anfang

Uhu Uhuhu schrieb:
> Mit dem 1 K - Widerstand
> ergibt sich zusammen mit dem Pullup ein Spannungsteiler, der den Pin
> dann irgendwo im Niemandsland hängen läßt. (Das kannst du mit einem
> Voltmeter gegen Masse messen.)

So niederohmig ist der Pullup nun auch wieder nicht.
Gast #1631144
Lesenswert?

Bei diesem Code:
.include "tn13def.inc"
rjmp  Start
Start:
sbi ddrb, 3
sbi portb, 0
sbi portb, 1
Anfang:
  sbic   pinb, 0
  rjmp  b
  sbi   portb, 3
  rjmp   Anfang

b:
  cbi   portb, 3
  rjmp   Anfang
immer noch das gleiche.
Gast #1631153
Lesenswert?

Rolf schrieb:
> Bei diesem Code:
> .include "tn13def.inc"
> rjmp  Start
> Start:
> sbi ddrb, 3
> sbi portb, 0
> sbi portb, 1
> Anfang:
>   sbic   pinb, 0
>   rjmp  b
>   sbi   portb, 3
>   rjmp   Anfang
>
> b:
>   cbi   portb, 3
>   rjmp   Anfang
> immer noch das gleiche.

Oh gott wie unaufmerksam von mir
So jetzt soll's gehen
1
Anfang:
2
  sbic   pinb, PB0
3
  rjmp  b
4
  sbi   portb, PB3
5
  rjmp   Anfang
6

7
b:
8
  sbi   portb, PB3
9
  rjmp   Anfang
Gast #1631161
Lesenswert?

> Kann nicht sein.
> Es MUSS einen sbi und einen cbi geben

Richtig habe aus versehen wieder den alten Code kopiert
1
Anfang:
2
  sbic   pinb, PB0
3
  rjmp  b
4
  sbi   portb, PB3
5
  rjmp   Anfang
6

7
b:
8
  cbi   portb, PB3
9
  rjmp   Anfang

So jetzt aber :-)
#1631277
Lesenswert?

Rolf schrieb:
> Hallo Alex,
> vielen Dank.
> Wenn ich jetzt PB0 an VCC schließe, geht die LED aus.
> Ist das richtig so, oder eine Fehlfunktion?

Das kommt drauf an, wie deine LED verschaltet ist.

Ist deine LED vom Portpin nach GND verschaltet, dann wird sie mit einer 
1 am Ausgang eingeschaltet
Ist die LED vom Portpin nach Vcc verschaltet, dann wird sie mit einer 0 
am Ausgang eingeschaltet.
Gast #1631302
Lesenswert?

Alex Code:
Anfang:
  sbic   pinb, PB0
  rjmp  b
  sbi   portb, PB3
  rjmp   Anfang

b:
  cbi   portb, PB3
  rjmp   Anfang

Statt sbic müsste doch sbis stehen.
Trotzdem erstaunlich das mit VCC satt Ground.
Mein ganzer Code sieht mit Alex' Methode dann so aus:
.include "tn13def.inc"
rjmp  Start
Start:
sbi ddrb, 3
sbi portb, 0
sbi portb, 1
Anfang:
  sbic   pinb, PB0
  rjmp  b
  sbi   portb, PB3
  rjmp   Anfang

b:
  cbi   portb, PB3
  rjmp   Anfang
#1631330
Lesenswert?

Rolf schrieb:
> PB0-GND: 0,53V
> PB0-VCC: 4,33V
> Was mache ich beim einschalten des Pullups falsch?

Hmm.
Eigentlich nichts.

Preobiers mal so
1
.include "tn13def.inc"
2

3
      ldi r16, 0x08
4
      out DDRB, r16
5

6
      ldi r16, 0x03
7
      out PORTB, r16
8

9
Loop:
10
      sbic  PINB, PB0
11
      rjmp  Led_Aus
12

13
      sbi   PORTB, PB3
14
      rjmp  Loop
15

16
Led_Aus:
17
      cbi   PORTB, PB3
18
      rjmp  Loop
Gast #1631344
Lesenswert?

Rolf schrieb:
> Wenn ich jetzt PB0 an VCC schließe, geht die LED aus.
> Ist das richtig so, oder eine Fehlfunktion?
> Verwechsele ich gerade Pullup und -down?

Das wolltest du doch auch, oder?

Siehe Beitrag 1.
PinB0 = 0V   LED soll leuchten?
#1631350
Lesenswert?

Alex |_. schrieb:
> Rolf schrieb:
>> Wenn ich jetzt PB0 an VCC schließe, geht die LED aus.
>> Ist das richtig so, oder eine Fehlfunktion?
>> Verwechsele ich gerade Pullup und -down?
>
> Das wolltest du doch auch, oder?

Schon. Aber die Logik ist falsch.
Eigentlich sollte der Pin per default auf High sein (wegen 
eingeschaltetem Pullup) und eine Verbindung mit GND löst den 
Schaltvorgang aus.
Ob die LED jetzt bei 1 leuchtet oder nicht, ist erst mal ziemlich 
uninteressant. Wichtig ist, warum der Pullup nicht wirkt.

Hmm. Kann es sein dass da ein Misverständnis vorliegt

Vcc .... 5V
GND .... Masse

So sind die Begriffe aufzufassen.

(aber wenn er das verwechselt hätte, dann hätte sein Messgerät negative 
Spannungen angezeigt)

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