Forum: Compiler & IDEs probleme mit debounce tastenabfrage (c)


von Lowtzow .. (lowtzow)


Lesenswert?

hallo

hab scho wieder a problem, diesmal mit debounce!

hab für die tastenabfrage zuerst meinen eigenen code verwendet,
1
PORTB &= ~(1<<PB0);
2
  if (PINB & (1<<PINB1)) { 
3
  PORTB&= ~(1<<PB0);
4
                }
5
  else {
6
  PORTB|=(1<<PB0);
7
     }
mit diesem hab ich natürlich ein prellen dabei

ok, die debounce routine ausm turtorial genommen und eingebaut, jedoch 
klappt diese leider nicht.

ganz zu beginn kann ich den taster drücken und der ausgang wird 
geschalten.

hab ich mir schon gedacht dann mach ich einen else zweig else wo wieder 
zurückgesetzt wird
1
if (debounce(&PINB, PB1)) 
2
  {PORTB = PINB ^ ( 1<<PINB0);}
3
else{
4
  PORTB|=(1<<PB0);
5
     }
 bzw zu beginn der while schleife setz ich den ausgang mauell auf 0
1
 while(1) 
2
    {PORTB &= ~(1<<PB0);
3
.
4
.
5
}
leider hilft alles nix, ich muss zugeben mit pointer die in der debounce 
auch vorkommen kenn ich mich fast nicht aus!

vielleicht kann mir wer einen tipp geben.
der taster wird gegen GND geschalten und mittels µc pullup auf 1

1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <stdlib.h>
4
5
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin);
6
 
7
int main(void)
8
{
9
DDRB = (1<<DDB0); //PinB0 als Ausgang
10
DDRB &= ~(1<<DDB1); //PinB1 als Eingang
11
PORTB &= ~(1<<PB0);// PibB0 auf 0
12
PORTB |= (1<<PB1); //  PINB1 PullUp auf vcc
13
14
    while(1) 
15
    {
16
  /*PORTB &= ~(1<<PB0);
17
  if (PINB & (1<<PINB1)) { 
18
  PORTB&= ~(1<<PB0);
19
                }
20
  else {
21
  PORTB|=(1<<PB0);
22
     }
23
*/
24
    if (debounce(&PINB, PB1)) 
25
  {PORTB = PINB ^ ( 1<<PINB0);}
26
  
27
  }
28
  
29
  }
30
31
 inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
32
{
33
    if ( ! (*port & (1 << pin)) )
34
    {
35
        /* Pin wurde auf Masse gezogen, 100ms warten   */
36
        _delay_ms(50);  // max. 262.1 ms / F_CPU in MHz
37
        _delay_ms(50); 
38
        if ( *port & (1 << pin) )
39
        {
40
            /* Anwender Zeit zum Loslassen des Tasters geben */
41
            _delay_ms(50);
42
            _delay_ms(50); 
43
            return 1;
44
        }
45
    }
46
    return 0;
47
}

mfg
low

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.