Forum: Mikrocontroller und Digitale Elektronik LEDs toggeln nicht richtig


von Gerrit (Gast)


Lesenswert?

Moin Männer und natürlich Frauen,

ich habe wohl noch mal eine Anfängerfrage:

Ich habe mein Programm so aktualisiert, dass ich mit einem Tasterdruck 
an PINC die LEDs an PORTD toggle. Du nun bei längerem Tasterdruck die 
LEDs dunkler leuchteten (weil immer getoggelt wurde), habe ich die 
Schleife switch_off_ eingebaut. Manchmal gehen die LEDs beim Drücken 
kurz aus und wieder an, bzw. umgekehrt. Woran kann das liegen?

start:
  ; Stack-Pointer initialisieren
  ldi r16, HIGH(RAMEND)
  out SPH, r16
  ldi r16, LOW(RAMEND)
  out SPL, r16

  ; PORTC als Ausgang
    ldi r16, 0xFF
  out DDRC, r16

  ldi r16, 0xFF
  out PORTC, r16

  ; PÓRT D als Eingang
  ldi r16, 0x00
  out DDRD, r16
  ; Pull-Up aktivieren
  ldi r16, 0xFF
  out PORTD, r16

main:
  sbis PIND, 2
  rcall switch_off
    rjmp main

switch_off:
  mov r17, r16
  in r16, PORTC
  com r16
  out PORTC, r16
  mov r16, r17
switch_off_:
  sbis PIND, 2
  rjmp switch_off_
  ret

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Die Taste prellt. Gegenmaßnahme: softwareseitig entprellen.

von hp-freund (Gast)


Lesenswert?


von hp-freund (Gast)


Lesenswert?

Für den Fall das Du dieses Tutorial benutzt hat:

https://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

würde ich empfehlen alle Punkte abzuarbeiten.
Also unten auf der Seite immer wieder :  Vor zu ...

Damit werden fast alle nötigen Punkte abgearbeitet.

von Simpel (Gast)


Lesenswert?

Es reicht, die Tasten in einem Timer-Interrupt nur alle 10-30ms 
abzufragen. Damit sind sie ohne Kopfstand entprellt.

Die Erkennung des Zustandwechsels (Flankenerkennung) macht man 
üblicherweise mit einem Hilfsflag. Dabei wird der Tastenzustand und das 
Hilfsflag verglichen. Am Ende wird das Hilfsflag mit dem Tastenzustand 
wieder gleichgesetzt. Nur wenn sich beim Vergleich der Tastenzustand und 
der des Hilsflags unterscheiden, gab es eine Tastenaktion. Auf die wird 
dann reagiert.

So wie du es gelöst hast ist es zwar für deine simple Anwendung möglich, 
aber du hängst während des gesamten Tastendrucks in einer Endlosschleife 
und kannst auf sonst nix reagieren. Gewöhne dir sowas erst garnicht an, 
das gilt als böses Foul beim programmieren.

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.