主要内容

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

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

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

有关工具箱的更多详细信息,请访问仪器控制工具箱产品

要求

此示例需要Microsoft®Windows®System和NI845x驱动程序2.1.1或更高版本。确保测量和自动化资源管理器在使用此示例之前识别NI845x设备。此外,确保在访问设备表单MATLAB之前关闭测量和自动化Explorer™。

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

介绍

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

此示例将演示如何配置基于I2C的加速度计,以响应用手指敲击面包板两次。检测到双击后,Matlab命令窗口中将显示一条消息。

验证NI845x安装

使用instrhwinfo.命令检查NI845x驱动程序是否正确安装,仪器控制工具箱可以正确检测。

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

Instreset i2cinfo = instrhwinfo('i2c''ni845x');DISP(I2CINFO);
Adaptordllname:[1x94字符] Adaptordllversion:'3.4'版AdaptorName:'Ni845x'BoardIdsInuse:[1x0 Double]安装的阴板:0检测板:{'0180D47A(BoardIndex:0)'} ObjectConstructorName:'I2C('Ni845x',BoardIndex,Remoteaddress);'Vendordllname:'Ni845x.dll'VendordriverDescription:'NITINAL INSTRUMENTS NI USB 845x司机'

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

AcceleromaterAddress = hex2dec('53');i2cinterface = i2c('ni845x',0,加速度计成份);Fopen(I2Cinterface);i2cinterface.bitrate = 100;

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

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

thanthttapregisterAddress = hex2dec('1D');ValueTowRite = Hex2Dec('50');%5g值DISP(['写值:'num2str(valuetowrite)]);fwrite(i2cinterface,[throundtapregisterAddress valueTowrite]);fwrite(i2cinterface,throundtapregisterAddress);RegistRVerue = fread(i2cinterface,1,'uint8');DISP(['thresh_tap寄存器的值为:'num2str(注册员)]);latentregisteraddress = hex2dec('22');ValueTowRite = Hex2Dec('5');DISP(['写值:'num2str(valuetowrite)]);fwrite(i2cinterface,[latentregisteraddress falueTowrite]);%确认值返回到寄存器fwrite(i2cinterface,latentregisteraddress);RegistRVerue = fread(i2cinterface,1,'uint8');DISP(['潜在寄存器的值是:'num2str(注册员)]);windowregisteraddress = hex2dec('23');ValueTowRite = Hex2Dec('ff');DISP(['写值:'num2str(valuetowrite)]);fwrite(i2cinterface,[windowregisteraddress faluetowrite]);%确认值返回到寄存器fwrite(i2cinterface,windowregisterAddress);RegistRVerue = fread(i2cinterface,1,'uint8');DISP(['窗口寄存器的值是:'num2str(注册员)]);durationRegisterAddress = hex2dec('21');ValueTowRite = Hex2Dec('10');DISP(['写值:'num2str(valuetowrite)]);fwrite(i2cInterface,[durationRegisterAddress ValueTowRite]);fwrite(i2cinterface,durationRegisterAddress);RegistRVerue = fread(i2cinterface,1,'uint8');DISP(['DUR注册的价值是:'num2str(注册员)]);TapaxesRegisterAddress = hex2dec('2a');ValueTowRite = Bin2Dec('00000111');DISP(['写值:'num2str(valuetowrite)]);fwrite(i2cinterface,[tapaxesregisteraddress falueTowrite]);fwrite(i2cinterface,tapaxesregisteraddress);RegistRVerue = fread(i2cinterface,1,'uint8');DISP(['Tap_axes寄存器的值是:'num2str(注册员)]);InterruptenableRegisterAddress = hex2dec('2e');ValueTowRite = Bin2Dec('01100000');DISP(['写值:'num2str(valuetowrite)]);fwrite(i2cinterface,[InterupteNableRegisterAddress ValueTowrite]);fwrite(i2cinterface,InterruptenableRegisterAddress);RegistRVerue = fread(i2cinterface,1,'uint8');DISP(['INT_ENABLE寄存器的值是:'num2str(注册员)]);
写入值:80阈值寄存器的值为:80写入值:5潜在寄存器的值为:5写入值:255窗口寄存器的值为:255写入值:16 DUR寄存器的值是:16写入值:7 TAP_AXES寄存器的值为:7写入值:96 INT_ENABLE寄存器的值为:96

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

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

PowerControlRegisterAddress = hex2dec('2d');ValueTowRite = Bin2Dec('00001000');DISP(['写值:'num2str(valuetowrite)]);fwrite(i2cinterface,[PowerControlRegisterAddress ValueTowRite]);fwrite(i2cinterface,powercontrolregisterAddress);RegistRVerue = fread(i2cinterface,1,'uint8');DISP(['Power_CTL寄存器的值是:'num2str(注册员)]);
写入值:8 POWER_CTL寄存器的值为:8

民意调查中断寄存器

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

InterruptsourceregisterAddress = hex2dec('30');DISP('等着双击...');尽管(1)FWRITE(I2CInterface,InterruptsourceregisterAddress);IrnortuptValues = Fread(I2Cinterface,1);tapinterrupt = bitand(Interruptvalues,bin2dec('00100000'));如果tapinterrupt disp('双击检测到!');休息;结尾结尾
等待双击......检测到双击!