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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.