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:
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.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; }
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?







 
			
			 
					
					
					
						 Zitieren
Zitieren

Lesezeichen