Forum: Mikrocontroller und Digitale Elektronik Tastenentprellung / Flankenerkennung auf UC3A nach Foren-Artikel


von Buddler B. (buddler) Benutzerseite


Lesenswert?

Hallo,

ich möchte mit 2 Tastern die Periodendauer einer PWM einstellen.
Ich habe mir den Artikel zur Tastenentprellung im Forum angesehen 
(http://www.mikrocontroller.net/articles/Entprellung) und probiert die 
Tastenentrpellung umzusetzen.

Die geänderte Methode sieht wie folgt aus (bisher nur ein Taster):
1
int taster(void)
2
{
3
#define TASTER (AVR32_GPIO.port[1].pvr >> 0) & 1
4
  static int zustand; //Variable mit fester Speicheradresse
5
  int rw = 0;
6
7
  if(zustand == 0 && TASTER) //Taster wird gedrueckt (steigende Flanke)
8
  {
9
    zustand = 1;
10
    rw = 1;
11
  }
12
  else if (zustand == 1 && TASTER) //Taster wird gehalten
13
  {
14
    zustand = 2;
15
    rw = 0;
16
  }
17
  else if (zustand == 2 && !TASTER) //Taster wird losgelassen (fallende Flanke)
18
  {
19
    zustand = 3;
20
    rw = 0;
21
  }
22
  else if (zustand == 3 && !TASTER)  //Taster losgelassen
23
  {
24
    zustand = 0;
25
    rw = 0;
26
  }
27
  return rw;
28
}

Der Methodenaufruf sieht wie folgt aus (in einer While(1)-Schleife):
1
druck = taster();
2
    if (druck == 1){
3
      up++;
4
      AVR32_GPIO.port[0].ovrs = 1;
5
      pwmpurge(5000, 10000+up*10000, 2);
6
      if(up > 10){up = 0;}
7
    }

Es ist leider nur ein Effekt zu sehen, wenn aus der ersten Bedingung 
zustand entfernt wird (dann gibt es eine Reaktion auf den Pin, bzw. rw 
wird einmal 1 gesetzt), also schließe ich auf ein Problem mit der 
static-Variable.

Woran könnte das Problem liegen?

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.