Forum: Mikrocontroller und Digitale Elektronik Button geht nur manchmal (selten!)


von Erdnuckel (Gast)


Lesenswert?

Hallo!

Ich habe das AVR-Starterboard aus dem Shop. (LED an C5, Button an D2).
Bei Versuch das Avr-Tutorial auf dieser Seite nachzuvollziehen habe ich 
ein Problem:

Die vorgestellten Codes zum Thema Button gehen bei mir gar nicht (keine 
Veränderung).

Hier mein Versuch:



.include "m8def.inc"

  ldi r16, 0xFF  ; C wird Ausgang
  out DDRC, r16

  ldi r16, 0x00  ; D wird Eingang
  out DDRD, r16

  ldi r16, 0xFF  ;Pullup-Widerstand für D
  out PORTD, r16

ende:
  NOP
  NOP
   in r16, PIND  ; D lesen
  ldi r17, 0x00
  cp r16,r17  ;D==0?
  brne notpressed
  ldi r16,0xFF  ;Nein: LED aus
  rjmp schalten

notpressed:
  ldi r16,0x00  ;Ja: Lampe an
  rjmp schalten
schalten:
  out PORTC, r16  ;Wert setzen
  rjmp ende




Die LED leuchtet immer, soll ausgehen wenn Knopf gedrückt wird. Das 
klappt gaaaanz selten mal. Entprellen sollte hier ja keine Rolle spielen 
da es um Knopf gedrückt halten geht?! Hat jemand ne Idee was ich falsch 
machen? Danke im Voraus!

von Stefan B. (Gast)


Lesenswert?

Wenn du an PortD alle Pins auf Eingang hast und alle internen Pullups 
an: Welches ist dein Ruhezustand, also der Wert beim Einlesen von PIND? 
0xFF

Und wenn du einen Pin per Taster auf 0 ziehst z.B. PD0? Wie sieht dann 
PIND aus? 0xFE.

Und wpmit vergleichst du den eingelesenen Wert?

> ldi r17, 0x00
> cp r16,r17  ;D==0?
> brne notpressed

Mit 0x00, d.h. dem Fall wenn alle Pins an PortD gegen 0 getastet sind.
Du musst dich auf den einen Pin konzentrieren an dem dein Taster hängt!

Wie das geht steht im Artikel 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen#Zugriff_auf_einzelne_Bits

von Erdnuckel (Gast)


Lesenswert?

Woohooo!

Danke schön!!!

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.