这篇来测试读取isl29035模块数据,通过串口输出照度值。
一、i2c接口配置
二、ISL29035配置
2.1、寄存器表
2.2、寄存器设置
Command-i寄存器
B7-B5设置操作模式
我选择连续测量
Command-ii寄存器
ADC数据宽度
我这里选择默认值
LUX范围,我这里选择1000
LUX计算公式
三、程序
#include "hal_data.h"
#include "uart.h"
#include "stdio.h"
void R_BSP_WarmStart(bsp_warm_start_event_t event);
void write_reg(uint8_t addr, uint8_t dat)
{
uint8_t datv[2]={0x00,0x00};
datv[0] = addr;
datv[1] = dat;
R_SCI_I2C_Write(&i2c3_ctrl, datv, 0x02, false);
}
uint8_t read_reg(uint8_t addr)
{
uint8_t dat=0;
R_SCI_I2C_Write(&i2c3_ctrl, &addr, 0x01, false);
R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);
R_SCI_I2C_Read(&i2c3_ctrl, &dat, 0x01, false);
R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);
return dat;
}
uint32_t read_lux(void)
{
uint32_t val=0;
write_reg(0x00, 0x20);
R_BSP_SoftwareDelay(10, BSP_DELAY_UNITS_MILLISECONDS);
val=(read_reg(0x03)<<8)|read_reg(0x02);
return val;
}
void i2c3_callback(i2c_master_callback_args_t * p_args)
{
}
void hal_entry (void)
{
float lux;
init_uart();
R_SCI_I2C_Open(&i2c3_ctrl, &i2c3_cfg);
while (1)
{
lux=0.015259*read_lux();
printf("lux: %f\r\n",lux);
R_BSP_SoftwareDelay(500U, BSP_DELAY_UNITS_MILLISECONDS);
}
}
四、运行
串口输出数据
|