Taster reagieren nach einiger Zeit nicht mehr

OP #1930468
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:
Gast #1930539
Sobald das Programm bei delay_ms ankommt, muss er natürlich erstmal 
nachgucken was in der Variable "delay" steht, dadurch vergeht natürlich 
auch wieder etwas zeit und wird unpräzise.
#1930548
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.