Forum: Mikrocontroller und Digitale Elektronik Problem mit Pullup bei ATtiny13


von Rolf (Gast)


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!

von Uhu U. (uhu)


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.

von Rolf (Gast)


Lesenswert?

An der LED hängt auch noch ein 1KOhm Widerstand dran.
Gut, dann probier ich es mal nur mit ner Drahtbrücke,

von gtf (Gast)


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.

von Rolf (Gast)


Lesenswert?

PB0 an Ground gibt auch Dauerleuchten, komisch!
Was soll ich tun??????????????????????

von gtf (Gast)


Lesenswert?

Korrektur:
Anfang:
  sbic   pinb, 0
  rjmp  b
  sbi   portb, 3
  rjmp   Anfang

b:
  cbi   portb, 3
  rjmp   Anfang

von Flo (Gast)


Lesenswert?

irgendwann solltest du die LED wieder ausschalten :D

von Rolf (Gast)


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.

von Alex M. (Gast)


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

von Karl H. (kbuchegg)


Lesenswert?

Alex |_. schrieb:

> Oh gott wie unaufmerksam von mir
> So jetzt soll's gehen

Kann nicht sein.
Es MUSS einen sbi und einen cbi geben.
Solange im ganzen Code nur sbi vorkommen kann es nicht sein, dass
die LED einmal ein- und einmal ausgeschaltet wird.

von Alex M. (Gast)


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 :-)

von Karl H. (kbuchegg)


Lesenswert?

Rolf schrieb:

> immer noch das gleiche.

Code nicht richtig geflasht?

von Rolf (Gast)


Lesenswert?

Hallo Alex,
vielen Dank.
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?

von Karl H. (kbuchegg)


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.

von Rolf (Gast)


Lesenswert?

Sie ist von PB3 nach Ground geschaltet, also doch eine Fehlfunktion?

von Karl H. (kbuchegg)


Lesenswert?

Rolf schrieb:
> Hallo Alex,
> vielen Dank.
> Wenn ich jetzt PB0 an VCC schließe, geht die LED aus.

Vcc. Sicher?
Oder nicht doch eher GND

von Karl H. (kbuchegg)


Lesenswert?

Rolf schrieb:
> Sie ist von PB3 nach Ground geschaltet, also doch eine Fehlfunktion?

Mit Sicherheit nicht.
Ungewolltes Verhalten ist zu 99.9999% immer ein Programmierfehler.

von Rolf (Gast)


Lesenswert?

Wenn VCC gegenüber RES liegt, leider ja!

von Karl H. (kbuchegg)


Lesenswert?

Rolf schrieb:
> Wenn VCC gegenüber RES liegt, leider ja!

KLemm mal deinen Draht ab, nimm ein Multimeter und miss mal nach welche 
Spannung du am Pin PB0 misst (ohen das sonst irgendetwas dranhängt)

Da du den Pullup eingeschaltet hast, müssen da +5V vorhanden sein.

von Rolf (Gast)


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

von Rolf (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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

von Alex M. (Gast)


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?

von Karl H. (kbuchegg)


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)

von Rolf (Gast)


Lesenswert?

Nö, verwechselt hab ich das nicht.
Ich programmier das mit dem Lernpaket Mikrocontroller von Franzis, 
gekauft habe ich die Controller hier:
http://cgi.ebay.de/ATTINY13-20PU-ATMEL-ATTINY13-20-1K-Flash-20MHz-ATTINY_W0QQitemZ380177762248QQcmdZViewItemQQptZBauteile?hash=item58845c47c8#ht_1935wt_1183

von Patrick (Gast)


Lesenswert?

Hallo Karl Heinz,
ich habs nun mal so probiert.
Immer wenn ich den Taster drücke leuchtet die LED (von PB1 -GND), 
allerdings viel zu dunkel, wieso ist das so?
Vielen Dank!

von Patrick (Gast)


Lesenswert?

Ich habs, so geht es:
.include "tn13def.inc"

      ldi r16, 0x08
      sbi DDRB, PB1
      sbi PORTB, PB0

Loop:
      sbic  PINB, PB0
      rjmp  Led_Aus

      sbi   PORTB, PB1
      rjmp  Loop

Led_Aus:
      cbi   PORTB, PB1
      rjmp  Loop

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.