Forum: Mikrocontroller und Digitale Elektronik Einzelnes Bit aktualsieren


von Julian (Gast)


Lesenswert?

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

von Sem52 (Gast)


Lesenswert?

Bitmanipulation heisst das Zauberwort bei Google.


https://www.mikrocontroller.net/articles/Bitmanipulation

von Thomas (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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.

von zitter_ned_aso (Gast)


Lesenswert?

Julian schrieb:
> Ich habe einen Arduino

Wurden da nicht für alles eigene Funktionen implementiert?

Google sagt:

https://www.arduino.cc/reference/en/language/functions/bits-and-bytes/bitset/

oder zum Löschen

https://www.arduino.cc/reference/en/language/functions/bits-and-bytes/bitclear/

von zitter_ned_aso (Gast)


Lesenswert?

Julian schrieb:
> . Nun müsste ich ja
> aber dafür wissen, was die Led gerade für einen Zustand haben

Steht auch in der Arduine-Hilfe (sogar mit einem Beispiel):

https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/

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
Noch kein Account? Hier anmelden.