Ich arbeite mich grade durch das Tutorial durch und bin schon froh, dass ich bis jetzt alles halbwegs auf die Reihe bekommen habe... Nur kriege ich den Tasterteil nicht auf die Reihe. Ich gehe mal davon aus, dass ich den einfach völlig falsch eingebaut habe (siehe Foto) aber alle anderen Versuche haben nichts außer Kurzschlüsse verursacht ;). Kann mir also jemand sagen, was ich wie wo zuschalten/umschalten muss? Danke!
1 | #include <avr/io.h> |
2 | #include <inttypes.h> |
3 | #include <util/delay.h> /* bei alter avr-libc: #include <avr/delay.h> */ |
4 | #include "pins.h" |
5 | #include <stdint.h> |
6 | |
7 | |
8 | /* Einfache Funktion zum Entprellen eines Tasters */
|
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); // Maximalwert des Parameters an _delay_ms |
15 | _delay_ms(50); // beachten, vgl. Dokumentation der avr-libc |
16 | if ( *port & (1 << pin) ) |
17 | {
|
18 | /* Anwender Zeit zum Loslassen des Tasters geben */
|
19 | _delay_ms(50); |
20 | _delay_ms(50); |
21 | return 1; |
22 | }
|
23 | }
|
24 | return 0; |
25 | }
|
26 | |
27 | int main(void) |
28 | {
|
29 | |
30 | DDRB &= ~( 1 << PB0 ); /* PIN PB0 auf Eingang Taster) */ |
31 | PORTB |= ( 1 << PB0 ); /* Pullup-Widerstand aktivieren */ |
32 | DDRC = (1 << DDC5); |
33 | |
34 | while (debounce(&PINB, PB0)) |
35 | // while(1)
|
36 | {
|
37 | /* Falls Taster an PIN PB0 gedrueckt */
|
38 | /* LED an Port PC5 an- bzw. ausschalten: */
|
39 | |
40 | PORTC |= (1<<PC5); |
41 | |
42 | }
|
43 | |
44 | |
45 | |
46 | return 0; |
47 | }
|