Other Parts Discussed in Thread: OPT3001, CC2650
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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 引脚(低电平有效)、直到清除配置寄存器并再次写入、再也不会发生任何情况 (设置单次触发模式、因为它将自动恢复到关断模式)。