FHEM Forum

FHEM - Hausautomations-Systeme => 1Wire => Thema gestartet von: Prof. Dr. Peter Henning am 28 Januar 2014, 22:34:47

Titel: Fehler im OWFS-Modul für den DS2450
Beitrag von: Prof. Dr. Peter Henning am 28 Januar 2014, 22:34:47
Ausgelöst durch kleine Diskrepanzen, die mein Modul OWAD bei der Verwendung mit OWServer und mit OWX angezeigt hat, bin ich auf einen Fehler im Quellcode  des DS2450-Moduls von OWFS gestoßen. Laut Datenblatt des DS2450, S.22 , beträgt seine "minimum full scale input voltage" bei 16 bit Auflösung und 5.12 V range  genau 5.1199 V. Das bedeutet, das bei

(65535-0.5)/65536 * 5.120 = 5.11988 (gerundet 5.1199) V

der binäre Messwert 65535 ist. Jedes niederwertigste Bit "wiegt" also  1/65536 * 5.120 = 0.000078125 (gerundet 0.000078) V in Übereinstimmung mit dem Datenblatt.

Die Zeile 412 ff in owfs-xxx/module/owlib/src/c/ow_2450.c zur Berechnung des angezeigten Wertes lautet allerdings

    V[0] = 7.8126192E-5 * ((((UINT) data[1]) << 8 ) | data[0]);

Der Zahlenwert kommt wie folgt zu Stande:

0.078126192 = 1/65535*5120
     
d.h. das maximale binäre  Reading des DS2450 mit 65535 wird angezeigt als Spannung 5.1200 V statt, wie es korrekt wäre, 5.1199 V.

Ich habe diesen Fehler bereits in der OWFS-Developer-Liste auf Sourceforge bekannt gemacht, und der OWFS-Maintainer Paul Alfille hat ihn bereits eingeräumt. Wird im nächsten Release von OWFS korrigiert - alle OWFS-Nutzer sollten also auf dieses Update achten.

Um dem Einwand entgegen zu treten, dass dieser minimale Unterschied keine Rolle spiele: Doch, tut er. Die Langzeitstabilität des DS2450 ist so gut, dass man auch bei 16 Bit Auflösung diesen Unterschied im Reading bemerkt. Darüber hinaus wirkt sich der dahinter stehende Denkfehler sehr viel gravierender aus, wenn die Auflösung reduziert wird.

LG

pah