主要内容

利用检测ADXL345加速度计芯片使用NI usb - 8452控制器

这个例子展示了如何编写和读取数据从模拟设备®ADXL345 I2C使加速度计芯片使用NI™usb - 8452控制器。加速度计配置为检测双击并返回一条消息,表明这一点。

需求

这个示例需要Microsoft®Windows®和ni - 845 x驱动程序。确保倪测量和自动化Explorer (NI MAX)承认NI - 8452控制器。之前你必须接近倪麦克斯从MATLAB®连接到控制器。

例子使用了模拟设备®ADXL345加速度计。加速度计具有I2C总线,可以连接到控制器的I2C总线线路输入。ADXL345的Vcc和接地连接到5 v的来源和接地插脚NI usb - 8452控制器。

介绍

与I2C通信使用I2C控制器板外围设备,比如NI usb - 8452。您可以创建一个I2C接口配置控制器和外围设备与I2C通信。

这个案例展示了如何配置一个I2C-based加速度计响应用手指敲打两次试验板。双击时发现,消息显示在MATLAB中。

检测NI usb - 8452控制器

寻找NI usb - 8452硬件连接到您的计算机使用ni845xlist

多个NI usb - 8452控制器可以连接到一台机器。通过比较选择合适的控制器SerialNumber返回的ni845xlist的序列号印在控制器板。

controllerList = ni845xlist
controllerList =1×2表模型SerialNumber _________________ _______ 1“NI usb - 8452”“01 f26e0a”

连接设置总线速度和加速度计

连接到ADXL345加速度计芯片使用返回的序列号ni845xlist。在这种情况下,第一个SerialNumber对应于所需的控制器。

ni845Obj = ni845x (controllerList.SerialNumber (1))
ni845Obj = NI845x属性:模型:“NI usb - 8452”SerialNumber:“01 f26e0a”AvailableDigitalPins: [“P0.0”“P0.1”“P0.2”“P0.3”“P0.4”“P0.5”“P0.6”“P0.7”)显示所有属性,函数

确定ADXL345加速度计的地址连接到控制器使用scanI2CBus函数。

accelerometerAddress = scanI2CBus (ni845Obj)
accelerometerAddress =1×2字符串“0 x48”“0 x53”

连接到ADXL345加速度计使用I2C返回的地址scanI2CBus。在这个例子中,加速度计的地址是第二个值,有两个I2C外围设备连接到控制器。设置加速度计芯片的比特率到100千赫。

adxlDevice =设备(ni845Obj I2CAddress = accelerometerAddress (2))
adxlDevice = I2CDevice属性:协议:“I2C”I2CAddress: 83比特率:100000 ByteOrder:“低位优先”显示所有功能
adxlDevice。比特率= 100000;

设置阈值,第二个抽头延迟,第二利用窗口,利用时间寄存器值

根据数据表设置寄存器值的设备。阅读价值从设备确认价值确实是集。

threshTapRegisterAddress = 0 x1d;valueToWrite = 0×50;writeRegister (adxlDevice threshTapRegisterAddress valueToWrite,“uint8”);disp (“写THRESH_TAP寄存器的值是:“+ num2str (valueToWrite));
写THRESH_TAP寄存器的值是:80
registerValue = readRegister (adxlDevice threshTapRegisterAddress 1,“uint8”);disp (“读THRESH_TAP寄存器的值是:“+ num2str (registerValue));
读THRESH_TAP寄存器的值是:80
latentRegisterAddress = 0将;valueToWrite = 0 x5;writeRegister (adxlDevice latentRegisterAddress valueToWrite,“uint8”);disp (“潜在的寄存器的写价值是:“+ num2str (valueToWrite));
潜在的寄存器的写价值是:5
registerValue = readRegister (adxlDevice latentRegisterAddress 1,“uint8”);disp (“潜在的读值寄存器:“+ num2str (registerValue));
的阅读价值潜在的寄存器:5
windowRegisterAddress = 0 x23;valueToWrite = 0 xff;writeRegister (adxlDevice windowRegisterAddress valueToWrite,“uint8”);disp (“写窗口寄存器的值是:“+ num2str (valueToWrite));
窗口的值写寄存器:255
registerValue = readRegister (adxlDevice windowRegisterAddress 1,“uint8”);disp (“阅读窗口寄存器的值是:“+ num2str (registerValue));
窗口的读值寄存器:255
durationRegisterAddress = 0 x21;valueToWrite = 0 x10;writeRegister (adxlDevice durationRegisterAddress valueToWrite,“uint8”);disp (“写大调的寄存器的值是:“+ num2str (valueToWrite));
大调的寄存器的写价值是:16
registerValue = readRegister (adxlDevice durationRegisterAddress 1,“uint8”);disp (“读大调的寄存器的值是:“+ num2str (registerValue));
大调的寄存器的阅读价值是:16
tapAxesRegisterAddress = 0 x2a;valueToWrite = 0 b00000111;writeRegister (adxlDevice tapAxesRegisterAddress valueToWrite,“uint8”);disp (“写TAP_AXES寄存器的值是:“+ num2str (valueToWrite));
写TAP_AXES寄存器的值是:7
registerValue = readRegister (adxlDevice tapAxesRegisterAddress 1,“uint8”);disp (“读TAP_AXES寄存器的值是:“+ num2str (registerValue));
读TAP_AXES寄存器的值是:7
interruptEnableRegisterAddress;表示就是= 0 x2evalueToWrite = 0 b01100000;writeRegister (adxlDevice interruptEnableRegisterAddress valueToWrite,“uint8”);disp (“写INT_ENABLE寄存器的值是:“+ num2str (valueToWrite));
写INT_ENABLE寄存器的值是:96
registerValue = readRegister (adxlDevice interruptEnableRegisterAddress 1,“uint8”);disp (“读INT_ENABLE寄存器的值是:“+ num2str (registerValue));
读INT_ENABLE寄存器的值是:96

使操作通过编写POWER_CTL登记

基于数据表,写POWER_CTL寄存器改变芯片从待机模式正常运行模式。

powerControlRegisterAddress = 0 x2d;valueToWrite = 0 b00001000;writeRegister (adxlDevice powerControlRegisterAddress valueToWrite,“uint8”);disp (“写POWER_CTL寄存器的值是:“+ num2str (valueToWrite));
写POWER_CTL寄存器的值是:8
registerValue = readRegister (adxlDevice powerControlRegisterAddress 1,“uint8”);disp (“读POWER_CTL寄存器的值是:“+ num2str (registerValue));
读POWER_CTL寄存器的值是:8

轮询中断寄存器

中断源寄存器包含对应于中断标志位所产生的特定的资源。查看,双击中断产生。

interruptSourceRegisterAddress = 0 x30;disp (“等待双击……”);
等待双击……
(1)interruptValues = readRegister (adxlDevice interruptSourceRegisterAddress 1,“uint8”);tapInterrupt = bitand (interruptValues 0 b00100000);如果tapInterrupt disp (“双击发现!”);打破结束结束
双击发现!

另请参阅

|||||

相关的话题