probleme mit debounce tastenabfrage (c)

OP #1139720
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.