Forum: Mikrocontroller und Digitale Elektronik MAX31885K liefert selten richtige Werte


von Bigfoot (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich hatte gestern Mittag bereits ein Thread eröffnet um zu verstehen, 
wie die Datenkommunikation mit dem MAX31885 funktioniert.

Jetzt habe ich mal die ersten versuche gewagt und scheitere am 
Thermofühler, das dieser mir die korrekten Werte liefert..

Das Datenblatt: http://datasheets.maximintegrated.com/en/ds/MAX31855.pdf


Mein Programmcode sieht wie folgt aus:

  digitalWrite(CS_MAX_, HIGH);
  digitalWrite(SCK_, LOW);
  delay(2000);
  digitalWrite(CS_MAX_, LOW);
  delay(700);
  //Initialisierung zu ende
  for (int i = 0; i < 32; i++) {     //Beginne Bit für Bit auszulesen 
31-0
    //Setzen Tackt auf High um antwort zu erhalten!
    digitalWrite(SCK_, HIGH);
    delay(200);
    //READ MISO
    MAX_ANTW = digitalRead(MISO_);
    //BITS einsortieren
    if (i > 15 && i < 17) {
      lcd.setCursor(0, 1); //
    }
    lcd.print(MAX_ANTW);
    digitalWrite(SCK_, LOW);
    delay(200);

Das Board sowie den Schaltplan habe ich anbei hochgeladen, sowie noch 
zwei Screenshots mit angestecktem Fühler und ohne.

am letzten Bit kann man erkennen, das der Chip den Temperaturfühler 
erkennt, jedoch liefert dieser meist/immer falsche Werte.
In der zweiten Zeile vom Display wird unter anderem die interne 
Temperatur ausgegeben, die soweit ganz gut passt

Z.B. 00011010.... was 26Grad entspricht...

Leider passt die Temperatur vom Temperaturfühler nicht.
Die Ausgabe fängt meist mit 11111 an. Siehe Fotos..

Die Ausgabe auf dem Display beginnt von oben links nach unten rechts.

Druecke bzw. halte ich meinen Finger auf dem eingezeigten bereich(Siehe 
Foto) passen die werte vom Temperaturfühler ganz gut..

Nun die Frage:

Woran kann das liegen?

von Sabberlotte (Gast)


Lesenswert?

Einen 100nF direkt an Pin 1 und 4 (der nächste Kondensator ist 
meilenweit entfernt)
und 10nF an Pin 2 und 3 sollten den Finger ersetzen.

von Bigfoot (Gast)


Lesenswert?

Danke schonmal für den TIPP.

Leider hat das nicht den gewünschten erfolg gebracht.
Ich habe mir jetzt die Stromversorgung und die Datenleitung auf dem Oszi 
angeschaut und kann da kein Rippel feststellen.

Noch jemand einen heißen TIPP??

von Bastian W. (jackfrost)


Lesenswert?

Ist der Fühler richtig dran, also nicht verpolt ? Miss mal die 
Thermospannung mim MM nach.

Gruß JackFrost

von Heiko G. (heikog)


Lesenswert?

Bigfoot schrieb:

>
> Noch jemand einen heißen TIPP??

Ist die Diode in der MISO-Leitung nicht kontraproduktiv ? Der MAX 
liefert auf Pin 7 sein Ausgangssignal, die Diode lässt nur 1-Signale 
durch. Das sollte nur klappen wenn an der Arduino-Seite ein Pulldown 
verschaltet ist.

von Jötze (Gast)


Lesenswert?

Hallo,

Du bist nicht der erste, der von einer fehlerhaften Charge des MAX31885 
in den Hintern gekniffen wird.
Mich hat das unzählige Stunden gekostet, als ich einen Fehler in Hard- 
UND Software gesucht habe, den es schlussendlich nicht gab.
Du musst googeln, welche Charge der Chips betroffen war und ob das auf 
Dich zutrifft, mittlerweile hat Maxim den Bug behoben.
Ich habe seinerzeit ein neues IC geholt und alles lief sofort.
Das gemeine ist, dass der Chip sich sinnvoll verhält, die Fehlerflags 
stimmen etc. - wenn er wenigstens nichts gemacht hätte, dann hätte ich 
ihn viel früher ausgetauscht ...

Wegen dem Namen des Boards ("CJ125.brd"):
wird das mal ein Breitband-Lambdameter?

GJ

von Bigfoot (Gast)


Lesenswert?

Danke für die Antworten..

Die MAX31885 kamen als sample und vor nem Jahr hatte ich mal einen an 
den Raspberry geklebt der hat funktioniert... Anschließend habe ich 
jetzt einen neuen aus der Tüte genommen und den verlötet..

Als ich gestern Nacht nicht schlafen konnte, habe ich ihn abgelötet und 
noch einen neuen verlötet.. Fehler bleibt..


@Jötze Ja zum Schluss kommt noch der CJ125 drauf.. wollte alles nach und 
nach bestücken um Fehlerquellen bei meinem Prototyp auszuschließen..
Den CJ125 habe ich auf einem anderen Port bereits erfolgreich zum laufen 
bekommen mit plausiblen Werten und Heizungsansteuerung etc..

von Bigfoot (Gast)


Lesenswert?

@Bastian Werner, ich habe die PINS auch mal gedreht macht keinen 
unterschied... Wenn ich den Thermofühler in mein Multimeter Stecke zeigt 
dies die korrekten werte an

von Jötze (Gast)


Lesenswert?

Offtopic
Woher hast Du denn den CJ125 bezogen und wieviel bezahlt?
Gibt es eigentlich den CJ135 mittlerweile auch schon für 
Normalsterbliche?

Grüße,
GJ

von Jötze (Gast)


Lesenswert?

Bist Du Dir sicher, dass der Fühler nicht irgendwo auf GND liegt?

von Sabberlotte (Gast)


Lesenswert?

Jötze schrieb:
> Bist Du Dir sicher, dass der Fühler nicht irgendwo auf GND liegt?

Dann wäre Bit 1 gesetzt.

Heiko G. schrieb:
> Ist die Diode in der MISO-Leitung nicht kontraproduktiv ? Der MAX
> liefert auf Pin 7 sein Ausgangssignal, die Diode lässt nur 1-Signale
> durch. Das sollte nur klappen wenn an der Arduino-Seite ein Pulldown
> verschaltet ist.

Das sehe ich auch so.
Ein ordentlicher Pegelwandler ist besser.

von Bigfoot (Gast)


Lesenswert?

Danke für den Hinweis der "defekten" MAx31885
Bei mir steh folgendes drauf:
M31855K
1232A2
529AI

@Jötze
Ich hab jetzt mal die PINS gegen GND gemessen und das sind rund 4KOHM.. 
Vermute das der Wert aufgrund der Internen Verschaltung zustande kommt

@Heiko G. ich habe jetzt mal die Diode gebrückt, da momentan der PIN am 
Arduino auf in steht und ich nichts anderes dran habe...
Ergebnis bleibt unverändert

von Bigfoot (Gast)


Lesenswert?

@Sabberlotte

es ist halt nur so das alle Bits für die interne Temp korrekt sind... 
Wenn der Pegel nicht stimmt würden diese Werte doch nicht so zuverlässig 
geliefert werden

von Sabberlotte (Gast)


Lesenswert?

Bigfoot schrieb:
> Wenn der Pegel nicht stimmt würden diese Werte doch nicht so zuverlässig
> geliefert werden

...stimmt, aber was passt denn nun nicht ohne Finger?
"Wackeln" die Werte zu sehr?
Ist die Abweichung absolut zu groß? > Mittelwert!
Mein Exemplar (MAX31855S) mag z.B. 100° nicht (meint es wären ca.80°).

von Bigfoot (Gast)


Lesenswert?

@Sabberlotte

also mit dem Finger wirds jetzt auch nicht besser.... meistens gibt er 
für die ersten 16 beginnent folgendes aus:

0111110XXXXXXXXX

Also komplett unplausible Werte.

Ich hab jetzt meinen letzten MAX auf ein seperates Board gelötet ohne 
Kondensator etc.. direkt an den Raspberry und dort gibt er richtige 
werte aus.

von Mitlesa (Gast)


Lesenswert?

Bigfoot schrieb:
> Woran kann das liegen?

Sorry dass ich das so destruktiv sagen muss aber:

Bei einem solchen Layout wundert mich dass überhaupt etwas
funktioniert.

Dan sehe ich noch einen BUZ11 der so irgendwo frei im Nirwana
schwebt, vielleicht soll der etwas Leistung schalten? So
wie du das aufbaust sicherlich nicht .....

von Mitlesa (Gast)


Lesenswert?

Heiko G. schrieb:
> Ist die Diode in der MISO-Leitung nicht kontraproduktiv ? Der MAX
> liefert auf Pin 7 sein Ausgangssignal, die Diode lässt nur 1-Signale
> durch

Die drei Dioden sollte man überhaupt erst einmal begründen. Ich
sehe keinen Anlass dafür sie einzusetzen. Zudem (wenn es wirklich
1N4004 sind) sind sie für eine solche Anwendung zu langsam,
das sind ja Gleichrichterdioden für Wechselspannung. Ausserdem
veringern sie den gültigen Pegel der anliegen soll was die
Datenübertragung unsicher macht.

von Bernhard T. (bernhardt)


Lesenswert?

Mir gibt schon der Schaltplan zu denken. Keine vernünftige 
Pegelanpassung stattdessen ???
Datenleitungsrichtung nicht richtig  eingezeichnet (MISO) Diode senkt 
den ohnehin schon niedrigen Pegel zusätzlich. Dioden D12 D13 mit 
Pullupwiderstände  (das ist doch SPI und nicht I2C).
Am falschem Ende gespart.

https://www.mikrocontroller.net/articles/Pegelwandler#3.2C3_V_.E2.87.92_5_V

von Bigfoot (Gast)


Lesenswert?

Hallo Bernhard,

ich habe eure Kritik nun zum Anlass genommen das Layout zu überdenken 
sowie die Kommunikation von 3V3 auf 5V und umgekehrt.

Was würdest du mir denn empfehlen?
5->3V3 einfacher Spannungsteiler ausreichend?
3V3->5V Per Transistor und Pullupwiderstand?

Danke für die TIPPS

von Sabberlotte (Gast)


Lesenswert?

Bigfoot schrieb:
> Was würdest du mir denn empfehlen?
> 5->3V3 einfacher Spannungsteiler ausreichend?
> 3V3->5V Per Transistor und Pullupwiderstand?

Ein TXS0104 sollte reichen.

von Bernhard T. (bernhardt)


Lesenswert?

Bei eine neuem Design wäre ein TXS0104 keine schlechte Idee.
Da die Platine schon steht würde ich als erstes versuchen
1. Die Dioden Pullup Kombinationen durch durch Spannungsteiler zu 
ersetzen.
Das lässt sich wahrscheinlich noch auf der Platine hinfriemeln.
2. D4 würde ich durch eine Brücke ersetzen.

: Bearbeitet durch User
von Bigfoot (Gast)


Lesenswert?

@Bernhard

das werde ich nochmal versuchen mit dem Spannungsteiler..

Du hast mir empfohlen auf der MISO Leitung die Diode zu entfernen.
Da aber auf der MISO Leitung noch der CJ125 kommen soll wuerde der mir 
doch den max mit 5V auf der MISO Leitung zerstoeren oder habe ich hier 
einen Denkfehler?

Noch eine Frage zum TXS was mach ich mit dem OE (Output Enable) PIN das 
habe ich nicht verstanden

Danke

von Sabberlotte (Gast)


Lesenswert?

Bigfoot schrieb:
> ....was mach ich mit dem OE (Output Enable) PIN....

Datenblatt sagt:
When the output-enable (OE) input is low, all outputs are placed in the 
high-impedance state.

Also im Normalfall auf 3V3. Dann ist er nur Pegelwandler.

von Bernhard T. (bernhardt)


Lesenswert?

MISO = Master in Slave out. Wobei wir wieder bei der Datenrichtung 
angekommen sind. Solange du dir darüber nicht klar bist lass das lieber 
und teste das erst mal auf einem Steckboard.
Mit OE kannst du den Ausgang sperren oder freischalten. Wird gerne 
verwendet um zu verhindern das 2 Ausgänge gegeneinander fahren oder um 
die Ausgänge mehrere Bausteine an einen Eingang des uC zu hängen. Das 
heißt man schaltet den Ausgang eines Peripheriebaustein dann frei wenn 
der uC sicher auf Eingang ist und bereit ist die Daten auch zu erfassen. 
Keine Ahnung was der TXS sein soll aber wenn es dafür ein Datenblatt 
gibt sollte das weitere Informationen liefern.
Zu deiner Information Ausgänge gegeneinander zu schalten kann auch in 
reinen 5Volt Systemen zur Zerstörung der Bauteile führen bei gemischten 
System geht das natürlich um so leichter.

von Bigfoot (Gast)


Lesenswert?

@Bernhard

Danke schonmal für deine Erklärung.

Kann ich den OE auch auf 5V hängen oder muss es 3V3 sein?

Vermutlich kann ich dir mit MISO nicht ganz folgen.
MISO heißt Master in Slave Out, soweit kann ich dir noch folgen.

habe ich aber mehrere Slaves wie bei mir (CJ125+MAX31885) müssen diese 
doch parallel auf der MISO Leitung hängen oder liege ich hier etwa 
falsch..

Nur über den Slave Select spreche ich den Korrekten Chip an?
Wähle ich nun über SS den CJ125 an wird dieser auf der MISO Leitung die 
parallel zum MAX31885 hängt seine Daten in 5V verschicken..

Dadurch bekommt der MAX eine zu hohe Spannung..

Mit der Lösung des OE wenn ich es richtig verstanden habe kann ich 
dieses "Problem" umgehen

P.S. ich meine mit TXS den TXS0104

von Bigfoot (Gast)


Lesenswert?

Um TXS nochmal aufzulösen... TXB0104  wurde am Anfang falsch geschrieben 
und ich habs einfach weitergetragen

von Bigfoot (Gast)


Lesenswert?


von Sabberlotte (Gast)


Lesenswert?

Bigfoot schrieb:
> Kann ich den OE auch auf 5V hängen oder muss es 3V3 sein?

...siehe Datenblatt: an 3V3!

Bigfoot schrieb:
> habe ich aber mehrere Slaves wie bei mir (CJ125+MAX31885) müssen diese
> doch parallel auf der MISO Leitung hängen oder liege ich hier etwa
> falsch..

Nein, du liegst richtig.

Bigfoot schrieb:
> Nur über den Slave Select spreche ich den Korrekten Chip an?
> .......................
> Mit der Lösung des OE wenn ich es richtig verstanden habe kann ich
> dieses "Problem" umgehen

Genau. Da du aber vom Nano aus (5V) umschalten musst ist die Spannung an 
OE auf 3V3 zu begrenzen. Im einfachsten Fall mit einem Spannungteiler.

von Bigfoot (Gast)


Lesenswert?

okay danke erstmal ich werde am dienstag vorraussichtlich die neuen 
Teile bekommen und kann den in etwa ende der Woche berichten.


Vielen Dank bis hierhin

von Bigfoot (Gast)


Lesenswert?

Hallo Leute,

ist doch noch ein wenig später geworden als geplant...

Ich habe es jetzt nochmal so umgesetzt, wie hier beschrieben:
1. Neue Platine mit anderen Layout als aufsteckmodul für ein arduino 
Mega2560
2. Mit einem einem Logik Umsetzer 3V3<>5V
3. Sehr Wichtig!!! Kondensator 1nF parallel zum Thermolement, ohne 
diesen Kondensator schwankt die Spannung um die 15-20Grad.


Vielen herzlichen Dank nochmal..

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.