Ich sag mal, das Problem ist eher logischer NaturVersteh nicht woran das liegen kann.
Schau Dir den Programmablauf in Ruhe an...
Du Testest, ob ein Pin HIGH ist, wenn ja schaltest Du eine LED sofort an, dann gehst Du in die "1Sekunde vernichten" Schleife rein, in der der µC jetzt gefangen ist, dann fragst Du wieder den Pin ab, wenn HIGH wieder 1 Sekunde nichts tun, egal ob die LEDs schon an ist, oder nicht
Wenn Du jetzt ungünstig Deinen Taster loslässt, also wenn i sag
ich mal 2 ist, wie lange dauert es, bis die nächste Pin Prüfung gemacht wird?![]()
Besser wäre hier auf Flankenwechsel zu reagieren, also in die Zeilen mit LED an und delay nur dann springen wenn der Pegel am PD0 von LOW auf HIGH wechselt.
Mögliche Lösung sieht dann so aus:
Naja, ein Durchlauf ist jetzt aber nötig, Du mußt also die Taste solange drücken, bis PA0 HIGH wird, dafür gehen die LEDs sofort aus...Code:uint8_t flanke = 0; ... ... if (PIND & (1<<PD0)) { if (!flanke){ flanke = 1; PORTA |= (1<<PA1); for (i=1; i<=100; i=i+1) { _delay_ms(10); } PORTA |= (1<<PA0); } } else{ flanke = 0; PORTA &= ~(1<<PA0); PORTA &= ~(1<<PA1); }
Logisch?
Gruß Sebastian








Zitieren

Lesezeichen