Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.
Hinweis kann nach Kenntnisnahme deaktiviert werden!
Hallo Sk8erboi,
wie Du siehst, funktioniert der MAX6675 an 1-Wire.
Nur habe ich ein komisches Phänomen festgestellt:
Der erste Auslesevorgang produziert irgendwie Mist.
Ich bekomme da lauter "1" zurück - wenn ich das recht sehen.
Ab dem 2. Auslesevorgang stimmt soweit alles, also die Werte sind aktuell und realistisch.
Braucht der MAX am Anfang mehr Zeit zum Initialisieren?
Habe ich einen Befehl vergessen?
Du hast z.B. "Spiinit".
Wozu braucht Du das?
Wieso braucht man "Waitms 100"?
- Ich habe die Zeit nach dem "Cs = 0" mal auf 250 ms erhöht.
-> Keine Änderung
- Dann habe ich gleich zu Anfang mal "Cs = 0" gesetzt,
so dass das Teil gleich von Anfang an mal weiß,
dass ich etwas von ihm will und genug Zeit zum Initialisieren hat.
- > Keine Änderung
Kann es sein, dass das Teil einen ersten Aufruf braucht,
um sich zu aktivieren, synchronisieren oder was auch immer?
Ansonsten läuft alles.
Ist halt nur ein kleiner Schönheitsfehler,
den man aber evtl. auch pos. als Erkennungsroutine nutzen könnte,
also wenn "-1.0" kommt, ist der MAX dran.
Korrektur:
"-1.0" kommt auch, wenn der MAX NICHT angeschlossen ist.
Das würde heißen,
dass beim ersten Aufruf der MAX gar NICHT erkannt wird
bzw. KEINE Daten schickt.
Jetzt hats mich doch nicht losgelassen.
Habe nun tatsächlich als alter Datenblattmuffel ins Datenblatt gespickelt und da gelesen,
dass bei "Cs=0" die Konversion des Temperaturwertes abgebrochen wird
(z.B. um den Wert auszulesen),
bei "Cs=1" beginnt der Rechenvorgang wieder.
Habe nun also gleich zu Anfang "Cs=1" gesetzt.
Endlich ist nun auch die "-1.0" weg,
aber der Ausgebewert stimmt immer noch nicht .
Ich erhalte immer ungef. den doppelten Wert der Temperatur,
der dann beim 2. Auslesen (richtig) angezeigt wird.
Nach Studium des Datenblattes,
das leider an manchen Stellen etwas dürftig ist,
sieht es so aus:
Wenn "Cs = 1" gesetzt ist, beginnt der Baustein mit der Berechnung (Konversion)
Es scheint(!), dass er das solange macht, bis ein "Cs = 0) erscheint
(d.h. er macht das nicht nur 1x und wartet, bis er ausgelesen wird,
sondern fortlaufend).
Wird "Cs = 0" gesetzt, stoppt die Konversion "sofort" ("immediately").
Dann kann man 16 Bits auslesen, wobei das MSB den Anfang macht.
Bit 15 und die Bits 0-2 kann man fürs Erste vergessen.
Wenn man jetzt "Cs = 1" setzt, geht das Ganze (Konversion) von vorne los.
Warum der erste Auslesewert so ist, wie er ist (s.o.),
wird leider nicht erklärt.
"S'isch halt amol so" (Achtung Schwäbisch)
Vorsichtige Vermutung:
Der MAX zieht diesen ersten Auslesevorgang irgendwie für die eigene Kalibrierung heran,
die er aus dem "kalten Ende" des Fühlers und 0°C gewinnt.
Habs jetzt mal so gelöst (?):
BASCOM-Quellcode
' MAX6675 auslesen:
Temp =0
' - Konversion stoppen
Cs =0
Waitms1
' - Daten auslesen
Shiftin So , Sck , Temp , 0 , 16 , 10
' - Konversion wieder starten
Cs =1
' Rechnen
Shift Temp , Right , 3
Tempx = Temp *0.25
Tempx = Tempx -1
' 1 Nachkommastelle
Tempx = Tempx *10
Temp = Round(tempx)
' Werte in Ausagbe-Array eintragen
If Erstmessung =0Then
' keien Ausgabe
Erstmessung =1
Else
Daten_array(1) =Low(temp)
Daten_array(2) =High(temp)
EndIf
Alles anzeigen
Der erste Auslesevorgang ("Erstmessung = 0") wird verworfen.
Das Timing fürs Auslesen kann dabei wohl viel schneller erfolgen.
Minimum 100ns !!! "waitms" könnte man getrost mit "waitus" ersetzen
Könntest du eventuell das Rauschverhalten noch beschreiben?
Ich hab den Sensor nicht mehr so in Erinnerung.
Sollte man über ein paar Messungen mitteln oder ist der Max nicht so nervös?
Für mich ist keines feststellbar. Temperatur bleibt recht konstant.
Ab und zu mal 0.25 rauf oder runter.
Das kann aber auch an Schwankungen der Lufttemperatur liegen.