Hallo, ich hänge wieder mal an einem kleinen Problem: Ich habe 8 Taster sowie 8 LEDs über 2 Schieberegister am SPI eines ATMega8 hängen. Mein erstes Ziel war, wenn ein Taster gedrückt wird, dass die entsprechende LED angeht, wenn sie vorher aus war und umgekehrt. Mit XOR soweit kein Problem: LEDS ^= TASTER; wobei Taster, wie der Name schon sagt, eine 8-Bit-Zahl für die eingelesenen Taster ist, LEDS das, was danach über SPI ausgegeben wird. Jetzt werden die Taster aber nicht über einen externen Interupt, sondern gesteuert über den Timer regelmäßig abgerufen. Das hat natürlich zum Ergebniss, dass die LED mit jedem Funktionsaufruf ihren Zustand ändert, solange ein Taster gedrückt ist. Jetzt will ich erreichen, dass bei 1x drücken und gedrückt halten sich der LED-Zustand auch nur 1x ändert. Also habe ich mir gedacht man müsste eingelesenen Wert so manipulieren, dass eben nur auf den Stellen 1er stehen, wo tatsächlich gerade ein Low/High-Übergang stattgefunden hat. Zu dem Zweck habe ich mir das Sperrgatter ausgesucht - so sieht der Code dann aus: CHANGES = !TASTERALT & TASTER; LEDS ^= CHANGES; TASTER = letzter eingelesener Stand TASTERALT = vorletzter eingelesener Stand Was ich jetzt nicht verstehe: irgendwie funktioniert das ganze nur bei LED1, bei den anderen 7 tut sich gar nichts. Habe es auch schon auf verschiedene Art und Weise versucht, klammern zu setzen, leider ohne Erfolg. Weiß jemand Rat ? Danke !
... nicht '!' sonden '~' verwenden ... CHANGES = ~TASTERALT & TASTER;
Danke funzt ich glaube ich bin etwas PHP & Co - verseucht ;o)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.