Forum: Mikrocontroller und Digitale Elektronik Multiplexer fehlinterpretiert Eingabesignal


von Jq (hansdampfbus)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
ich bastel gerade an einer Schaltung auf der insgesamt 12 Thermocouple 
Converter ICs (MAX31856) sitzen sollen.
Angesteuert und ausgelesen wird das ganze über SPI von einem Raspberry 
Pi 4.
Damit nicht gleich alle GPIO Pins vom Raspberry genutzt werden, wollte 
ich eigentlich einen 16:1 Multiplexer (74HC4067) verwenden, dieser macht 
jetzt aber Probleme.

Die Schaltung und das auslesen funktioniert mit direkter Ansteuerung des 
CS Pins der ICs wunderbar, nur wenn ich den Multiplexer dazwischen 
schalte, passieren mir unerklärliche Dinge.
Den Multiplexer steure ich ganz normal über die vier Inputs (S0, S1, S2, 
S3) an und aktiviere den Ausgang dann mit dem Enable Pin.
Der entsprechend angewählte Ausgang wird dann mit meinem Eingangssignal 
(common input Z) verbunden, dieser liegt auf Ground.
Testweise habe ich auch ein 5kHz Rechtecksignal als Ansteuersignal 
verwendet, das hat komischerweise einwandfrei funktioniert.
SPI läuft mit 500 kHz.

Ein Screenshot vom Oszilloskop hab ich angehängt. (Gelb ist gemessen 
nach dem Multiplexer; Blau ist das Enable Signal vor dem Multiplexer)

Zusätzlich noch die Schematics vom Multiplexer und einem Thermocouple 
IC.

Ich hab heute den ganzen Tag gemessen und gerätselt und komm einfach 
nicht drauf, was es sein könnte. Irgendjemand ne Idee?

Besten Dank und schöne Osterfeiertage,
Hansdampf

von Jörg R. (solar77)


Lesenswert?

Jq schrieb:
> Der entsprechend angewählte Ausgang wird dann mit meinem Eingangssignal
> (common input Z) verbunden, dieser liegt auf Ground.

Weshalb liegt Z auf Ground? Damit wird der ausgewählte Eingang doch 
quasi kurzgeschlossen.

von Jq (hansdampfbus)


Angehängte Dateien:

Lesenswert?

Der CS (Chip Select) des MAX31856 reagiert auf ein LOW Signal.
Über einen 10kOhm Widerstand wird das Signal auf 3.3V gehalten und über 
den Multiplexer dann auf Ground (LOW-Signal) gebracht.
(siehe Angehängtes Bild)

Ohne Multiplexer geht der Pin der am CS angeschlossen ist auf 0V, mit 
dem Multiplexer simuliere ich das indem ich den Pin einfach auf Ground 
schalte.

Bitte korrigier mich falls hier schon mein Fehler liegt.

von Jörg R. (solar77)


Lesenswert?

Jq schrieb:
> Der CS (Chip Select) des MAX31856 reagiert auf ein LOW Signal.
> Über einen 10kOhm Widerstand wird das Signal auf 3.3V gehalten und über
> den Multiplexer dann auf Ground (LOW-Signal) gebracht.
> (siehe Angehängtes Bild)
>
> Ohne Multiplexer geht der Pin der am CS angeschlossen ist auf 0V, mit
> dem Multiplexer simuliere ich das indem ich den Pin einfach auf Ground
> schalte.
>
> Bitte korrigier mich falls hier schon mein Fehler liegt.

Z liegt also immer auf GND und Y sind Ausgänge. Der entsprechend 
ausgewählte Y (in Deinem Beispiel CS7) legt dann CS eines MAX31856 auf 
GND um dem Chip zu selektieren?

Weshalb nimmst Du nicht einen 74HC4515? Du brauchst doch keinen 
Analogmultiplexer.

https://assets.nexperia.com/documents/data-sheet/74HC4515.pdf

Weshalb 2 Spannungsquellen? Die 74HCxx laufen auch mit 3,3V.


> Ein Screenshot vom Oszilloskop hab ich angehängt. (Gelb ist gemessen
> nach dem Multiplexer; Blau ist das Enable Signal vor dem Multiplexer)

Ist der Aufbau korrekt? GND der 2 Spannungsquellen korrekt miteinander 
verbunden? Der 74HC4067 schaltet ja recht unmotiviert durch.

Gibt es Abblockkondensatoren im Testaufbau?

: Bearbeitet durch User
von Jq (hansdampfbus)


Lesenswert?

> Z liegt also immer auf GND und Y sind Ausgänge. Der entsprechend
> ausgewählte Y (in Deinem Beispiel CS7) legt dann CS eines MAX31856 auf
> GND um dem Chip zu selektieren?
Genau so hab ich mir das gedacht.

