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
 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten