Merkwürdiges Verhalten des 74hc4067

OP #7809918
Lesenswert?

Ich habe 8 Mux 74hc4067, von denen ich mit einem ESP32 den digitalen Wert des Signalausgangs pro Kanal auslesen möchte. Der Sig-pin ist fest mit 3,3 Volt verbunden. Die Ausgänge c0 bis c15 sind über Taster mit 3,3 Volt verbunden. Die Adressleitungen sind korrekt mit den Mux verbunden. Folgenden Code habe ich auf meinem ESP programmiert:

1
#define s0 16
2
#define s1 17
3
#define s2 18
4
#define s3 19
5
const int en[8] = {15, 21, 22, 23, 26, 27, 32, 33};
6

7
#define sig 4
8
#define led 12
9
int a;
10
int i;
11
int value;
12

13
void setup() {
14
  Serial.begin(115200);
15
  pinMode(s0, OUTPUT);
16
  pinMode(s1, OUTPUT);
17
  pinMode(s2, OUTPUT);
18
  pinMode(s3, OUTPUT);
19
  pinMode(sig, INPUT_PULLDOWN);
20
  pinMode(led, OUTPUT);
21
  for (i = 0; i < 8; i++)
22
  {
23
    pinMode(en[i], OUTPUT);
24
  }
25
}
26

27
void loop()
28
{
29
// Schleife durch alle Multiplexer
30
  for (int mux = 0; mux < 8; mux++)
31
  {
32
    // Aktiviere den aktuellen Multiplexer
33
    digitalWrite(en[mux], LOW);
34
    // Schleife durch alle 16 Kanäle
35
    for (int channel = 0; channel < 16; channel++)
36
    {
37
      // Setze die Steuerpins entsprechend dem Kanal
38
      digitalWrite(s0, bitRead(channel, 0));
39
      digitalWrite(s1, bitRead(channel, 1));
40
      digitalWrite(s2, bitRead(channel, 2));
41
      digitalWrite(s3, bitRead(channel, 3));
42
      // Lese den analogen Wert vom SIG_PIN
43
      value = digitalRead(sig);
44
      if (value == 1)
45
      {
46
      // Gib den Multiplexer, Kanal und Wert auf dem seriellen Monitor aus
47
      Serial.print("Multiplexer ");
48
      Serial.print(mux + 1);
49
      Serial.print(", Kanal ");
50
      Serial.print(channel);
51
      Serial.print(": ");
52
      Serial.println(value);
53
      // Warte eine kurze Zeit
54
      delay(10);
55
      digitalWrite(en[mux], HIGH);
56
      }
57
    }
58
    // Deaktiviere den aktuellen Multiplexer      
59
    digitalWrite(en[mux], HIGH);
60
    delay(100);
61
  }
62
}

Merkwürdigerweise zeigt der serielle Monitor unter anderem, ohne dass ich eine Taste drücke, folgende Ausgaben an: Multiplexer 4, Kanal 13: 1 Multiplexer 4, Kanal 14: 1 Multiplexer 4, Kanal 15: 1 Multiplexer 5, Kanal 8: 1 Multiplexer 5, Kanal 9: 1 Multiplexer 5, Kanal 10: 1 Multiplexer 5, Kanal 11: 1 Multiplexer 5, Kanal 12: 1 Multiplexer 5, Kanal 13: 1 Multiplexer 5, Kanal 14: 1 Multiplexer 5, Kanal 15: 1 Die unteren 8 Kanäle des MUX werden richtig nicht ausgegeben, da ja ohne Tastendruck diese nicht aktiviert werden. Warum werden aber die oberen 8 Kanäle mit dem Wert 1 ausgegeben, ohne dass der Kanal auf 3,3 Volt gezogen wird´?

#7809938
Lesenswert?

https://www.ti.com/lit/ds/symlink/cd74hc4067.pdf

Ausgänge c0 bis c15

Die sind bidirektional, also Ein- oder Ausgang. Das ist ein Analogschalter, der eines von 16 Signalen mit dem gemeinsamen Pin "COMMON INPUT/OUTPUT" durchschaltet (wenn der /Enable low ist).

Kann es ein Hardwareproblem sein, Löt- oder Verdrahtungsfehler?

