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