> Weshalb nimmst Du nicht einen 74HC4515? Du brauchst doch keinen
> Analogmultiplexer.
Tatsächlich wäre ein 74HC4515 wahrscheinlich die bessere Lösung gewesen, 
ich wusste aber nicht, das es sowas gibt. Falls es mit meinem 
Analogmultiplexer auch geht, würde ich den jetzt aber gerne weiter 
benutzen.

Für die Zukunft hab ich das Bauteil aber im Kopf, danke!

> Weshalb 2 Spannungsquellen? Die 74HCxx laufen auch mit 3,3V.
Richtig, aber die 5V kommen eh vom Raspberry Pi und werden dann über 
einen 3.3V Spannungswandler auf der Platine für die MAX31856 gewandelt.
Die 5V sind also eh vorhanden.
Mit 5V sollte der Schaltwiderstand vom MUX auch geringer sein, das ist 
der einzige Grund.

> Ist der Aufbau korrekt? GND der 2 Spannungsquellen korrekt miteinander
> verbunden? Der 74HC4067 schaltet ja recht unmotiviert durch.
Common Ground für alles.
Und mit einem 5kHz Rechtecktestsignal funktioniert’s auch komischerweise 
problemlos.

> Gibt es Abblockkondensatoren im Testaufbau? Spendiere dem Enable vom MUX mal 
einen Pullup.
Hilf mir mal bitte, was genau du mit Abblockkondensatoren meinst.
Die ICs haben alle 0.1uF an der Versorgung bekommen, falls du das 
meinst.

Mach ich, aber müsste ich das nicht eigentlich am Oszi sehen, wenn das 
Enable Signal am MUX nicht passt?

Danke dir!

von Jörg R. (solar77)


Angehängte Dateien:

Lesenswert?

Zeige mal Fotos von der Schaltung.

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Jq schrieb:
> Falls es mit meinem Analogmultiplexer auch geht, würde ich den jetzt
> aber gerne weiter benutzen.

Dann musst du aber genügend kleine Pull-up Widerstände verwenden, um die 
nicht selektierten Ausgänge schnell genug auf High zu ziehen. Bei 500kHz 
schaltet der sonst vielleicht nicht schnell genug ab. Wie sehen die 
CS-Signale bei höherer Zeitauflösung aus und wie liegt deine 
SPI-Kommunikation zeitlich dazu. Im Übrrsichtsbild ist das etwas 
schlecht zu sehen.

Jq schrieb:
> F0018TEK.BMP

p.s.
Für Screenshots bitte PNG- oder GIF-Format benutzen (s. Hinweis auf 
Bildformate).
BMP ist wegen der fehlenden Kompression eher ungünstig.

: Bearbeitet durch User
von Jq (hansdampfbus)


Lesenswert?

Leute ich hab das Problem gefunden!
Ich hab seit heute morgen Messungen gemacht, bis mir irgendwann 
aufgefallen ist, dass ich die S0-S3 Pins noch nicht ausgemessen hatte.
Siehe da, der Pin "S1A" (GPIO8 - SPI0_CE0N), der am Pi angeschlossen ist 
verursacht das Problem.
Obwohl ich den Pin nicht direkt anspreche, scheint die board.SPI() oder 
die adafruit_max31856 library irgendwas im Hintergrund zu machen.

Ist ein bisschen komisch, weil man den cs pin Softwaretechnisch separat 
auswählen kann und ich den ja eigentlich auf mein Enable für den MUX 
gelegt hab.

Ich hab auch mal in die librarys reingeschaut, konnte aber auf Anhieb 
nichts finden, dafür reichen meine Programmierkenntnisse nicht.

Jörg R. schrieb:
> Zeige mal Fotos von der Schaltung.
Recht viel mehr als die zwei Bilder die ich schon angehängt hab ist in 
der Schaltung nicht zu finden.
Die Thermocouple sind alle gleich verschalten und ansonsten gibt's 
eigentlich nur noch den Schaltregler und den GPIO-Header. Wenn du mir 
aber sagst, was du noch gerne sehen würdest, kann ich das noch 
nachreichen.

Rainer W. schrieb:
> Dann musst du aber genügend kleine Pull-up Widerstände verwenden, um die
> nicht selektierten Ausgänge schnell genug auf High zu ziehen. Bei 500kHz
> schaltet der sonst vielleicht nicht schnell genug ab. Wie sehen die
> CS-Signale bei höherer Zeitauflösung aus und wie liegt deine
> SPI-Kommunikation zeitlich dazu. Im Übrrsichtsbild ist das etwas
> schlecht zu sehen.
Aktuell sind 10kOhm Pull-Ups verbaut, ich messe jetzt nochmal und schau 
mir die Anstiegs/Abfallzeiten und die SPI Kommunikation an. Aktuelle 
sieht es aber so aus, als ob das passen würde.

Den Hinweis mit den Bildformaten werd ich in Zukunft befolgen, danke 
dir.

: Bearbeitet durch User
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.