Es ist immer nur einer der 16 Anschlüsse zum gemeinsamen Anschluss durchgeschaltet, die anderen 15 "hängen in der Luft". Der Pegel dort ist beliebig und hängt vom Ladezustand der Eingangskapazität ab.

OP #7809963
Lesenswert?

Hallo Christoph,

vielen Dank für Deinen Beitrag. Lötprobleme scheiden aus, da ich die Verbindungen durchgemessen habe. Hardwarefehler möchte ich auch ausschließen, da bei allen 8 Mux die gleiche Ausgabe stattfindet. Auch ein Tausch des ESP bringt keine Besserung. Keine Ahnung, woran das liegen könnte. Vielleicht wäre es eine Idee, den Ausgängen c0 bis c15 einen Pull-Down-Widerstand vorzuschalten? Gruß U.K.

#7809977
Lesenswert?

  1. Du schreibst: "Der Sig-pin ist fest mit 3,3 Volt verbunden." Wieso sollte dann beim Lesen des sig-pins etwas anderes als 1 herauskommen?

  2. Du liest immer nur den 1. Kanal richtig.

    1
      digitalWrite(en[mux], HIGH);
    

    steht innerhalb der for Schleife für die Kanäle und damit wir nach dem Lesen des 1.Kanals der Multiplexer deaktivert.

#7810001
Lesenswert?

Ulrich K. schrieb:

Aber beim nächsten Durchlauf wird doch dann der zweite Kanal des Mux aktiviert und der Wert des sig-pins wird an den uC weitergebeb, Außerdem wird doch für den ersten Kanal keine 1 ausgegeben.

Aber der enable-Eingang des Multiplexers wird deaktiviert, also ist egal welcher Kanal aktiviert wird. Zeig am Besten einfach mal den Schaltplan.

#7810006
Lesenswert?

Ulrich K. schrieb:

Vielleicht wäre es eine Idee, den Ausgängen c0 bis c15 einen Pull-Down-Widerstand vorzuschalten?

Nein.

Zeige, wie schon mehrfach erwähnt, den Schaltplan.

Ulrich K. schrieb:

Hallo Christoph,

vielen Dank für Deinen Beitrag. Lötprobleme scheiden aus, da ich die Verbindungen durchgemessen habe.

Das haben hier schon einige User behauptet, was sich dann aber öfter doch anders dargestellt hat. Zeige daher bitte auch Fotos vom Aufbau.

OP #7810086
Lesenswert?

Jörg R. schrieb:

Ulrich K. schrieb:

Vielleicht wäre es eine Idee, den Ausgängen c0 bis c15 einen Pull-Down-Widerstand vorzuschalten?

Nein. Zeige, wie schon mehrfach erwähnt, den Schaltplan. Ulrich K. schrieb im Beitrag #7809963:

Hallo Christoph, vielen Dank für Deinen Beitrag. Lötprobleme scheiden aus, da ich die Verbindungen durchgemessen habe.

Das haben hier schon einige User behauptet, was sich dann aber öfter doch anders dargestellt hat. Zeige daher bitte auch Fotos vom Aufbau.

Ich würde sagen, wenn das Ohmmeter vom Beginn bis zum Ende einer Verbindung 1 Ohm anzeigt, dürfte man von einer funktionierenden Verbindung ausgehen.

Angehängte Dateien:
#7810111
Lesenswert?

Ulrich K. schrieb:

Jörg R. schrieb: (..) Ich würde sagen, wenn das Ohmmeter vom Beginn bis zum Ende einer Verbindung 1 Ohm anzeigt, dürfte man von einer funktionierenden Verbindung ausgehen.

Du hast ein Problem und suchst Hilfe..nicht wir.

Dein „Plan“ ist eine Frechheit. Es ist kein Schaltplan und zeigt auch nichts vom tatsächlichen Aufbau.

Ich wünsche Dir viel Glück bei der weiteren Fehlersuche🍀

#7810197
Lesenswert?

Ulrich K. schrieb:

