Angelegte(r) Flanke/Pegel an Multiplexer-Kanal merken und halten

Hallo zusammen,

ich suche nach einer Möglichkeit, beim Wechseln der Kanäle eines Multiplexers, den jeweilig kurz angelegten Pegel quasi zu speichern, so dass trotz Kanalwechsel weiter durchgeschaltet wird, bis dieser Kanal wieder resettet wird. Wäre dafür eine Kippstufe etwas oder/bzw. ein T Flip Flop o.ä.? Andere Ideen? Und vor allem finde ich dazu im Zusammenhang mit einem Arduino nur sehr wenig Informationen. Klappt das denn überhaupt so wie ich mir das vorstelle? Gibt es Library's oder Beispielsketches zu dem Thema? Bin bisher nicht fündig geworden.

Vielen Dank schon mal!

Du kannst doch den angelegten Wert zuvor in einer Variablen speichern.

Den Rest verstehe ich allerdings nicht.

1 Like

Hallo,
ja du legst so viele Variable an wie du Kanäle hast, wenn du dann den Wert einließt ordnest du ihn der Variablen zu. Dann bleibt er auch erhalten bis zum nächsten mal.
Arrays eignen sich z.B dazu
Heinz

1 Like

Erst mal danke für eure schnellen Antworten!

Aber ein Multiplexer ist ja einfach nur eine Kanalerweiterung des Arduinos und die Kanäle werden ja binär ausgewählt und eingestellt. Vom Arduino aus geht ja nur eine Leitung, also ein Ausgang an den Multiplexer. Der gewünschte Kanal wird am Multiplexer vorgegeben, der Ausgang am Arduino auf High bzw. in dem Fall auf Low gezogen und es liegen am ausgewählten Multiplexer Kanal die 5V an. Wenn ich dann aber den Kanal über eine andere Binärfolge wechsel, werden doch auch eben an einem anderen Kanal die 5 V durchgeschaltet und nicht mehr am vorherigen. Da kann man sich doch nicht einfach den Zustand merken, weil er ja immer mal wieder den Kanal wechseln muss oder wie meinst du das genau? Verstehe es nicht so ganz. Pegel merken ja, aber Kanal am Multiplexer geschaltet lassen trotz wechsel des Kanals?

Im ersten Posting hast du vergessen zu sagen: Eingang oder Ausgang?
Immer noch nicht klar: Analog oder Digital?

Wozu überhaupt ein Multiplexer?
Warum nicht, z.B. ein MCP23017?

Ja, sorry. Ich verstehe deinen Post auch nicht.
Kannst du das nicht verständlicher schreiben und mit allen nötigen Angaben.

const byte kanaele = 8;
bool kanalZustand[kanaele] = {false};
bool lastZustand[kanaele] = {false};

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  randomSeed(analogRead(A0));
}

void loop()
{  
  byte kanal = random(0, kanaele);
  Serial.print(F("geänderter Kanal: "));
  Serial.println(kanal);
  kanalZustand[kanal]=!kanalZustand[kanal];
  for (byte b = 0; b < kanaele; b++)
  {
    Serial.print(kanalZustand[b]);
    Serial.print(' ');
  }
  Serial.println();
  delay(200);
}

Du hast acht Kanäle, jeder Kanal bekommt einen Wert.
Der wird in der Variablen gespeichert.
Wird der Kanal ausgewählt, siehst Du seinen alten Wert und kannst dem einen neuen zuweisen.

1 Like

Danke für die Tipps und Hinweise! Vielleicht noch mal klarer formuliert.

An einem digitalen Kanal (als Ausgang definiert) des Arduinos hängt ein 74hc4051. Am 4051 wird ja wiederrum über die Eingänge A-D per Binärcodierung der erweiterte Kanal angewählt. Schickt der Arduino dann ein Signal raus, werden doch die 5V am zuvor eingestellten Kanal am 4051 durchgeschaltet. Wenn man dann aber einen anderen der erweiterten Kanäle ansteuern möchte, muss dieser ja erst wieder per Binärcodierung ausgewählt/eingestellt werden. Dann schaltet der Arduino das Signal ja an diesem Kanal durch. Der vorherige Kanal ist ja dann quasi wieder gesperrt.

