2539|7

1509

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【ESK32-360测评】+传感器测量及输出显示 [复制链接]

  本帖最后由 jinglixixi 于 2020-8-23 09:17 编辑

1. I2C总线模拟与BH1750光强检测

BH1750是一款基于I2C接口的数字式光强传感器,我们可利用SD卡接口空出的引脚来模拟I2C接口以驱动该传感器,从而进行光强检测。

整体构成

 

BH1750的连接关系:

SCL --- PC11

SDA --- PC12

 

输出高低电平的语句为:

#define SCL_Set()        HT_GPIOC->SRR = GPIO_PIN_11

#define SCL_Clr()        HT_GPIOC->RR = GPIO_PIN_11

 

#define SDA_Set()        HT_GPIOC->SRR = GPIO_PIN_12

#define SDA_Clr()        HT_GPIOC->RR = GPIO_PIN_12

 

GPIO口引脚配置的函数为:

void IIC_Init(void)
{
      HT32F_DVB_ClockConfig();
      GPIO_PullResistorConfig(HT_GPIOC, GPIO_PIN_12, GPIO_PR_DISABLE);
      GPIO_DriveConfig(HT_GPIOC, GPIO_PIN_12, GPIO_DV_8MA);
      GPIO_DirectionConfig(HT_GPIOC, GPIO_PIN_12, GPIO_DIR_OUT);
      GPIO_PullResistorConfig(HT_GPIOC, GPIO_PIN_11, GPIO_PR_DISABLE);
      GPIO_DriveConfig(HT_GPIOC, GPIO_PIN_11, GPIO_DV_8MA);
      GPIO_DirectionConfig(HT_GPIOC, GPIO_PIN_11, GPIO_DIR_OUT);
}

读取光强的函数为:

void Get_Sunlight_Value()
{
         int dis_data=0;
         float temp;
         char i=0;
         unsigned int sd;
         Single_Write_BH1750(0x01);
         Single_Write_BH1750(0x10);
         Delayms(180);
         Multiple_Read_BH1750();
         for(i=0;i<3;i++)
         dis_data=gHelloString[0];
         dis_data=(dis_data<<8)+gHelloString[1];
         temp=(float)dis_data/1.2;
         sd=temp;
         gHelloString[0] = sd/10000+'0';
         gHelloString[1] = sd% 10000/1000+'0';
         gHelloString[2] = sd % 1000/100+'0';
         gHelloString[3] = sd % 100/10+'0';
         gHelloString[4] = sd % 10+'0';
         UxART_TxTest();     
}

 

光强检测的主函数为:

int main(void)
{
	SYSTICK_ClockSourceConfig(SYSTICK_SRC_STCLK);
    SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000); 
    SYSTICK_IntConfig(ENABLE); 
    
    HT32F_DVB_ClockConfig
	
    UxART_Configuration();
	IIC_Init();
	while(1)
	{
		 Get_Sunlight_Value();
         Delayms(1000);
	}
}

经程序下载后,其运行结果如图所示。

图3 BH1750检测结果

 

2.BMP085气温气压检测

BMP085是一款基于I2C接口的数字式传感器,主要用于测量气温、气压及海拔高度等,我们可以通过模拟I2C接口的方式来驱动该传感器,以进行测量。

整体构成

 

BMP085与MCU的连接关系如下:

SDA --- PC12

SCL --- PC11

 

BMP085的初始化函数为:

void Init_BMP085()
{
         ac1 = Multiple_read(0xAA);
         ac2 = Multiple_read(0xAC);
         ac3 = Multiple_read(0xAE);
         ac4 = Multiple_read(0xB0);
         ac5 = Multiple_read(0xB2);
         ac6 = Multiple_read(0xB4);
         b1 = Multiple_read(0xB6);
         b2 = Multiple_read(0xB8);
         mb = Multiple_read(0xBA);
         mc = Multiple_read(0xBC);
         md = Multiple_read(0xBE);
}

 

读取气温与气压的函数为:

void bmp085Convert()
{
         unsigned int ut;
         unsigned long up;
         long x1, x2, b5, b6, x3, b3, p;
         unsigned long b4, b7;
   
         ut = bmp085ReadTemp();
         up = bmp085ReadPressure();
         x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
         x2 = ((long) mc << 11) / (x1 + md);
         b5 = x1 + x2;
         temperature = ((b5 + 8) >> 4);
         b6 = b5 - 4000;
         x1 = (b2 * (b6 * b6)>>12)>>11;
         x2 = (ac2 * b6)>>11;
         x3 = x1 + x2;
         b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;
         x1 = (ac3 * b6)>>13;
         x2 = (b1 * ((b6 * b6)>>12))>>16;
         x3 = ((x1 + x2) + 2)>>2;
         b4 = (ac4 * (unsigned long)(x3 + 32768))>>15; 
         b7 = ((unsigned long)(up - b3) * (50000>>OSS));
         if (b7 < 0x80000000)
             p = (b7<<1)/b4;
         else
             p = (b7/b4)<<1;   
         x1 = (p>>8) * (p>>8);
         x1 = (x1 * 3038)>>16;
         x2 = (-7357 * p)>>16;
         pressure = p+((x1 + x2 + 3791)>>4);
}

检测的主程序为:

int main(void)
{
         SYSTICK_ClockSourceConfig(SYSTICK_SRC_STCLK);
         SYSTICK_SetReloadValue(SystemCoreClock / 8 / 1000);
         SYSTICK_IntConfig(ENABLE);
         UxART_Configuration();
         IIC_Init();
         Init_BMP085();
         while(1)
         {
                   bmp085Convert();
                   ConvTemperature();
                   ConvPressure();
                   ConvAltitude();
                   Delayms(1000);
         }
}

检测值输出显示

最新回复

谢谢分享   详情 回复 发表于 2021-4-13 11:56
点赞 关注
 
 

回复
举报

7608

帖子

18

TA的资源

五彩晶圆(高级)

沙发
 

为啥总是要io模拟i2c?

点评

哈哈,好用呀!  详情 回复 发表于 2020-8-24 00:02
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

1509

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
freebsder 发表于 2020-8-23 21:50 为啥总是要io模拟i2c?

哈哈,好用呀!

 
 
 

回复

1万

帖子

203

TA的资源

管理员

4
 

合泰ESK32-360开发板测评
汇总贴:https://bbs.eeworld.com.cn/thread-1134246-1-1.html

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复

661

帖子

0

TA的资源

纯净的硅(初级)

5
 

谢谢分享

 
 
 

回复

1509

帖子

1

TA的资源

五彩晶圆(初级)

6
 
 
 

回复

661

帖子

0

TA的资源

纯净的硅(初级)

7
 

谢谢分享

点评

感谢支持  详情 回复 发表于 2021-4-14 08:16
 
 
 

回复

1509

帖子

1

TA的资源

五彩晶圆(初级)

8
 

感谢支持

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表