www.mikrocontroller.net

Forum: Compiler & IDEs Taster entprellen


Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

habe mal wieder ein Anfängerproblem:

Habe folgenden Code zum Entprellen aus dem Tutorial Roboternetz:
Kann mir jemand einen Tipp geben warum es nict funktioniert?
Benutze einen Attiny2313 mit internen Takt.

Danke im Voraus
#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
#define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz  */
#endif
#include <util/delay.h>     /* bei alter avr-libc: #include <avr/delay.h> */ 

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;
}
 

  

int main (void) {

DDRB = 0x0F; //Bit1-4 Ausgang und 5-8 Eingang - Jeweils Taster und LEDs
PORTB = 0x00; //Pullups deaktivieren und Ausgänge = 0


while(1) {



  if (debounce(&PINB, PB6))             /* Falls Taster an PIN PB6 gedrueckt..    */
     {   PORTB = PINB ^ ( 1 << PB3 );  /* ..LED an Port PB3 an-
                    bzw. ausschalten */
   
  }

}

return 0;
}

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast den internen Pullup nicht aktiviert. Hast du einen externen?

Davon abgesehen:
> nict funktioniert
Geht das vielleicht auch etwas genauer/ausführlicher?

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

habe natürlich externe Pullups eingebaut. Es ist ja nicht so das ich 
nicht schon ne Stunde alles ausprobiert habe.

Ich kann so viel wie ich will auf meinen Taster drücken. Die 
dazugehörige LED leuchtet nicht. Hardwearefehler habe ich mit anderen 
testprogrammen ausgeschlossen.

Autor: Ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach übrigens:

Beim compilieren des Codes bekomm ich immer folgende Warnung:

warning: '_delay_ms' is static but used in inline function 'debounce' 
which is not static


...dies sollte jedoch nichts mit meinem Problem zu tun haben, oder?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Statt

> PORTB = PINB ^ ( 1 << PB3 );

würde ich

PORTB = PORTB ^ ( 1 << PB3 );

benutzen. Schaltplan wäre nicht schlecht zur Fehlersuche.

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.