Einzelnes Bit aktualsieren

Gast #5870347
Hi

Ich habe noch nicht so viel erfahrung mit Programmierungen von 
Mikrocontrollern, also bitte verzeiht mir wenn diese eine "zu einfache" 
Frage ist. Ich möchte mit einem Freund zusammen für ein Event etwas 
zusammenbauen.

Ich habe einen Arduino und daran ein TL595 IC angeschlossen, hierbei 
handelt es sich um ein Port-Expander welcher seriell angeschlossen ist. 
Es kann also nicht wie bei I2C Expandern ein einzelner Ausgang gesetzt 
werden ,es muss immger das ganze Register aktualisiert werden.

Nun habe ich verschiedene LEDs an den 8 Ausgängen. Ich habe bereits 
Experimente gemacht, und es funktioniert einwandfrei.

Mein Problem ist nun, das ich z.b. eine Funktion machen will, die z.b. 
"setLed(8)" heisst, und dann die 8te LED anschaltet. Nun müsste ich ja 
aber dafür wissen, was die Led gerade für einen Zustand haben, da ich ja 
auch die anderen LED "wieder" auf Ein bzw. aus setzen muss.

Irgendwie müsste man beim Ausführen von "setLed" abspeichern welche LED 
gerade welchen zustand hat, also etwas im stil von

byte ledStatus = 00100111

und dann

shiftOut(ledStatus)

Das habe ich auch schon probiert, also mit beliebigen werten von 
ledStatus, und es funktioniert.

Nun komme ich aber nicht weiter, wie ich die einzelnen Werte im byte 
ledStatus aktualisieren kann.

Kann mir jemand vielleicht weiterhelfen wie man sowas macht?

Grüsse Julian
Gast
Wenn du den Status nicht rücklesen kannst must du eine Variable 
deklarieren und dort immer speicheren was du sendest. Diese Variable ist 
dann quasi dein Ledstatus. Einzelne LEDs kannst du dann mit 
bitmanipulationen verändern.

Dabei gilt für die Bitmaske OR setzt AND löscht XOR toggelt.

Thomas
Gast
So setzt du eine Bit auf 1:

variable |= (1<<bitNummer);

Und so setzt du ein Bit auf 0:

variable &= ~(1<<bitNummer);

Danach kannst du die Variable senden.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.