Hallo! Ich bin am Verzweifeln. Am Pin D3 messe ich normal 0V, mit gedrücktem Button 5V. Alles nett soweit, ist n PullDown dran, soll ja so sein. Leider kriegt der Atmega32-16AU das garnicht mit!!! Folgender Code bringt die LED dazu durchgehend zu leuchten, egal wie sehr ich auf dem Button rumdrücke.
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | #include <stdlib.h> |
4 | |
5 | #define LED_PIN PD6
|
6 | #define LED_PORT PORTD
|
7 | |
8 | #define BUTTON_PIN PD3
|
9 | #define BUTTON_PORT PORTD
|
10 | |
11 | int main (void) { |
12 | // Jetzt die Ports richtig beschalten:
|
13 | |
14 | DDRA = 0b11111111; // PA7 - PA0 als Ausgang (1) |
15 | PORTA = 0b00000000; // PA7 - PA0 auf LOW schalten (0) |
16 | |
17 | DDRB = 0b11100011; // PB7 - PB5 und PB1 - PB0 als Ausgang (1), PB4 - PB2 als Eingang (0) |
18 | PORTB = 0b00000000; // PB7 - PB0 auf LOW schalten (0), erstmal keinen Internen PullUps (Wäre 1) |
19 | |
20 | DDRC = 0b11111111; // PC7 - PC0 als Ausgang (1) |
21 | PORTC = 0b00000000; // PC7 - PC0 auf LOW schalten (0) |
22 | |
23 | DDRD = 0b11110000; // PD7 - PD4 als Ausgang (1), PD3 - PD0 als Eingang (0) |
24 | PORTD = 0b00000011; // PD7 - PD4 auf LOW schalten (0), Interne PullUps für PD1 - PD0 anschalten (1) |
25 | // ACHTUNG! PD0 ist RXD, PD1 ist TXD!
|
26 | |
27 | LED_PORT |= (1<<LED_PIN); |
28 | _delay_ms(500); |
29 | LED_PORT &= ~(1<<LED_PIN); |
30 | |
31 | while (1) { |
32 | if ((BUTTON_PORT & (1<<BUTTON_PIN))) { |
33 | LED_PORT &= ~(1<<LED_PIN); |
34 | } else { |
35 | LED_PORT |= (1<<LED_PIN); |
36 | }
|
37 | _delay_ms(5); |
38 | }
|
39 | }
|
Hat jemand ne Idee? JTAG habe ich schon zig mal ausgeschaltet, das sollte an dem Port aber eh nichts machen, oder? Danke, Toby