Firmware für DS18x20 Tester mit LCD

  • Servus zusammen,
    ich hab' die Software für den DS18B20 Tester von Neueinsteiger -> http://www.forum-raspberrypi.d…kt-ds18b20-tester-mit-lcd
    mittlerweile auf github in mein Repo als eigenes Projekt eingepflegt: -> https://github.com/dreamshader/ATmega_DS18x20_Tester


    Das ist zwar noch wip, läuft aber. Im Laufe der nächsten Zeit kommen noch ein paar Features hinzu.
    Fragen, Probleme oder Anregungen bitte hier posten.


    Viel Spass damit,
    -ds-

  • Frage: so wie ich gelesen habe soll der DS18B20 programmierbar sein..
    Wisst Ihr was da "so geht"?
    Gibt es auch ne Möglichkeit (evtl mit diesem Tester von Neueinsteiger) die Sensoren zu Kalibrieren, oder nen Namen geben der dann ausgelesen werden kann, etc?


    Ich hab zu testzwecken mal ein paar direkt nebeneinander auf ein breadboard gestöpselt und alle zeigen ne andere Temperatur an.. zwar nur im Bereich +/- 1 grad, aber eigentlich sollten Sie doch das gleiche ( um +/- 0,2 grad) anzeigen müssen, oder lieg ich da falsch?


    LG Tiieto


  • Also ich hab 5 parallel laufen am 1Wire Bus. Kalibrieren muss man die nicht, bei mir laufen die sehr genau (ich les die aus bis auf drei stellen hinterm koma). Abweichungen der einzelnen Sensoren kann ich nicht bestätigen.

    Edited once, last by 4zap ().

  • Man kann die Auflösung einstellen. Dieses Feature ist noch nicht umgesetzt, steht aber im Sketch:


    // future enhancements:
    // setup sensor resolution via menu (serial & LCD)


    Einen "Namen" kann man dem Sensor nicht geben. Jeder Sensor hat eine eindeutige ID, anhand derer man ihn identifizieren kann. Wenn es sehr viele Sensoren sind, wäre es vielleicht sinnvoll, manuell eine Liste "ID - Standort" anzulegen.


    Eine Kalibrierung des Sensors ist (nach meinem Wissensstand) ebenfalls nicht möglich. Wenn die Sensoren so unterschiedliche Temperaturen anzeigen, könnte es daran liegen, dass sie kurz zuvor angefasst wurden und die Gehäuse deshalb unterschiedliche Temperaturen haben? Dann einfach mal eine Stunde nichts damit machen und dann erneut auslesen. Ich persönlich würde in jedem Fall den parasitären Modus meiden, wann immer es möglich ist.

  • Hallo Tieeto,



    Frage: so wie ich gelesen habe soll der DS18B20 programmierbar sein..
    Wisst Ihr was da "so geht"?


    Das einzige, was Du da "drehen" kannst, ist die Anzahl der auszulesenden Bits. Je weniger Bits umso schneller erfolgt das Auslesen. Das geht allerdings zu Lasten der Auflösung. Dies erfolgt durch Setzen der Bits R0 und R1 des Konfigurationsregisters.


    Unabhängig von der üblichen Vorgehensweise, bestimmte Dateien auszulesen, die sich in einem bestimmten Verzeichnis befinden, kannst Du auch direkt mit dem DS18B20 kommunizieren und z.B. Alarmtemperaturen definieren (TH- und TL-Registers), Temperaturen auslesen, Temperaturen konvertieren. Werden diese Temperaturen über- bzw. unterschritten, dann wird ein Alarmbit gesetzt. Ob dieses Alarmbit gesetzt ist, erfährst Du z.B. über das Kommando ECh.


    Hierfür nutzt Du entweder die Technik des Bitbangings - oder Du nutzt entsprechende Bibliotheken, die dies für Dich erledigen. Das Datenblatt des DS18B20 entält eine Übersicht über die gängigen Kommandos, die über DQ gesendet und welche Daten als Antwort empfangen werden können.




    Gibt es auch ne Möglichkeit (evtl mit diesem Tester von Neueinsteiger) die Sensoren zu Kalibrieren, oder nen Namen geben der dann ausgelesen werden kann, etc?


    Kalibrieren musst Du immer selber, indem Du die Sensoren festgelegten Temperaturen aussetzt und dann deren Messwerte erfasst und mit den Zielwerten korrelierst und statt des Messwertes den korrelierten Wert als "besseren Messwert" bereitstellst. Lässt sich leicht programmieren.




    Ich hab zu testzwecken mal ein paar direkt nebeneinander auf ein breadboard gestöpselt und alle zeigen ne andere Temperatur an.. zwar nur im Bereich +/- 1 grad, aber eigentlich sollten Sie doch das gleiche ( um +/- 0,2 grad) anzeigen müssen, oder lieg ich da falsch?


    Was erwartest Du? Lt. Datenblatt wird eine Genauigkeit von 0,5 °C angegeben.


    Wenn Du ein sehr genaues Thermometer hast, darf sich also jeder DS18B20 um max. ± 0,5 °C davon unterscheiden. Wenn Du mehrere DS18B20 miteinander vergleichst, dann darf sich der kleinste von dem größten Messwert demzufolge um max. 1.0 °C unterscheiden.


    Somit arbeiten alle Deine Sensoren innerhalb der Spezifikation. Wenn Du mehr Genauigkeit haben willst, musst Du deutlich tiefer in die Tache greifen.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas ().


  • Das einzige, was Du da "drehen" kannst, ist die Anzahl der auszulesenden Bits. Je weniger Bits


    ich musste auch erst noch mal ins DB schauen, die meinen echt programmierbar mit weniger Bits auslesen das sind Schelme :).


    Übrigens wer zu schnell hintereinander ausliest erwärmt den Chip durch die Auslesearbeit, also eher gemütlich rangehen, keine Raumtemperatur ändert sich sekündlich oder schneller ;)


    hatte gerade mal ein Bastelobjekt zum Laufen gebracht mit


    MLX90614 Non-Contact IR Infrared Thermometer Sensor Module IIC


    http://www.ebay.de/itm/272263627351


    schade das Teil ist kurzsichtig, sollte eigentlich meine Topfoberfläche anzeigen beim Kochen, aber einne Lötklben bei 250°C eingpegelt erkennt das Teil erst auf 5mm mit 167°C


    Meinen Finger aber auch auf 5mm und zeigt dann 32°C an, vielleicht verliert mein Finger zuviel Körperwärme, ist ja die Oberflächentemperatur.

    lasst die PIs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Servus zusamen,


    ... ein paar Worte zur Software ( das hab' ich mal aus diesem Beitrag von mir übernommen: http://www.forum-raspberrypi.d…-lcd?pid=283213#pid283213 )


    Die Software wird als sketch in der Arduino IDE übersetzt und geflasht. Ich habe die Version 1.8.2 im Einsatz.
    Je nach MCU wird in Werkzeuge -> Board -> ATmega328 oder ATmega8 bzw. ATmega88 eingestellt.
    Zum Linken sind momentan eine zusätzliche Library notwendig:


    die Click-Encoder-Lib -> https://github.com/0xPIT/encoder


    Grundfunktion des Testers:
    Die Start-Anzeige fordert zum Klick für einen Testlauf bzw. einen Doppel-Klick zum Aufruf des Menüs auf.
    Beim 16x2 LCD wechselt die oberste Zeile zwischen vier Texten wobei die zweite Zeile als Laufschrift ausgelegt ist.
    Beim 2004er LCD wechseln die oberen zwei Zeilen den Text, die unteren beiden Zeilen zeigen den Text an, der beim 1602 aus Platzgründen als Laufschrift ausgelegt ist.


    Testlauf:
    Wird der Testlauf aktiviert, dann wird zunächst der 1Wire Bus mit Spannung versorgt und dann die Sensor-Daten ausgelesen.
    Bei der neueren Platine ist das Einschalten der Bus Spannung durch eine LED angezeigt.
    Mit eingestecktem Sensor werden beim Testlauf dessen ID, Typ und aktuelle Temperatur angezeigt.
    Das 2004er LCD zeigt zusätzlich die eingestellte Sensor-Auflösung (9 bis 12 bit) an.
    Nach ca. 5 Sekunden wird die Testlauf-Anzeige beendet und die Start-Anzeige erscheint wieder.
    Ist kein Sensor eingesteckt, passiert nix ...


    Menü:
    Durch einen Doppel-Klick des Encoder-Buttons gelangt man ins Menü. Hier stehen folgende Punkte zur Verfügung:


    • Brightness
    • Contrast
    • 1W bus
    • Power safe mode
    • Device scan
    • Save settings
    • Set to defaults


    Brightness:
    In diesem Unterpunkt kann die Helligkeit des LCD durch drehen nach rechts bzw. links erhöht oder verringert werden.
    Das ist im Moment nur begrenzt möglich ( siehe Bekannte Bugs/Probleme ).


    Contrast:
    Hier kann der Kontrast des LCD verringert oder erhöht werden.


    1W Bus:
    Über diesen Menüpunkt kann die Spannungsversorgung des 1Wire Bus ein- oder auschaltet werden.


    Power safe mode:
    Hat derzeit noch keine echte Funktion. Angedacht ist eine Art sleep-Modus ...


    Device scan:
    Sucht das erste 1Wire device am Bus.


    Save settngs:
    Einstellungen im EEPROM abspeichern.


    Set to defaults:
    Setzt die Einstellungen zurück.


    Dann gibt es ein weiteres Menü, das über UART ausgegeben und bedient wird.
    Es hat dieselben Möglichkeiten wie das Menü, das über LCD/Encoder bedienbar ist.
    Die Einstellung der seriellen Schnittstelle ist 38400N81 ...
    Die Idee dahinter ist, dass bei fehlendem/unleserlichen LCD eine Bedienung und Einstellung trotzdem möglich ist.


    Schnell-Einstieg Kontrast:
    Drückt man den Encoder-Button in der Start-Anzeige für ca. 5 Sekunden gelangt man direkt in die Einstellung für den Kontrast. Hier kann dann - blind - durch Drehen nach rechts/links der Kontrast so lange justiert werden, bis das Display lesbar ist.
    Mit einem Klick wird der eingestellte Wert direkt gespeichert und ist ab jetzt bei jedem Start aktiv.


    Anmerkung: ein Flash File für den ATMega8 zu erzeugen ist im Moment nicht möglich. Dazu werde ich parallel zu den Erweiterungen den Code mittels #ifdefs versuchen so klein zu bekommen, dass er wieder in einen Mega8 passt. Das kann aber dauern. Notfalls haben ich oder auch Neueinsteiger eine Frühversion des sketch, die auf dem ATMega8 funktioniert.


    cheers,
    -ds-