MAX6675 Typ-K Temperatur

    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!

    • MAX6675 Typ-K Temperatur

      BASCOM-Quellcode

      1. Config Portc.0 = Input
      2. Config Portc.1 = Output
      3. Config Portc.2 = Output
      4. Sox Alias Pinc.0
      5. Clkx Alias Portc.1
      6. Csx Alias Portc.2
      7. Dim Tempx As Word
      8. Dim Temperatur As String * 11
      9. Dim Tempx1 As Single
      10. Spiinit
      11. '______________________________________________________________________________________
      12. Csx = 0
      13. Waitms 100
      14. Shiftin Sox , Clkx , Tempx , 0 , 16 , 100
      15. Csx = 1
      16. Shift Tempx , Right , 3
      17. Tempx = Tempx And &B0000111111111111
      18. Tempx1 = Tempx * 0.25
      19. Tempx1 = Tempx1 - 1 'Sensor Abgleich
      20. Print "Temperatur " ; Fusing(tempx1 , "#.##")
      21. Test = Fusing(tempx1 , "#.##" )
      Alles anzeigen
    • 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"?

      (Mein Code s.o. im 1-Wire-Slave-Baukasten).

      Gruß RoBue
    • Danke für Eure Rückmeldungen.

      Aaaaalso:

      - 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.

      Gruß RoBue
    • 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 X( .
      Ich erhalte immer ungef. den doppelten Wert der Temperatur,
      der dann beim 2. Auslesen (richtig) angezeigt wird.

      Äh, ja a_56_df238249 a_56_df238249 a_56_df238249 und gleich nochmal: a_56_df238249 a_56_df238249 a_56_df238249

      Okay, jetzt reichts. Ich mach mal Pause!

      Gruß, RoBue
    • Nun antworte ich mir mal selber.

      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

      1. ' MAX6675 auslesen:
      2. Temp = 0
      3. ' - Konversion stoppen
      4. Cs = 0
      5. Waitms 1
      6. ' - Daten auslesen
      7. Shiftin So , Sck , Temp , 0 , 16 , 10
      8. ' - Konversion wieder starten
      9. Cs = 1
      10. ' Rechnen
      11. Shift Temp , Right , 3
      12. Tempx = Temp * 0.25
      13. Tempx = Tempx - 1
      14. ' 1 Nachkommastelle
      15. Tempx = Tempx * 10
      16. Temp = Round(tempx)
      17. ' Werte in Ausagbe-Array eintragen
      18. If Erstmessung = 0 Then
      19. ' keien Ausgabe
      20. Erstmessung = 1
      21. Else
      22. Daten_array(1) = Low(temp)
      23. Daten_array(2) = High(temp)
      24. End If
      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

      LG RoBue

      Ich füge mal das Datenblatt an:

      MAX6675.pdf

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von RoBue ()