Beim nächsten Durchlauf wird doch der nächste Mux mit for (int mux = 0; mux < 8; mux++) { // Aktiviere den aktuellen Multiplexer digitalWrite(en[mux], LOW); .... aktiviert und dann wieder die 16 Eingänge ausgelesen.

Die Zeile digitalWrite(en[mux], HIGH); Steht dort zweimal! Einmal in der for Schleife für die Kanäle (dort ist sie falsch) und einmal in der for Schleife für die Multiplexer.

#7810236
Lesenswert?

1 Ohm

laut Datenblatt ein Durchgangswiderstand um 70 Ohm je nach Betriebsspannung. Und die Sperrdämpfung je nach Frequenz >100dB, ansteigend auf <20dB bei 100 MHz. Eingangskapazität 5pF (bzw. 50 pF für den gemeinsamen Anschluss). Je ein pull-down würde das zumindest gleicher machen und die seltsamen Unterschiede verringern, die den Verdacht auf Schaltungsfehler wecken.

OP #7810616
Lesenswert?

Helmut -. schrieb:

Schaltplan??? Foto vom Aufbau???

Mc M. schrieb:

Ulrich K. schrieb:

Aber beim nächsten Durchlauf wird doch dann der zweite Kanal des Mux aktiviert und der Wert des sig-pins wird an den uC weitergebeb, Außerdem wird doch für den ersten Kanal keine 1 ausgegeben.

Aber der enable-Eingang des Multiplexers wird deaktiviert, also ist egal welcher Kanal aktiviert wird. Zeig am Besten einfach mal den Schaltplan.

Hab mir die Mühe gemacht, die Beschaltung der Bauteile klarer zu zeichnen, hoffe, das ist ausreichend.

Angehängte Dateien:
#7810618
Lesenswert?

Ulrich K. schrieb:

Helmut -. schrieb:

Schaltplan??? Foto vom Aufbau???

Mc M. schrieb:

Ulrich K. schrieb:

Aber beim nächsten Durchlauf wird doch dann der zweite Kanal des Mux aktiviert und der Wert des sig-pins wird an den uC weitergebeb, Außerdem wird doch für den ersten Kanal keine 1 ausgegeben.

Aber der enable-Eingang des Multiplexers wird deaktiviert, also ist egal welcher Kanal aktiviert wird. Zeig am Besten einfach mal den Schaltplan.

Hab mir die Mühe gemacht, die Beschaltung der Bauteile klarer zu zeichnen, hoffe, das ist ausreichend.

Was an Foto(s) vom Aufbau verstehst Du nicht?

Der "Schaltplan" ist immer noch eine Frechheit.

OP #7810637
Lesenswert?

Jörg R. schrieb:

Ulrich K. schrieb:

Helmut -. schrieb:

Schaltplan??? Foto vom Aufbau???

Mc M. schrieb:

Ulrich K. schrieb:

Aber beim nächsten Durchlauf wird doch dann der zweite Kanal des Mux aktiviert und der Wert des sig-pins wird an den uC weitergebeb, Außerdem wird doch für den ersten Kanal keine 1 ausgegeben.

Aber der enable-Eingang des Multiplexers wird deaktiviert, also ist egal welcher Kanal aktiviert wird. Zeig am Besten einfach mal den Schaltplan.

Hab mir die Mühe gemacht, die Beschaltung der Bauteile klarer zu zeichnen, hoffe, das ist ausreichend.

Was an Foto(s) vom Aufbau verstehst Du nicht?

Der "Schaltplan" ist immer noch eine Frechheit.

Verstehe nicht, was an dem Schaltplan nicht in Ordnung ist, für mich zeigt ein Schaltplan die Bauteile und die Verbindungen. Wenn ich mich irre, dann wäre es nett, mir mitzuteilen, was daran falsch ist. Was ein Foto vom Aufbau an weiterer Klarheit bringen soll, ist mir auch nicht klar, aber .... Leider konnte ich die nochmal angehängten Schaltpläne nicht entfernen.

Angehängte Dateien:
#7810658
Lesenswert?

Ulrich K. schrieb:

Harald K. schrieb:

Ulrich K. schrieb:

Wenn ich mir den zitierten Schaltplan ansehe, dann kann ich keinen großen Unterschied zu meinem außer vielleicht in den Stilelementen feststellen.

Ach?

https://www.mikrocontroller.net/attachment/657891/Schaltpult_Aufsicht.jpg

Was ist das denn!?

Du wolltest doch ein Foto vom Aufbau.

Du willst uns verarschen:-(

Ich denke Du kommst auch gut alleine klar..

Jemand der Hilfe sucht tritt anders auf. Du betreibst hier Salamitaktik, allerdings ohne Salami.

OP #7810675
Lesenswert?

Jörg R. schrieb:

Ulrich K. schrieb:

Wenn ich mir den zitierten Schaltplan ansehe, dann kann ich keinen großen Unterschied zu meinem außer vielleicht in den Stilelementen feststellen.

Ach? https://www.mikrocontroller.net/attachment/657891/Schaltpult_Aufsicht.jpg Was ist das denn!?

Du wolltest doch ein Foto vom Aufbau.

Du willst uns verarschen:-( Ich denke Du kommst auch gut alleine klar.. Jemand der Hilfe sucht tritt anders auf. Du betreibst hier Salamitaktik, allerdings ohne Salami.

Es wäre schön, wenn ich statt der in den Foren leider üblich gewordenen kritisierenden Beiträge konstruktive Lösungen (wie z.B. die von Mc M. (mcmix)13.01.2025 16:46) unter der Voraussetzung fehlerfreier Schaltung (soll ja auch vorkommen) bekäme.

#7810681
Lesenswert?

Ulrich K. schrieb:

Ulrich K. schrieb:

Helmut -. schrieb:

Schaltplan??? Foto vom Aufbau???

Ich bin raus! Sowas als Schaltplan anzubieten ist eine bodenlose Frechheit. Und das Foto vom Aufbau auch!

Zum Schaltplan: durch Bauteile zieht man NIE ünd NIMMER irgendwelche Leitungen.

Und zum Aufbaufoto: erkennst du da irgendwelche Teile? Wie ist die Verdrahtung, wie ist die Stromversorgung?

#7811225
Lesenswert?

Pull-Downs 1K an jeden Signaleingang des 4067 und an jeden seiner Betriebsspannungsanschlüsse 100nF. Sag jetzt nicht "Die sind ja dran, ab sie nur nicht mitgezeichnet" (Die teilnehmenden Hilfesteller haben durchaus Recht: man erkennt nix!, die Dateigröße darf ruhig 600k, statt 63k betragen)

Die Ausgänge c0 bis c15 sind über Taster mit 3,3 Volt verbunden.

Die meine ich. In deinem Fall sind es "Eingänge". Dort kommt überall je ein 1K gegen GND direkt am Pin.

Der Sig-pin ist fest mit 3,3 Volt verbunden.

Stimmt nicht. er ist mit dem "Pin4" (lt.Plan https://www.mikrocontroller.net/attachment/657890/Schaltplan_Mux.jpg ) des ESP verbunden. Die Aussage hat viel Verwirrung gestiftet. Hiernach geht aber auch der steuereingang"A" des 4067 an GND, sofern ich das erkennen kann. Kann aber auch PIN8 sein. Man weis es nicht. Die Beschriftung ist etwas verrutscht.

Und genau das ist gemeint mit: "Dein Plan ist Mist" Was wird das überhaupt? Wer fertigt solch riesige Leiterplatten und warum hast Du die 4067 nicht gleich aufs Bord gebracht, sondern lieber diese blauen Platinen verwendet, wenn Du sowieso ein Layout angefertigt hast?

OP #7811460
Lesenswert?

Peter D. schrieb:

Wie bereits gesagt: value = digitalRead(sig); // *** insert Breakpoint or serial / key input here *** if (value == 1)

Und dann messen. Kaffeesatz lesen kann hier keiner.

Ich danke allen, die wirklich konstruktive Beiträge geliefert haben (davon gab es wirklich einige). Allen Anderen möchte ich zwar auch für Ihre wenn auch nicht weiterführenden Beiträge danken. Ich habe nach einer Gedankenpause noch einmal logisch überlegt und bin dadurch dem Fehler auf die Spur gekommen. Es war tatsächlich ein Lötbrücke. Diesen Fehler konnte man letztlich durch logische Auswertung der seriellen Ausgabe eingrenzen. Pull-down-Widerstände sind bei meiner Schaltung nicht notwendig, alles funktioniert jetzt nach Beseitigung des Fehlers einwandfrei.

#7811577
Lesenswert?

Ulrich K. schrieb:

(..) Ich danke allen, die wirklich konstruktive Beiträge geliefert haben (davon gab es wirklich einige). Allen Anderen möchte ich zwar auch für Ihre wenn auch nicht weiterführenden Beiträge danken.

Ich habe nach einer Gedankenpause noch einmal logisch überlegt und bin dadurch dem Fehler auf die Spur gekommen.

Du hättest einfach früher auf einige User hören sollen, anstatt auf dem hohen Roß sitzen zu bleiben.

Es war tatsächlich ein Lötbrücke. Diesen Fehler konnte man letztlich durch logische Auswertung der seriellen Ausgabe eingrenzen.

Ja, aber wem erzählst Du das?

Lötprobleme hast Du übrigens weiter oben kategorisch ausgeschlossen.

Jörg R. schrieb:

Ulrich K. schrieb:

Hallo Christoph,

vielen Dank für Deinen Beitrag. Lötprobleme scheiden aus, da ich die Verbindungen durchgemessen habe.

Das haben hier schon einige User behauptet, was sich dann aber öfter doch anders dargestellt hat.

Pull-down-Widerstände sind bei meiner Schaltung nicht notwendig, alles funktioniert jetzt nach Beseitigung des Fehlers einwandfrei.

Man lässt Eingänge von ICs nicht offen.

Vielleicht trittst Du beim nächsten mal etwas anders auf. Viele User hier sind Ingenieure, Techniker oder zumindest engagierte Hobbyelektroniker. Wenn da nach Schaltplänen, Fotos vom Aufbau usw. gefragt wird machen die das nicht aus Langeweile.

Was glaubst Du wieviele User hier schon eine LED falsch herum auf dem Breadboard gesteckt hatten, und die sich nicht erklären konnten weshalb sie nicht leuchtet? Gern gesehen sind auch vertauschte D und S Pins bei Mosfets. So etwas sieht man auf einem Foto des Aufbaus sehr schnell. Die User waren aber felsenfest überzeugt davon alles richtig gemacht zu haben, bis dann das Foto kam.

Deine gezeigten Fotos usw. sind weit weg von dem was auch im entferntesten Sinne zur Hilfsbereitschaft aufruft. Du willst nicht einmal den Unterschied zwischen deinem und einem von einem anderen User gezeigten Schaltplan erkennen.

Hier ist wohl kaum jemand der dein Layout, also die Anordnung der Bauteile, nachvollziehen kann. Vielleicht hätte hier etwas an Erläuterung Deinerseits gut getan.

Auf den 74HC4067 Breakouts sitzen vermutlich Abblockkondensatoren. Trotzdem fehlen mir auf dem PCB weitere Kondensatoren in der Stromversorgung. Das PCB ist so groß, das hätten hier vermutlich einige User anders gemacht, angefangen bei der Auswahl der ICs.

OP #7812093
Lesenswert?

Sei mir nicht böse, ich will weder die Qualifikation der Beitragleistenden in Frage stellen noch verkenne ich den Unterschied zwischen meinem "Schaltplan" und dem zitierten. Da ich aber nur 2 unterschiedliche Bauteile auf meiner PCB habe und die wenigen Verbindungen meiner Meinung nach deutlich eingezeichnet habe (in Ermangelung eines passenderen Schaltungszeichnungsprogramms), bin ich der Meinung, dass man die Schaltung auch in meinem Diagramm gut nachvollziehen kann. Zu dem Foto kann ich sagen, dass eine Begutachtung der Leiterbahnen aufgrund der doppelseitigen Platine und der zahlreichen Leiterbahnen (Eingänge der Multiplexer und Spannungsversorgung) kaum möglich ist. Bei den wenigen Verbindungen zwischen uC und den 8 Multiplexern würde auch der Schaltplan ausreichen. Lötprobleme habe ich nicht ausgeschlossen, ich habe lediglich geschrieben, dass ich die Verbindungen geprüft habe. Aber ich denke, dass jetzt genug Beiträge gewechselt wurden und dass jeder seine eigene Meinung haben kann.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren