Temperaturmessung von einem I2C-Peripheriegerät am NI USB-8452-Controller
Dieses Beispiel zeigt, wie man mit I2C-Peripheriegeräten über den NI™ USB-8452-Controller kommuniziert. In diesem Beispiel ist ein digitaler Temperatursensor vom Typ TMP102 an den NI USB-8452-Controller angeschlossen.
Der TMP102 ist ein digitaler Zweidraht-Ausgangssensor, der Temperaturen mit einer Auflösung von 0,0625 °C messen kann. Im erweiterten Modus kann er auch Temperaturwerte über 128 °C erfassen.
Hardware einrichten
Verbinden Sie die Pins SDA, SCL, GND und VCC des Sensors mit den entsprechenden Pins des NI USB-8452-Hardwaregeräts. Verbinden Sie in diesem Beispiel die SDA- und SCL-Pins des Sensors mit Pin 3 bzw. Pin 5 des NI USB-8452. Verbinden Sie die GND- und VCC-Pins mit Pin 2 bzw. Pin 7 (DIO(0)).
Verbindung zu I2C -Peripheriegerät herstellen
Suchen Sie mit ni845xlist nach NI USB-8452-Hardware, die mit Ihrem Rechner verbunden ist, und stellen Sie mit MATLAB® über ni845x eine Verbindung her.
list = ni845xlist
list=1×2 table
"NI USB-8452" "01F26E0A"
controller = ni845x(list.SerialNumber)
controller =
NI845x with properties:
Model: "NI USB-8452"
SerialNumber: "01F26E0A"
AvailableDigitalPins: ["P0.0" "P0.1" "P0.2" "P0.3" "P0.4" "P0.5" "P0.6" "P0.7"]
Show all properties, functions
Konfigurieren Sie den DIO(0)-Pin als Ausgang und geben Sie eine logische High-Pegel-Spannung von 3,3 V aus, um den Temperatursensor mit Strom zu versorgen.
configureDigitalPin(controller,"P0.0","output"); writeDigitalPin(controller,"P0.0",1);
Scannen Sie die NI USB-8452-Hardware nach verfügbaren I2C-Adressen. Der Temperatursensor wird durch die I2C-Adresse 0x48 repräsentiert.
address = scanI2CBus(controller)
address = 1×2 string array
"0x48" "0x53"
Stellen Sie mit der Funktion device und der von scanI2CBus zurückgegebenen I2C-Adresse eine Verbindung zum I2C-Peripheriegerät her.
tempSensor = device(controller,I2CAddress=address(1))
tempSensor =
I2CDevice with properties:
Protocol: "I2C"
I2CAddress: 72
BitRate: 100000
ByteOrder: "little-endian"
Show all functions
Temperaturwert ablesen
Im Normalmodus liefert der Sensor einen in 12 Bit digitalisierten Temperaturwert, wobei 8 Bit im MSB und 4 Bit im LSB liegen. Jedes LSB entspricht 0,0625 °C. Lesen Sie zwei Bytes Daten von Registeradresse 0 des Sensors als Datentyp uint8.
Berechnen Sie die Temperatur in °C mithilfe der Hilfsfunktion tmp102Temperature. Sie finden diese Hilfsfunktion am Ende dieses Beispiels und sie ist diesem Beispiel als Begleitdatei beigefügt.
data = readRegister(tempSensor,0,2,"uint8");
temperature = tmp102Temperature(data,12)temperature = 24.7500
Temperatur mit höherer Messgrenze ablesen
Sie können Temperaturen über 128 °C messen, indem Sie im erweiterten Modus des TMP102-Sensors 13 Bit verwenden. Schreiben Sie dazu den Wert 'B060' als Hexadezimalwert in das Konfigurationsregister an Adresse 1, wie im Datenblatt des Geräts TMP102 angegeben.
writeRegister(tempSensor,1,0xB060,"uint16");Um ein genaueres Ergebnis zu erhalten, lesen Sie die Temperatur ab Registeradresse 0 aus. Da die Konversionsrate des TMP102-Sensors standardmäßig auf 4 Hz eingestellt ist, pausieren Sie MATLAB vor jeder Messung für etwa 0,25 Sekunden. Konvertieren Sie die Daten mithilfe der Hilfsfunktion tmp102Temperature in °C.
write(tempSensor,0x0,"uint8"); pause(0.25); data = read(tempSensor,2,"uint8"); temperature = tmp102Temperature(data,13)
temperature = 24.7500
Stellen Sie die Konfiguration wieder auf die Standardeinstellungen zurück, wie im Datenblatt des Geräts TMP102 angegeben.
writeRegister(tempSensor,1,0xA060,"uint16");Aufräumen
Wenn Sie die Arbeit mit dem NI USB-8452 beendet haben, löschen Sie die zugehörigen device- und ni845x-Objekte.
clear tempSensor controller
Hilfsfunktion
function T = tmp102Temperature(data,numBits) % tmp102Temperature Convert TMP102 raw temperature register data to temperature in °C % % T = tmp102Temperature(data,numBits) % data is 1x2 row vector of uint8 values in big-endian order % numBits corresponds to the TMP102 temperature mode (12 bits for normal % mode, or 13 bits for extended mode) % TMP102 resolution (°C / count) resolution = 0.0625; % Digital temperature output (counts) numShiftBits = 16-numBits; digitalT = bitshift(typecast(uint8(fliplr(data)),'int16'),-numShiftBits); % Temperature in °C T = double(digitalT) * resolution; end
Siehe auch
ni845xlist | ni845x | configureDigitalPin | writeDigitalPin | scanI2CBus | device | readRegister | writeRegister | write | read