Seite 2 von 2
Verfasst: 08.01.2009, 16:00
von ompf
ProgFred hat geschrieben:danach wird (in einem Zwischenspeicher? > swap) der Wert
bitweise verschoben, wohl um die unteren (Status-)Bits zu entfernen und den eigentlichen Wert an richtiger Stelle zu haben:
den swap verstehe ich auch nicht, nach Datenblatt müßte das MSB zuerst rauskommen. Also Vorzeichen, 2^6, 2^5, 2^4, ...,2^0, 2^-1, 7x 0. Der LM75 schickt hinten sieben Nullen, der DS75 bietet drei weitere Nachkommastellen.
IMHO geht dabei die Vorzeicheninformation verloren!
Korrekt. Die sign extension fehlt hier, d.h. schieben unter Beibehaltung des höchsten bits. Genau das ist unser Problem -- aus wenig minus wird dann viel plus!
Hier stellt sich mir noch die Frage: Warum durch 2 teilen?
Hätte man da vorher nicht gleich um 8 Bit schieben können?
Durch zwei teilen weil Auflösung = 0,5°C. Um acht Stellen schieben hätte die Nachkommastelle getötet, damals war es ja noch ein Integer. IIRC wird die aber ohnehin nicht ausgegeben, so daß man bei Integer hätte bleiben können.
Gruß
Patrick
Verfasst: 08.01.2009, 17:48
von amd-65
ProgFred hat geschrieben:
bin zwar nicht der Pascal-Experte, aber wenn ich dass richtig sehe kann der Wert nur als (vorzeichenbehafteter) Integer ausgelesen werden:
danach wird (in einem Zwischenspeicher? > swap) der Wert
bitweise verschoben, wohl um die unteren (Status-)Bits zu entfernen und den eigentlichen Wert an richtiger Stelle zu haben:
IMHO geht dabei die Vorzeicheninformation verloren!
Die Vorzeicheninformation geht nicht verloren. Die Info steht nur nicht im MSB.
Code: Alles auswählen
Temperature Binary Hex
+125°C 0000 0000 1111 1010 0x00FA
+25°C 0000 0000 0011 0010 0x0032
+0.5°C 0000 0000 0000 0001 0x0001
0°C 0000 0000 0000 0000 0x0000
-0.5°C 0000 0001 1111 1111 0x01FF
-25°C 0000 0001 1100 1110 0x01CE
-55°C 0000 0001 1001 0010 0x0192
Man könnte jetzt auf >255 testen und dann 512 abziehen.
Erst dann wird es ein float:
Hier stellt sich mir noch die Frage: Warum durch 2 teilen?
Hätte man da vorher nicht gleich um 8 Bit schieben können?
Wenn man vorher shiftet, wirft man die 0.5°C Auflösung weg. Daher wird erst die Float-Zahl geteilt.
Die C-Firmware macht den gleichen Fehler.
Gruß
amd-65
Verfasst: 08.01.2009, 18:40
von Marcel
Nunja, ist ja kein größeres Problem und aufgrund des Temperaturdrifts ist ein Abgleich bei mir ja sowieso nur bedingt möglich.
Zu meinem Problem: Über R30 ne Drahtbrücke gelötet und nun gehts. Ich werde dann die Tage R30 komplett auslöten und die Drahtbrücke vernünftig festlöten.
Danke für die Hilfe bei der Fehlersuche, das war mindestens doppelt so systematisch wie ich es alleine gemacht hätte ^^
Verfasst: 08.01.2009, 22:19
von psclab38
Über R30 ne Drahtbrücke gelötet und nun gehts.
Ja, prima!
Und so hat aber ein Hardwarefehler zur Aufdeckung eines Softwarefehlers geführt. Wer suchet, der findet
Schon jemand ein Bug-Ticket aufgemacht? Betrifft ja alle Module mit LM75, also DCG und EDL...
Danke für die Hilfe bei der Fehlersuche
Gerne. Für eine Ferndiagnose gings ja trotzdem recht schnell...
Verfasst: 09.01.2009, 08:56
von Marcel
bis jetzt nicht, ich bin grade dabei