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?