Bascom Zwei Routinen für DS18B20

Uwe H.

Neues Mitglied
27. Juli 2011
264
0
0
Hinter die Grenze :-)
Sprachen
  1. BascomAVR
  2. ANSI C
  3. Assembler
Hallo zusammen :)
Ich bastel grad an einer Regeleinheit, in der ich einen DS18B20 Temp-Sensor verwende. Ich hab dazu zwei Routinen zusammengestellt, die sich jeweils in der Art der Berechnung unterscheiden. Ich würde mich sehr freuen, wenn sich die mal jemand anschauen würde und mir sagen kann, ob die Routinen so in Ordnung sind oder man noch was verbessern könnte. Beide funktionieren momentan sowohl im positiven als auch im negativen Temp-Bereich nach Abgleich mit Thermometer tadelos.

Desweiteren wollte ich fragen, ob schonmal jemand hier ne Art Prüfroutine für die Sensoren geschrieben hat, um das Signal auf Gültigkeit zu prüfen. Mir fällt dazu z.Z. nur ein If-Kommando ein, a la:
if Temperaturbereich ..... then ok
else Error

Vielleicht hat jemand ne bessere Lösung...?

Grüße, Uwe
 

Anhänge

  • DS18B20_go1.bas
    2,3 KB · Aufrufe: 88
  • DS18B20_go2.bas
    1,9 KB · Aufrufe: 42
Hallo Uwe,

Desweiteren wollte ich fragen, ob schonmal jemand hier ne Art Prüfroutine für die Sensoren geschrieben hat, um das Signal auf Gültigkeit zu prüfen. Mir fällt dazu z.Z. nur ein If-Kommando ein, a la:
if Temperaturbereich ..... then ok
else Error
die Sensoren bilden eine CRC8-Checksumme über die Daten. Die kann man auswerten.
Schau mal ins Datenblatt des Sensors. Wenn die Checksumme nicht stimmt ist der Wert bestimmt auch falsch.

Gruß
Dino
 
Hallo Uwe,


die Sensoren bilden eine CRC8-Checksumme über die Daten. Die kann man auswerten.
Schau mal ins Datenblatt des Sensors. Wenn die Checksumme nicht stimmt ist der Wert bestimmt auch falsch.

Gruß
Dino



Hallo Dino,
das hatte ich mir schon durchgelesen, aber ehrlich gesagt weiss ich damit nicht viel anzufangen. Fange grad erst so richtig an, mich mit Programmierung tiefer zu beschäftigen und momentan sind das noch böhmische Dörfer für mich :) Hast Du Dir mal meine Rechenoperationen angeschaut?
 
Ok, ich nehme alles zurück und behaupte das Gegenteil :) Dieser CRC-Abgleich ist ja totaler Kinderkram, was den Code angeht. Hab die Funktion jetzt eingebaut. Danke für den Hinweis. Allerdings habe ich immer noch keine wirkliche Idee, wie man einen Ausfall des Sensors im Betrieb registrieren kann...
 
Hallo Uwe,

ich habe jetzt deine Codes nicht durchgelesen aber du kannst ja die Seriennummern der Sensoren am Anfang des Programms in eine Variable (Array) speichern. Mit "1wverify" rufst du einen Sensor jetzt während der Programmausführung auf und überprüfst dann anschließend, ob Err = 0 ist. Dann weißt du, dass der Sensor nicht ausgefallen ist.
 
Hallo Stefan :)
Danke erstmal für deinen Beitrag. Dein Vorschlag ist gut, aber er funktioniert nur bedingt. Wenn die Temperaturmessung beim Dallas aussteigt, hat das häufig keinen direkten Einfluss auf das Rom-Code-Register mit der Seriennummer. Ich habe mal aus Versehen vier von den Dingern durch Verpolung geschrottet und war überrascht, dass bei allen noch die Seriennummer inkl. CRC auslesbar war. Also im Sinne von Verify kein Fehler.


Ich hab da nochmal ne Bitte: Von den beiden Routinen, die ich am Beitrag angehängt habe, ist die eine Rechenoperation aus dem Netz kopiert und an den DS18B20 angepasst worden. Seit drei Tagen sitze ich davor und versuche den Rechenweg für mich logisch nachzuvollziehen, was mir nicht gelingt. Vielleicht kann mir das jemand hier mal mit einfachen Worten erklären, damit auch eine Mathe-Niete wie ich es begreife :)

Scratchpad = 9er Byte-Array (Datenarray vom DS18B20)
Tmp1 = Byte
T1 = Integer
Temp1 = Single


Tmp1 = Scratchpad1(1) And 1
If Tmp1 = 1 Then Decr Scratchpad1(1)
T1 = Makeint(scratchpad1(1) , Scratchpad1(2))
Temp1 = T1 / 16


Meine Fragen dazu: Woran erkennt dieser Rechenweg, ob die Temperatur positiv oder negativ ist und wie berechnet er die Temperatur daraus?
 
Hallo Uwe,

Meine Fragen dazu: Woran erkennt dieser Rechenweg, ob die Temperatur positiv oder negativ ist und wie berechnet er die Temperatur daraus?
das ist eigentlich recht einfach ...
Schau dir mal bei Wikipedia das Thema Zweierkomplement an. Das ist eine Definition und Rechenweise wie man in einem Byte (8Bit) eine Zahl mit Vorzeichen unterbringen kann.

Normalerweise passen in ein Byte ja 8 Bit. Also 0 bis 255. Durch einen Kniff wird es jetzt per Definition auf -128 bis +127 gesetzt. Ist eigentlich eine recht einfache Sache wenn man es erst einmal verstanden hat ;)

Bei Mikrocontrollern ist der Inhalt eines Bytes reine Definitionssache. Der CPU ist es egal ob du das Byte für ein Textzeichen, eine Integerzahl, mit oder ohne Vorzeichen, als Hex, BCD, Binär oder sonstwas für ne Zahl brauchst. Der Befehl der angegeben ist der wird auch ausgeführt. Der CPU ist es egal ob du zwei Textzeichen miteinander multiplizierst ;) Die Definition was der Inhalt bedeutet kommt erst durch den Programmierer und die höhere Programmiersprache oder durch das Datenblatt des Bausteins.

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)