Taster reagieren nach einiger Zeit nicht mehr

OP #1930468
Lesenswert?

Hallo!

Ich habe ein einfaches Programm geschrieben (mit Hilfe der debounce 
Funktion die in den Tutorials beschrieben wird), um ein paar LEDs nach 
einem bestimmten Muster zum leuchten zu bringen.
Spaßeshalber habe ich versucht dieses mit vier verschiedenen Tastern 
auszulösen, was soweit auch funktioniert.
ABER, nach ein paar Aufrufen (Drücken der Taster) passiert nichts mehr.
Erst nach einer Weile (ca. 30sec) reagiert der Controller wieder auf die 
Tasten.
Kann mir das eventuell jemand erklären bzw was ich im Code falsch 
gemacht habe?

Danke!

Code (im Anhang ist die led_defines.h):
1
#define F_CPU 1000000
2
#include <avr/io.h>
3
#include <util/delay.h> 
4
#include "led_defines.h"
5

6
int main() {
7

8
int a;
9
int b;
10
int delay=150; 
11

12

13
DDRC |= (1 << PC5) | (1 << PC4) | (1 << PC3) | (1 << PC2) | (1 << PC1);
14
DDRB |= (1 << PB2) | (1 << PB6) | (1 << PB1);
15

16
while (1) {
17

18

19
if (Taster4 | Taster2 | Taster3 | Taster1) {
20
for (a=1, b=8; a<=4; a++, b--) {
21
  
22
  _delay_ms(delay);
23
  light(a);
24
  light(b);
25
  }
26

27
for (a=1, b=8; a<=4; a++, b--) {
28
  
29
  _delay_ms(delay);
30
  nolight(a);
31
  nolight(b);
32
  } 
33

34
}
35
}
36
}
Angehängte Dateien:
#1930548
Lesenswert?

Bastian F. schrieb:

> Zu _delay_ms: Sorry, für die blöde Frage, aber würde es denn einen
> Unterschied machen, wenn ich delay nicht als Variable, sondern als
> Konstante definiere?

_delay_ms ist darauf angewiesen, dass der Optimizer den kompletten delay 
sich vornehmen und optimieren kann. Da müssen dann 
Gleitkommaberechnungen vom Compiler durchgeführt und wieder wegoptimiert 
werden. Das geht aber nur, wenn der Compiler den Zahlenwert sieht.
Daher: keine Variablen.

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