主要内容

使用NI USB 8451适配器使用ADXL345加速度计芯片点击检测

此示例显示了如何使用NI®USB8451 I2C适配器从ADXL345 I2C启用的加速度计芯片编写和读取数据。加速度计将被配置为检测双击,Matlab®将用于显示芯片检测到此消息的消息。

仪器控制工具箱™通过接口和驱动程序支持与仪器的通信。金宝app

有关所支持的硬件的完整列表,请访问仪器控制工具金宝app箱产品页面

需求

本例需要安装Microsoft®Windows®系统和NI845x驱动程序2.1.1或更高版本。在使用本示例之前,请确保Measurement & Automation Explorer能够识别NI845x设备。此外,确保在从MATLAB访问设备之前关闭Measurement & Automation Explorer™。

该示例使用模拟设备®ADXL345加速度计,该加速度计安装在SparkFun™的9DOF传感器杆上。加速度计具有可连接到适配器I2C总线输入的I2C总线。随着NI USB 8451没有可编程的内部上拉电阻,需要将总线线路高高。请注意,级别移位器用于分离V_S和V_DD。

介绍

仪器控制工具箱™通过I2C适配器(如NI USB 845金宝app1)支持与I2C设备的通信。该工具箱允许您创建I2C接口,可用于配置适配器以与I2C外设芯片通信。

这个例子将演示如何配置一个基于I2C的加速计,以响应用手指轻击面包板两次。当检测到双击时,将在MATLAB命令窗口中显示一条消息。

验证NI845x安装

使用instrhwinfo要检查NI845x驱动程序是否正确安装了NI845x驱动程序,并且该仪器控制工具箱可以正确检测。

板序列号应帮助您识别您的设备

Instreset i2cinfo = instrhwinfo(“i2c”'ni845x');disp (i2cInfo);
Adaptordllname:[1x94 char] Adaptordllversion:'3.4'版AdaptorName:'Ni845x'BoardIdsInuse:[1x0 Double]安装的阴板:0检测板:{'0180D47A(BoardIndex:0)'} ObjectConstructorName:'I2C('Ni845x',BoardIndex,Remoteadex);'Vendordllname:'ni845x.dll'VendordriverDescription:'NITING NI USB 845x Driver'

创建I2C接口并设置总线速度(BitRate属性)

accelerometerAddress = hex2dec (53岁的);i2cinterface = i2c('ni845x',0,加速度计address);Fopen(I2Cinterface);i2cinterface.bitrate = 100;

设置点击阈值,第二个点击延迟,第二个点击窗口和点击持续时间寄存器值

根据设备的数据表设置寄存器值。从设备中读取该值,以确认该值确实被设置。

thanthtTapRegisterAddress = hex2dec('1D');valueToWrite = hex2dec (“50”);%5g值DISP([“写作值:'num2str (valueToWrite)]);fwrite(i2cinterface,[throundtapregisterAddress valueTowrite]);fwrite(i2cinterface,throundtapregisterAddress);reportervalue = fread(i2cinterface,1,'uint8');DISP(['thresh_tap寄存器的值为:'num2str (registerValue)]);latentRegisterAddress = hex2dec ('22');valueToWrite = hex2dec (“5”);DISP([“写作值:'num2str (valueToWrite)]);写入文件(i2cInterface [latentRegisterAddress valueToWrite]);%确认值返回寄存器写入文件(i2cInterface latentRegisterAddress);reportervalue = fread(i2cinterface,1,'uint8');DISP(['潜在寄存器的价值是:'num2str (registerValue)]);windowregisteraddress = hex2dec('23');valueToWrite = hex2dec (“FF”);DISP([“写作值:'num2str (valueToWrite)]);写入文件(i2cInterface [windowRegisterAddress valueToWrite]);%确认值返回寄存器写入文件(i2cInterface windowRegisterAddress);reportervalue = fread(i2cinterface,1,'uint8');DISP([WINDOW寄存器的值是:num2str (registerValue)]);durationRegisterAddress = hex2dec ('21');valueToWrite = hex2dec ('10');DISP([“写作值:'num2str (valueToWrite)]);fwrite(i2cinterface,[durationRegisterAddress ValueTowRite]);fwrite(i2cinterface,durationRegisterAddress);reportervalue = fread(i2cinterface,1,'uint8');DISP([' DUR寄存器的值是:'num2str (registerValue)]);TapaxesRegisterAddress = hex2dec('2a');valueToWrite = bin2dec ('00000111');DISP([“写作值:'num2str (valueToWrite)]);fwrite(i2cinterface,[tapaxesregisteraddress faluetowrite]);fwrite(i2cinterface,tapaxesregisteraddress);reportervalue = fread(i2cinterface,1,'uint8');DISP([' TAP_AXES寄存器的值是:'num2str (registerValue)]);InterruptenableRegisterAddress = hex2dec('2e');valueToWrite = bin2dec ('01100000');DISP([“写作值:'num2str (valueToWrite)]);fwrite(i2cinterface,[InteruptenableRegisterAddress ValueTowRite]);fwrite(i2cinterface,InterruptenableRegisterAddress);reportervalue = fread(i2cinterface,1,'uint8');DISP([' INT_ENABLE寄存器的值是:'num2str (registerValue)]);
写值:80 THRESH_TAP寄存器的值:80写作价值:5潜在的寄存器的值:5写值:255窗口寄存器的值:255写作价值:16大调的寄存器的值是:16写值:7 TAP_AXES寄存器的值:7写作价值:INT_ENABLE寄存器的值是

通过写入power_ctl寄存器启用操作

根据数据表写入POWER_CTL寄存器将导致芯片从待机模式转到正常操作模式。

powerControlRegisterAddress = hex2dec ('2d');valueToWrite = bin2dec (“00001000”);DISP([“写作值:'num2str (valueToWrite)]);写入文件(i2cInterface [powerControlRegisterAddress valueToWrite]);写入文件(i2cInterface powerControlRegisterAddress);reportervalue = fread(i2cinterface,1,'uint8');DISP([' POWER_CTL寄存器的值是:'num2str (registerValue)]);
写入值:8 POWER_CTL寄存器的值为:8

民意调查中断寄存器

中断源寄存器将包含对应于由特定源生成的中断标志的位。检查是否生成双击中断

interruptSourceRegisterAddress = hex2dec (“30”);DISP(“等待双击……”);(1)写入文件(i2cInterface interruptSourceRegisterAddress);InterruptValues = fread(i2cInterface, 1);TapInterrupt = bitand(InterruptValues, bin2dec(“00100000”));如果tapinterrupt disp('双击检测到!');打破;结尾结尾
等待双击…双击发现!