This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] OPT3001:一次性测量后 INT 引脚不会触发

Guru**** 2616675 points

Other Parts Discussed in Thread: OPT3001, CC2650

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/585791/opt3001-int-pin-not-firing-after-one-shot-measurement

器件型号:OPT3001
Thread 中讨论的其他器件: CC2650

您好!

我将 OPT3001 (在 UDIE-MKII BoosterPack 上)与 CC2650 Launchpad 搭配使用。  我的初始化如下(在初始化 I2C 接口后):

为转换模式的结束设置低限值寄存器:

//初始化 OPT3001设置
//将低限值寄存器设置为0xC0 (转换模式结束),以便 INT 引脚在每次测量转换时都处于活动状态。 由 R 或 W 清零至 CONFIG 寄存器。
txBuffer[0]= OPT3001_LLIMIT_R;// 0x02
txBuffer[1]= 0xC0;
txBuffer[2]= 0x00;

i2cTrans.writeCount = 3;
i2cTrans.writeBuf = txBuffer;
i2cTrans.ReadCount = 0;
i2cTran.readBuf = rxBuffer;
i2cTran.slaveAddress = Board_OPT3001_ADDR;

if (I2C_transfer (userI2CHandle、&i2cTrans)
){
LOG_info0 ("OPT3001低限制寄存器设置成功!");
}
否则
LOG_info0 ("OPT3001低限寄存器设置失败!"); 

设置配置寄存器(开始测量):

uint16_t configReg;
//设置 OPT3001配置寄存器
txBuffer[0]= OPT3001_CONFIG_R;// 0x01
TxBuffer[1]= 0xCA;
TxBuffer[2]= 0x10;
/* OPT3001设置:
15-12b = 1100:自动满量程模式
11b = 1 :转换时间(1 = 800ms,更准确)
10-9b = 01 :转换操作模式(01 =单次触发)
8b = 0 :溢出标志(只读)
7b. = 0 :转换准备就绪字段(只读)
6b. = 0 :标记高电平字段(只读)
5B = 0 :标志低字段(只读)
4B = 1 :锁存字段(1=窗口式比较操作)
3b. = 0 :极性字段(INT 引脚报告低电平有效)
2b. = 0 :屏蔽指数字段(0 =不屏蔽指数)
1-0b = 00 :故障计数域(中断前0 = 1)
*
i2cTrans.writeCount = 3;
i2cTrans.writeBuf = txBuffer;
i2cTrans.ReadCount = 2;
i2cTrans.readBuf = rxBuffer;
i2cTrans.slaveAddress = Board_OPT3001_ADDR;

IF (I2C_transfer (userI2CHandle、&i2cTrans))
{
configReg =(rxBuffer[0]<< 8)| rxBuffer[1];
LOG_Info1 ("OPT3001配置设置成功! 0x%04x"、configReg);
}
其他
log_info0 ("OPT3001配置设置失败!");
} 

检索读数:

txBuffer[0]= OPT3001_LOCAL_LUX;//本地 lux 寄存器0x00
i2cTrans.writeCount = 1;
i2cTrans.writeBuf = txBuffer;
i2cTrans.ReadCount = 2;
i2cTrans.readBuf = rxBuffer;
i2cTrans.slaveAddress = Board_OPT3001_ADDR;

uint32_t newLux;
IF (I2C_transfer (userI2CHandle、&i2cTrans))
//处理来自 rxBuffer 的数据
。 

以下是我的中断配置参考引脚表:

PIN_Config userPinTable[]={
//其他引脚不相关
//..................................
Board_DIO21 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_NEGEDGE、// OPT3001 INT 引脚
Board_DIO12 | PIN_GPIO_OUTPUT_EN | PIN_PushPull | PIN_GPIO_LOW、
PIN_TERMINATE
}; 


除了 INT 引脚触发之外、一切都运行良好。 在我的逻辑分析仪上、INT 引脚始终保持低电平、这毫无意义。  目前、为了完成此工作、我在读取之间有5秒的延迟、这是完成测量所需的足够时间。  实际上、我希望在窗口锁存、转换结束、单次触发模式下运行、因此 OPT3001只读取一个测量值、直到可以对其进行处理。  

我在这里缺少什么吗? 据我了解、设置配置寄存器后、测量应立即开始、然后应设置 INT 引脚(低电平有效)、直到清除配置寄存器并再次写入、再也不会发生任何情况 (设置单次触发模式、因为它将自动恢复到关断模式)。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    明白! 您必须先读取配置寄存器、然后再写入。 数据表或在线产品说明书中未列出这一点(我已经搜索了2周来了解这一点)。 尽管我在写入后立即读取配置寄存器以清除任何标志、但它仅在您首先读取时有效。 考虑到他们已经提供的详细信息和解释、我不能相信这是数据表中遗漏的。