Fehler im OWFS-Modul für den DS2450

Begonnen von Prof. Dr. Peter Henning, 28 Januar 2014, 22:34:47

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

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