www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie löse ich das mit logischen Verknüpfungen ?


Autor: Andreas K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 !

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...
nicht '!' sonden '~' verwenden
...
CHANGES = ~TASTERALT & TASTER;

Autor: Andreas K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke funzt

ich glaube ich bin etwas PHP & Co - verseucht ;o)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.