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

这个例子展示了如何使用NI USB 8451 I2C适配器从启用了ADXL345 I2C的加速计芯片中读写数据。加速度计将被配置成检测双击,MATLAB将用来显示芯片检测到的信息。

仪器控制工具箱™支持通过接口和驱动程序与仪器通信。万博1manbetx

有关工具箱的详细信息,请访问“仪器控制工具箱”产品页面

需求

本例需要安装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 8万博1manbetx451)与I2C设备通信。工具箱允许您创建一个I2C接口,该接口可用于配置适配器以与I2C从芯片通信。

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

验证NI845x安装

使用instrhwinfo命令检查是否正确安装了NI845x驱动程序,并且该仪表控制工具箱能够正确地检测到它。

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

清晰的所有;关闭所有;clc;i2cInfo = instrhwinfo (“i2c”,“ni845x”);disp (i2cInfo);
AdaptorDllName: [1x94 char] AdaptorDllVersion: 'Version 3.4' AdaptorName: 'ni845x' BoardIdsInUse: [1x0 double] InstalledBoardIDs: 0 DetectedBoardSerials: {'0180D47A (BoardIndex: 0)'} ObjectConstructorName: 'i2c('ni845x', BoardIndex, RemoteAddress);' VendorDllName: 'ni845x'。描述:“国家仪器NI USB 845x驱动程序”

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

accelerometerAddress = hex2dec (53岁的);i2cInterface = i2c (“ni845x”0 accelerometerAddress);fopen (i2cInterface);i2cInterface。比特率= 100;

设置tap阈值、第二次tap延迟、第二次tap窗口和tap持续时间寄存器值

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

threshTapRegisterAddress = hex2dec (“一维”);valueToWrite = hex2dec (“50”);% 5 g值disp ([的写作价值:num2str (valueToWrite)]);写入文件(i2cInterface [threshTapRegisterAddress valueToWrite]);写入文件(i2cInterface threshTapRegisterAddress);registerValue = fread(i2cInterface, 1,“uint8”);disp (['的值为:'num2str (registerValue)]);latentRegisterAddress = hex2dec (“22”);valueToWrite = hex2dec (“5”);disp ([的写作价值:num2str (valueToWrite)]);写入文件(i2cInterface [latentRegisterAddress valueToWrite]);确认返回到寄存器的值写入文件(i2cInterface latentRegisterAddress);registerValue = fread(i2cInterface, 1,“uint8”);disp ([“潜在登记册的价值是:”num2str (registerValue)]);windowRegisterAddress = hex2dec (“23”);valueToWrite = hex2dec (“FF”);disp ([的写作价值:num2str (valueToWrite)]);写入文件(i2cInterface [windowRegisterAddress valueToWrite]);确认返回到寄存器的值写入文件(i2cInterface windowRegisterAddress);registerValue = fread(i2cInterface, 1,“uint8”);disp (['窗口寄存器的值为:'num2str (registerValue)]);durationRegisterAddress = hex2dec (“21”);valueToWrite = hex2dec (“十”);disp ([的写作价值:num2str (valueToWrite)]);写入文件(i2cInterface [durationRegisterAddress valueToWrite]);写入文件(i2cInterface durationRegisterAddress);registerValue = fread(i2cInterface, 1,“uint8”);disp ([DUR寄存器的值是:num2str (registerValue)]);tapAxesRegisterAddress = hex2dec (“2”);valueToWrite = bin2dec (“00000111”);disp ([的写作价值:num2str (valueToWrite)]);写入文件(i2cInterface [tapAxesRegisterAddress valueToWrite]);写入文件(i2cInterface tapAxesRegisterAddress);registerValue = fread(i2cInterface, 1,“uint8”);disp ([' TAP_AXES寄存器的值是:'num2str (registerValue)]);interruptEnableRegisterAddress = hex2dec (“2 e”);valueToWrite = bin2dec (“01100000”);disp ([的写作价值:num2str (valueToWrite)]);写入文件(i2cInterface [interruptEnableRegisterAddress valueToWrite]);写入文件(i2cInterface interruptEnableRegisterAddress);registerValue = fread(i2cInterface, 1,“uint8”);disp ([' INT_ENABLE寄存器的值是:'num2str (registerValue)]);
写值:80 THRESH_TAP寄存器的值:80写作价值:5潜在的寄存器的值:5写值:255窗口寄存器的值:255写作价值:16大调的寄存器的值是:16写值:7 TAP_AXES寄存器的值:7写值:96 INT_ENABLE寄存器的值是:96

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

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

powerControlRegisterAddress = hex2dec (“二维”);valueToWrite = bin2dec (“00001000”);disp ([的写作价值:num2str (valueToWrite)]);写入文件(i2cInterface [powerControlRegisterAddress valueToWrite]);写入文件(i2cInterface powerControlRegisterAddress);registerValue = fread(i2cInterface, 1,“uint8”);disp ([' POWER_CTL寄存器的值是:'num2str (registerValue)]);
POWER_CTL寄存器的值是:8

轮询中断寄存器

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

interruptSourceRegisterAddress = hex2dec (“30”);disp (“等着双拍……”);(1)写入文件(i2cInterface interruptSourceRegisterAddress);InterruptValues = fread(i2cInterface, 1);TapInterrupt = bitand(中断值,bin2dec(“00100000”));如果TapInterrupt disp (“双击发现!”);打破;结束结束
等待双击…双击发现!