LM 76 Auslesen Zweierkomplement ??

Hallo,

wünsche erst mal noch allen Lesern alles Gute und Erfolg für das neue Jahr

2006. Ich arbeite an einer Temperaturauswertung mit einem LM 76 von National, dieser kommuniziert über I2C mit einem PIC Controller, programmiert habe ich das mit einem Basic - Compiler (Pic Basic 2 von Ralf Pagel). Alles klappt gut nur bei der Auswertung der negativen Teperaturen bin ich ins Straucheln geraten, diese werden im sog. Zweierkomplement übertragen. Umwandlung durch Invertierung und Addition von 1. Soweit alles noch klar, bei der Ausführung bin jetzt jedoch auf das Problem gestossen, dass es entweder keinen Bereich von 0 bis - 1 Grad gibt oder mir 1 Minus Grad über den ganzen negativen Bereich fehlt. Ich habe die Funktion der Invertierung am Vorhandensein des negativen Vorzeichenbits festgemacht, nun beginnt der negative Bereich aber bereits bei 0,0625 Grad. Wenn ich jetzt sage "if Vorzeichenbit = 1 then Einerstelle = Einerstelle + 1" erhalte ich den Wert 1,0625 Grad was in diesem Fall definitiv 1 Grad zu kalt wäre. Lasse ich die Addition aber weg erhalte ich z.B. bei dem im Datenblatt genannten Punkt von - 25 Grad nur eine Anzeige von - 24. Wenn ich sage " if Einerstelle >1 then Einerstelle = Einerstelle +1 " verschiebe ich das Problem um ein Grad, löse es aber nicht. Wäre schön wenn mir jemand erklären könnte wie man das richtig macht. Beste Grüße Martin
Reply to
Martin Jahn
Loading thread data ...

Das mit dem 1 addieren bezieht sich auf normale Ganzzahlen. Bei Fixpunktzahlen darfst du natürlich nicht 1,0 addieren. Entweder du betrachtest das erstmal als normale Ganzzahl addierst dann eine 1 und betrachtest es erst danach als Fixpunkt. Oder du musst im Fall deines LM76 halt halt 0,0625 addieren.

Jan

Reply to
Jan Lucas

Hallo Martin,

Martin Jahn schrieb:

[...]

ich beziehe mich mal auf die Beispiele in figure 2 im Datenblatt:

0,1001,0110,0000(bin) = 2400 -> 2400 * 0.0625 Grad = 150 Grad 0,0111,1101,0000(bin) = 2000 -> 2000 * 0.0625 Grad = 125 Grad 0,0000,0000,0001(bin) = 1 -> 1 * 0.0625 Grad = 0.0625 Grad 0,0000,0000,0000(bin) = 0 -> 0 * 0.0625 Grad = 0 Grad 1,1111,1111,1111(bin) = -1 -> -1 * 0.0625 Grad = -0.0625 Grad 1,1110,0111,0000(bin) = -400 -> -400 * 0.0625 Grad = -25 Grad 1,1100,1001,0000(bin) = -880 -> -880 * 0.0625 Grad = -55 Grad

HTH Ernst

Reply to
Ernst Schwab

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.