Vielleicht hilft dir das:
https://www.roboternetz.de/community...ghlight=hbquax
Werbung
Vielleicht hilft dir das:
https://www.roboternetz.de/community...ghlight=hbquax
Hier gibt es auch was über Entprellen:
http://www.mikrocontroller.net/articles/Entprellung
Ich arbeite bei solchen Sachen gerne mit Flags.
Nach der Entprellung Flag Taste gedrückt
Wenn Flag Taste gedrückt und Impuls nicht ausgegeben in die Funktion Impuls springen und Flag Impuls setzten. Wenn Impuls aus, Flag Impuls aus setzen.
Wenn Taste losgelassen Flag Taste ist 1 und Flag Impuls ist 0 alle Flags zurücksetzen.
Wenn man den Flags vernünftige Namen gibt bleibt das ganze übersichtlich und man kann alles gegenseitig verriegeln.
Ja genau, hier liegt das Problem:
if(PINC&(1<<PINC0))
Du musst danach warten, bis der Taster wieder losgelassen wird. Ich würde nach dem Switch-Element noch folgende zwei Zeilen programmieren:
while (PINC&(1<<PINC0))
_delay_ms (10);
Damit hast du dann auch gleich deine Entprellung.
Viele Grüße
Andreas
Ich habe nicht das ganze Programm angeschaut, aber deine switch-Anweisung wird so nicht funktionieren:
In der switch-Anweisung hast du PORT D, und der ist 8-bit gross. Nachher hinter dem case hast du eine 8-stellige Zahl die für den ersten Fall 10.101Mio bedeuten. Entweder du machst beim case auch ein 0b... davor oder du machst alles direkt in Hex-Werten. Ich meinte mal gelesen zu haben dass C die 0b.... Darstellung nicht unterstützt!Code:switch (PORTD) { case 10101010: PORTD|=0b01011010; break; ...
...wer nicht findet hat nicht gesucht...
...weil ich es gerade sehe:
Es muss auch
heißen!?Code:case 0b10101010:
- - - Aktualisiert - - -
...und gleich noch ein Fehler:
[code]
PORTD = 0b01011010;
[code]
ohne das |= das "verodert" dir sonst dein PortD und dann sind alle Bits 1.
Ich hab mein Ziel erreicht!![]()
http://www.youtube.com/watch?v=DIhq1Y1x1ow
Mein Youtube Kanal http://www.youtube.com/user/RateReducer
Lesezeichen