Mesurer la température d’un périphérique I2C sur le contrôleur NI USB-8452
Cet exemple montre comment communiquer avec des périphériques I2C sur le contrôleur NI™ USB-8452. Dans cet exemple, un capteur de température numérique TMP102 est connecté au contrôleur NI USB-8452.
Le TMP102 est un capteur numérique à sortie série bifilaire capable de lire la température avec une résolution de 0,0625 °C. Il peut également lire les valeurs de température supérieures à 128 °C en mode étendu.
Configurer le hardware
Connectez les broches SDA, SCL, GND et VCC du capteur aux broches correspondantes du hardware NI USB-8452. Pour cet exemple, connectez respectivement les broches SDA et SCL du capteur aux broches 3 et 5 du contrôleur NI USB-8452. Connectez respectivement les broches GND et VCC aux broches 2 et 7 (DIO(0)).
Se connecter au périphérique I2C
Recherchez le hardware NI USB-8452 connecté à votre machine avec ni845xlist et connectez-vous à celui-ci dans MATLAB® avec ni845x.
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
Configurez la broche DIO(0) comme broche de sortie et générez une tension de niveau logique haut de 3,3 V en sortie pour alimenter le capteur de température.
configureDigitalPin(controller,"P0.0","output"); writeDigitalPin(controller,"P0.0",1);
Scannez le hardware NI USB-8452 pour connaître les adresses I2C disponibles. Le capteur de température est représenté par l’adresse I2C 0x48.
address = scanI2CBus(controller)
address = 1×2 string array
"0x48" "0x53"
Connectez-vous au périphérique I2C en utilisant la fonction device avec l’adresse I2C renvoyée par scanI2CBus.
tempSensor = device(controller,I2CAddress=address(1))
tempSensor =
I2CDevice with properties:
Protocol: "I2C"
I2CAddress: 72
BitRate: 100000
ByteOrder: "little-endian"
Show all functions
Lire la valeur de température
En mode normal, le capteur renvoie une valeur de température numérisée sur 12 bits : 8 bits en MSB (bits de poids fort) et 4 bits en LSB (bits de poids faible). Chaque LSB est égal à 0,0625 °C. Lisez deux octets de données à partir de l’adresse 0 du registre du capteur avec le type de données uint8.
Calculez la température en °C avec la fonction d’aide tmp102Temperature. Cette fonction d’aide est disponible à la fin de cet exemple ainsi que dans le fichier de support joint à celui-ci.
data = readRegister(tempSensor,0,2,"uint8");
temperature = tmp102Temperature(data,12)temperature = 24.7500
Lire la température avec une limite de mesure supérieure
Le mode étendu du capteur TMP102 permet de mesurer des températures supérieures à 128 °C en utilisant 13 bits. Pour ce faire, écrivez la valeur 'B060' sous forme hexadécimale dans le registre de configuration à l’adresse 1, comme l’indique la fiche technique du dispositif TMP102.
writeRegister(tempSensor,1,0xB060,"uint16");Lisez la température à partir de l’adresse 0 du registre pour obtenir un résultat plus précis. Comme la fréquence de conversion du capteur TMP102 est par défaut de 4 Hz, mettez MATLAB en pause pendant environ 0,25 seconde avant chaque lecture. Convertissez les données en °C avec la fonction d’aide tmp102Temperature.
write(tempSensor,0x0,"uint8"); pause(0.25); data = read(tempSensor,2,"uint8"); temperature = tmp102Temperature(data,13)
temperature = 24.7500
Revenez à la configuration par défaut spécifiée dans la fiche technique du dispositif TMP102.
writeRegister(tempSensor,1,0xA060,"uint16");Nettoyage
Lorsque vous avez fini d’utiliser le contrôleur NI USB-8452, effacez les objets device et ni845x associés.
clear tempSensor controller
Fonction d’aide
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
Voir aussi
ni845xlist | ni845x | configureDigitalPin | writeDigitalPin | scanI2CBus | device | readRegister | writeRegister | write | read