Und in dem Zusammenhang war meine Frage, ob es eine Möglichkeit gibt quasi mehrere Kanäle gleichzeitig zu schalten. Also sich den Zustand/Pegel irgendwie zu merken, damit mehrere Kanäle trotz Kanalwechsel per Binärcodierung offen gehalten werden und der Arduino, wenn er ein Signal an den 4051 schickt mehrere offen gehaltene Kanäle am 4051 bedient und diese beschaltet.

Die eigentliche Idee war eben das Einbringen eines Flip Flops. Aber wenn das softwaretechnisch gehen würde bzw. der 4051 generell mehrere Kanäle gleichzeitig einstellen kann, wäre das natürlich auch top. Aber wegen der eindeutigen Ansteuerung per Dualcode sehe ich da irgendwie keine Lösung in Aussicht oder?

Wie wäre es mal mit Datenblatt lesen....
Da steht genau drin was der 4051 kann.

Was mir in den Sinn kommt:
Warum verwendest du einen Analogschalter, wenn du doch digitale Signale schalten willst?
Warum ein Multiplexer, wenn du doch eine Porterweiterung willst?

Warum nur? Warum nur?
Hast du dich auf den 4051 so festgefressen?

1 Like

Nein, nicht unbedingt festgeschossen auf den 4051. Aber er war eben in der anfänglichen Planung eine gute Wahl. Welchen Baustein schlägst du denn als Alternative vor?

Ich befürchte, das hilft nicht, wenn ich meine vorherige Aussage aus #5 wiederhole, oder?

  • MCP23017
  • MCP23S17
  • PCF8574
  • 74x595

Es gibt so viele....

1 Like

Mal anders gefragt:

was möchtest du mit deiner Schaltung erreichen ?

Danke für den Tipp. Der MCP23017 kann scheinbar auch sequentiell schalten und hat genügend Kanäle, der sollte gut passen als Ersatz.

Was bedeutet das?

Warum hast du den im vorherigen Posting #5 nicht gefunden?

Der kann Kanäle wie gehabt binär schalten oder eben auch gleichzeitig, also passt. Sorry, ich hatte den Post #5 natürlich gelesen, habe aber erst mal nach einer Lösung für den aktuellen Aufbau gesucht. Vielen Dank für den nochmaligen Hinweis.

Wieso Ersatz ?
Aber nochmal:

Es sollen einfach über einen Portexpander mehrere Dinge gleichzeitig oder leicht versetzt geschaltet werden können und dann geschaltet bleiben, bis sie eben wieder ausgeschaltet werden. Bspw. LEDs oder später dann ggf. Relais etc. Am Arduino selbst eigentlich überhaupt kein Problem, aber mit Expander dann eben wegen der Kanaleinstellung etwas aufwendiger.

Nö, mit der richtigen Library, kein Problem.
Und wenn du das gleich am Anfang richtig mit kommuniziert hättest, wärest du schon eher zum Ziel gekommen.

Hallo,
ich kannte das Ding nicht hab aber mal gesucht , Dabei handet es sich doch um einen 8fach Analog-Multplexer mit dem man Analoge-Eingänge liest. Du willst doch Ausgänge schalten , wo hab ich da was falsch verstanden.

Heinz

Es hat sich auf ein Bauteil festgefressen gehabt, welches für seine/ihre Zwecke untauglich ist.

Frei nach dem Motto:

Wer in die falsch Richtung läuft, braucht sich nicht zu beeilen.

Oder:

Der Weg in die Hölle ist mit falschen Annahmen gepflastert.

Der generelle Tipp, für solche Situationen:

Der Kopf ist rund, damit das denken die Richtung ändern kann.