LED Mux für Arduino #05 Rückblick und Fazit

Nun ist der LED Multiplexer endlich fertig🙂

LED Mux mit 8 LEDs

LED Mux mit 8 LEDs

Zuerst haben wir das Ringzähler IC 4017 kennen gelernt. Ich muss sagen, dass es wirklich praktisch ist und ich es wahrscheinlich in weiteren Versuchen verwenden werde.

Danach haben wir den D-Flip-Flop mit Clear und Preset in einen T-Flip-Flop umgebaut und als Zustandsspeicher verwendet. Weil dieser entweder 5V oder 0V liefert, kann man mit dem Mux nur LEDs steuern sondern auch digitale Signale  ausgeben.

Nun fehlte uns nur noch die Verbindung zwischen Ringzähler Arduino und Zustandsspeicher. Dafür musste uns dann ein einfaches UND-Gatter hinhalten, wie es vier mal im IC 74HC08 zu finden ist.

Acht LEDs auf einem Steckbrett ist aber das Maximum, weil sonst der Platz zu knapp wird.

Die Funktionsweise …

war ja von Anfang an klar: Der Arduino gibt dem Ringzähler einen Impuls und dieser setzt den nächsten Ausgang auf HIGH. Danach gibt der Arduino allen UND-Gattern noch einen Impuls und das UND-Gatter, beidem der Ringzähler auch HIGH ist, gibt der Speicherzelle ein Signal zum Umschalten. Natürlich muss der Arduino nicht bei jedem UND-Gatter ein Impuls geben, weil sonst ja alle LEDs der Reihe nach ein und wieder aus geschaltet werden würden, wie es in den vorherigen Versuchen immer der Fall war.

Der Code

Deshalb ist hier ein kleines Programm, was zwar genau dies wieder macht, aber zwei verschiedene, universell einsetzbare Funktion beinhaltet. Die eine zählt zur LED schaltet den Zustand um und zählt zum Anfang, die andere Zählt nur zur LED und schaltet sie um. Beim nächsten mal zählt sie von der letzten LED weiter. So werden bei dieser Version (V1) Impulse gespart.

Den Zustand der LEDs kann man über MUX_STATE auslesen.


/*

*Alle LEDS werden mittels der
 *Methoden zum ändern des LED-Zustands vom LED Mux
 *von backsite.wordpress.com umgeschaltet
 */
//MUX_COUNTER_PIN wird mit dem Ringzähler verbunden.
//MUX_CHANGE_PIN wird mit allen UND-GAttern verbunden.
int MUX_COUNTER_PIN = 12;
int MUX_CHANGE_PIN = 13;
//Die Zustände der LEDs können aus MUX_STATES ausgelesn werden.
boolean MUX_STATES[10] = {true,true,true,true,true,true,true,true,true,true};
int mux_pos_old = 0;

void setup() {
 //Definiere MUX_COUNTER_PIN und MUX_CHANGE_PIN als Output
 pinMode(MUX_COUNTER_PIN, OUTPUT);
 pinMode(MUX_CHANGE_PIN, OUTPUT);
}

void loop() {
 for(int i = 0; i < 10; i++){
 changeStateV1(i);
 delay(500);
 }
}

//Zählt bis zur gesuchten LED und lässt Zähler dort.
//Dann wird der Zustand geändert.
//Wenn die nächste LED dahinter ist,
//muss nur einen weiter gezählt werden.
void changeStateV1(int pos){
 while(mux_pos_old != pos){
 digitalWrite(MUX_COUNTER_PIN, HIGH);
 digitalWrite(MUX_COUNTER_PIN, LOW);
 mux_pos_old++;
 if(mux_pos_old >= 10){
 mux_pos_old = 0;
 }
 }
 digitalWrite(MUX_CHANGE_PIN, HIGH);
 digitalWrite(MUX_CHANGE_PIN, LOW);
 MUX_STATES[pos] = !MUX_STATES[pos];
}

//Zählt bis zur gesuchten LED,
//Änder den Zustand und
//zählt wieder bis zum Startpunkt.
void changeStateV2(int pos){
 for( int i = 0; i < pos; i++){
 digitalWrite(MUX_COUNTER_PIN, HIGH);
 digitalWrite(MUX_COUNTER_PIN, LOW);
 }
 digitalWrite(MUX_CHANGE_PIN, HIGH);
 digitalWrite(MUX_CHANGE_PIN, LOW);
 MUX_STATES[pos] = !MUX_STATES[pos];
 for( int i = pos; i < 10; i++){
 digitalWrite(MUX_COUNTER_PIN, HIGH);
 digitalWrite(MUX_COUNTER_PIN, LOW);
 }
}

Mehr Ausblick als Fazit…

Der Multiplexer ist sehr universell einsetzbar durch die Möglichkeit, die Spannung aus einem Ausgang zu halten.

Da ich nun mit diesem Projekt fertig bin, werde ich mich nun intensiver mit der Verbindung zum Mindstorms NXT beschäftigen. Außerdem möchte ich eine Verbindung zwischen NXT und Android herstellen, damit ich den  NXT um viele Sensoren erweitern kann.

2 Gedanken zu „LED Mux für Arduino #05 Rückblick und Fazit

  1. Pingback: Input Multiplexer für Arduino oder Mindstorms NXT | backsite

  2. Pingback: Lichtsensor aus Reflexkoppler CNY 70 | backsite

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s