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