mikrocontroller.net

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


Autor: Lowtzow .... (lowtzow)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

hab scho wieder a problem, diesmal mit debounce!

hab für die tastenabfrage zuerst meinen eigenen code verwendet,
PORTB &= ~(1<<PB0);
  if (PINB & (1<<PINB1)) { 
  PORTB&= ~(1<<PB0);
                }
  else {
  PORTB|=(1<<PB0);
     }
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
if (debounce(&PINB, PB1)) 
  {PORTB = PINB ^ ( 1<<PINB0);}
else{
  PORTB|=(1<<PB0);
     }
 bzw zu beginn der while schleife setz ich den ausgang mauell auf 0
 while(1) 
    {PORTB &= ~(1<<PB0);
.
.
}
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

#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>

inline uint8_t debounce(volatile uint8_t *port, uint8_t pin);
 
int main(void)
{
DDRB = (1<<DDB0); //PinB0 als Ausgang
DDRB &= ~(1<<DDB1); //PinB1 als Eingang
PORTB &= ~(1<<PB0);// PibB0 auf 0
PORTB |= (1<<PB1); //  PINB1 PullUp auf vcc

    while(1) 
    {
  /*PORTB &= ~(1<<PB0);
  if (PINB & (1<<PINB1)) { 
  PORTB&= ~(1<<PB0);
                }
  else {
  PORTB|=(1<<PB0);
     }
*/
    if (debounce(&PINB, PB1)) 
  {PORTB = PINB ^ ( 1<<PINB0);}
  
  }
  
  }

 inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
    if ( ! (*port & (1 << pin)) )
    {
        /* Pin wurde auf Masse gezogen, 100ms warten   */
        _delay_ms(50);  // max. 262.1 ms / F_CPU in MHz
        _delay_ms(50); 
        if ( *port & (1 << pin) )
        {
            /* Anwender Zeit zum Loslassen des Tasters geben */
            _delay_ms(50);
            _delay_ms(50); 
            return 1;
        }
    }
    return 0;
}

mfg
low

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.