Nur bis 20V

Hier könnt ihr Diskussionen über die Hardware und Abgleich des Labornetzteiles des c't-Lab führen.
Benutzeravatar
ompf
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 168
Registriert: 19.01.2008, 13:03
Wohnort: Dortmund

Beitrag 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:

Code: Alles auswählen

aInt:= swap(aInt) shr 7;
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
amd-65
kann c't-Lab-Module konstruieren
kann c't-Lab-Module konstruieren
Beiträge: 130
Registriert: 29.11.2007, 16:28

Beitrag 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:

Code: Alles auswählen

var aInt: Integer;
...
TWIinp(I2CslaveAdr, aInt);
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:

Code: Alles auswählen

aInt:= swap(aInt) shr 7;
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:

Code: Alles auswählen

Temperature:=float(aInt)/2;
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
Benutzeravatar
Marcel
kann c't-Lab-Module umbauen
kann c't-Lab-Module umbauen
Beiträge: 91
Registriert: 31.12.2008, 17:26
Wohnort: Siegen

Beitrag 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 ^^
psclab38
kann c't-Lab-Konstrukteure konstruieren
kann c't-Lab-Konstrukteure konstruieren
Beiträge: 942
Registriert: 25.01.2008, 23:34

Beitrag 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 :D
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...
Benutzeravatar
Marcel
kann c't-Lab-Module umbauen
kann c't-Lab-Module umbauen
Beiträge: 91
Registriert: 31.12.2008, 17:26
Wohnort: Siegen

Beitrag von Marcel »

bis jetzt nicht, ich bin grade dabei
Antworten