Tim schrieb:
> DDRD &=~ (1<<PD2); //PD 2 Eingang (Taster)
> PORTD = (1<<PD2); // Pullup ein
> DDRD &=~ (1<<PD3); //PD 3 Eingang (Taster)
> PORTD = (1<<PD3); // Pullup ein
Der ist ja wohl falsch, macht dir deimem PD2 pull up kaputt.
> if((PIND & (1<<PD3))==0)
>
> {
> _delay_ms(50);
>
> if((PIND & (1<<PD3))==0)
> {
> PORTB |=(1<<PB7);
> }
> else
> {
> PORTB &=~(1<<PB7);
> }
> }
Lass die doppelte Abfrage und den Delay-Kram in diesem Fall weg. Du
prüfst nur wenn der Tasteneingang gedrückt ist, ob er gleich danach
immer noch gedrückt ist und schaltet nur in dem unwahrscheinlichen Fall
daß er prellt und nicht mehr gedrückt ist, wieder aus.
>
> if((PIND & (1<<PD2))==0)
>
> {
> _delay_ms(50);
>
> if((PIND & (1<<PD2))==0)
> {
>
> PORTB ^=(1<<PB6);
> }
> while((PIND & (1<<PD2))==0);
> }
Das ist Murks. Die while Schleife wartet bis der Taster losgelassen
wird, aber er kann dabei genau so prellen wie beim runterdrücken.
Insgesamt ist die Form der Entprellung eher murksig. Du behandelst
runterdrücken und loslassen unterschiedlich. Das ist physikalischer
Unsinn. Ausserdem verbrätst du 10 mal mehr Programm als nötig.