Hallo miteinander,

ich spiele seit gestern zum ersten Mal mit einem i2c-fähigen Sensor.
Dazu habe ich ihn über einen Raspberry Pi angeschlossen und werte ihn über die GPIO-Pins aus.

Ich habe einen Codefetzen im Netz gefunden, der auf den tmp102 ausgerichtet war, mit aber auch die Temperatur des tmp100 ausgibt:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <linux/i2c-dev.h>
#include <fcntl.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int main(int argc, char **argv)
{
        unsigned int temp = 0;
        unsigned char msb, lsb;

        int fd;                                    // File descritor
        char *fileName = "/dev/i2c-1";             // Name of the port we will be using
        int  address = 0x4f;                       // Address of TP102
        unsigned char buf[10];                     // Buffer for data being read/ written on the I2C bus

        if ((fd = open(fileName, O_RDWR)) < 0)
        {   // Open port for reading and writing
                printf("Failed to open I2C port\n");
                exit(1);
        }

        if (ioctl(fd, I2C_SLAVE, address) < 0)
        {  // Set the port options and set the address of the device we wish to speak to
                printf("Unable to get bus access to talk to slave\n");
                exit(1);
        }


        buf[0] = 0;                                // This is the register we wish to read from

        if ((write(fd, buf, 1)) != 1)
        {  // Send register to read from
                printf("Error writing to I2C slave\n");
                exit(1);
        }

        if (read(fd, buf, 1) != 1)
        {  // Read back data into buf[]
                printf("Unable to read from slave\n");
                exit(1);
        }
        else
        {




  for (;;)
                {
                        msb = buf[0];

                        if (read(fd, buf, 1) != 1)
                        {
                                printf("Unable to read from slave\n");
                                exit(1);
                        }
                        else
                        {
                                lsb = buf[0];
                                temp = (msb<<8) | lsb;
                                temp >>= 4;
                                 printf("Temp: %f \n",temp*0.0625);
                                printf("Raw: %f \n\n", temp*1.00);
                                usleep(1000000);
                        }
                }




        }
        return 0;
}
Laut Datenblatt soll der tmp100 ein einstellbare Auflösung haben. Aber ich bin noch nicht wirklich dahinter gestiegen, wie ich die Auflösung einstellen kann.
Momentan kann ich nur Messwerte in 1°C-Schritten auslesen. Da der Sensor einen Messbereich von 180°C hat und mit 12Bit = 4096 Werten auflösen können soll, ergibt sich doch theoretisch eien Schrittweite von 180/4096 von 0.0439453125°C.
Allerdings bekomme ich imemr nur volle Werte alla 23.06250°C oder 24.06250°C ausgegeben.

Die Zahl dieht verdammt nach dem Umrechnungsfaktor aus. Aber ohne den Multiplkator bekomme ich nichts ausgegeben.

Wie kann ich den Sensor nun dazu bewegen, feiner aufgelöste Werte auszuspucken?