瑞萨单片机william hill官网
直播中

TLLED

10年用户 206经验值
擅长:嵌入式技术
私信 关注

【RA4M2设计挑战赛】读取isl29035模块数据

这篇来测试读取isl29035模块数据,通过串口输出照度值。

一、i2c接口配置

04327.png

二、ISL29035配置

2.1、寄存器表

04545.png

2.2、寄存器设置

Command-i寄存器

0657.png

B7-B5设置操作模式

我选择连续测量

10914.png

Command-ii寄存器

11019.png

ADC数据宽度

我这里选择默认值

11221.png

LUX范围,我这里选择1000

11636.png

LUX计算公式

11749.png

三、程序

#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);
			
	}
}

四、运行

串口输出数据

12120.png

更多回帖

发帖
×
20
完善资料,
赚取积分