Forum: Compiler & IDEs Taster entprellen


von Ingo (Gast)


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
1
#include <avr/io.h>
2
#include <inttypes.h>
3
#ifndef F_CPU
4
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
5
#define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz  */
6
#endif
7
#include <util/delay.h>     /* bei alter avr-libc: #include <avr/delay.h> */ 
8
9
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
10
{
11
    if ( ! (*port & (1 << pin)) )
12
    {
13
        /* Pin wurde auf Masse gezogen, 100ms warten   */
14
        _delay_ms(50);  // max. 262.1 ms / F_CPU in MHz
15
        _delay_ms(50);
16
    
17
        if ( *port & (1 << pin) )
18
        {
19
            /* Anwender Zeit zum Loslassen des Tasters geben */
20
            _delay_ms(50);
21
            _delay_ms(50); 
22
            return 1;
23
        }
24
    }
25
    return 0;
26
}
27
 
28
29
  
30
31
int main (void) {
32
33
DDRB = 0x0F; //Bit1-4 Ausgang und 5-8 Eingang - Jeweils Taster und LEDs
34
PORTB = 0x00; //Pullups deaktivieren und Ausgänge = 0
35
36
37
while(1) {
38
39
40
41
  if (debounce(&PINB, PB6))             /* Falls Taster an PIN PB6 gedrueckt..    */
42
     {   PORTB = PINB ^ ( 1 << PB3 );  /* ..LED an Port PB3 an-
43
                    bzw. ausschalten */
44
   
45
  }
46
47
}
48
49
return 0;
50
}

von Stefan E. (sternst)


Lesenswert?

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

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

von Ingo (Gast)


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.

von Ingo (Gast)


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?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Statt

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

würde ich

PORTB = PORTB ^ ( 1 << PB3 );

benutzen. Schaltplan wäre nicht schlecht zur Fehlersuche.

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.