so, hier Version 2.0
Die Schaltung ist diese: http://olimex.com/dev/images/avr-p28-sch.gif
Und dieses hier der Code. Ich hatte aber noch keine Gelegenheit zu prüfen, ob er auf dem Board funktioniert. Für das Ein-/Ausschalten habe ich mich dieses Mal über #define entschieden, weil es weniger Code benötigt und die Übergabe einer Variable spart.
Code:#include <avr/io.h> #include <util/delay.h> #include <stdint.h> #define LEDon PORTC &= ~(1<<5); //LED ein mit PORTC5 als 0 da LED auf VCC #define LEDoff PORTC |= (1<<5); //LED aus mit PORTC5 als 1 da LED auf VCC void initialize(); int main(void) { initialize(); while(1) { static uint16_t i=0; if(PIND & (1<<2)) //Wenn der Button gedrückt ist { LEDon; //LED ein und Zähler i auf 0 i=0; } else //Ist der Button nicht gedrückt { //i++ und 1ms Pause i++; _delay_ms(1); } if(i >= 1999)) //Ist i größer 2sec { Ledoff; //LED aus und Zähler i auf 0 i=0; } } return 0; } void initialize() { DDRB = 0x00; //B als Eingang DDRC = (1<<5); //C5 als Ausgang für LED DDRD = 0x00; //D als Eingang PORTD = (1<<2); //PORTD2 mit PullUp-Widerstand (Doppelt zur Schaltung) LEDon; //zwei Mal blinken als Bestätigung _delay_ms(200); LEDoff; _delay_ms(500); LEDon; _delay_ms(200); LEDoff; }







Zitieren

Lesezeichen