559|2

1268

帖子

0

资源

纯净的硅(高级)

【平头哥RVB2601创意应用开发】+光照强度检测 [复制链接]

有了GPIO口的使用基础,除了可以驱动OLED屏之外,还可以用来驱动相应的数字式传感器,这里是对光照强度传感器进行驱动,并配合OLED屏的显示功能来实现光照强度检测,其显示效果如图1所示。

image-20220512095625-1.png  

图1 显示效果

由于提供的电源引脚比较少,故光照强度传感器BH1750所用的引脚如图2所示,相应的对应关系为:

CLK---PA2

DIN---PA5

image-20220512095625-2.png  

图2 引脚连接

 

相较于OLED屏的驱动,光照强度传感器的驱动要复杂些,它不但涉及引脚要以输出模式工作,有时还需要以输入模式工作,应适时地进行模式切换。

为此,对引脚输出高低电平及读取引脚状态的语句定义为:

#define SCL_Clr1()       csi_gpio_pin_write(&clk, GPIO_PIN_LOW)

#define SCL_Set1()      csi_gpio_pin_write(&clk, GPIO_PIN_HIGH)

#define SDA_Clr1()       csi_gpio_pin_write(&din, GPIO_PIN_LOW)

#define SDA_Set1()      csi_gpio_pin_write(&din, GPIO_PIN_HIGH)

#define IIC_SDA_IN1    csi_gpio_pin_read(&din)

相应的引脚工作模式配置函数为:

void IIC_INPUT_MODE()
{
    csi_gpio_pin_init(&din, PA5);
    csi_gpio_pin_dir(&din, GPIO_DIRECTION_INPUT);
}

void IIC_OUTPUT_MODE()
{
    csi_gpio_pin_init(&din, PA5);
    csi_gpio_pin_dir(&din, GPIO_DIRECTION_OUTPUT);
}

 

以GPIO口模拟I2C发送字节数据的函数为:

void BH1750_SendByte(char data)
{
    char i;
    IIC_OUTPUT_MODE();
    SCL_Clr1();
    udelay(2);
    for (i=0;i<8;i++)
    {
        if(data&0x80) SDA_Set1();
        else SDA_Clr1();
        data <<= 1;
        SCL_Set1();
        udelay(2);
        SCL_Clr1();
        udelay(2);
    }
}

 

读取并显示检测值的函数为:

void Get_Sunlight_Value()
{
    int dis_data=0;
    float temp;
    unsigned int sd;
    Single_Write_BH1750(0x01);
    Single_Write_BH1750(0x10);
    udelay(1000 * 180);
    Multiple_Read_BH1750();
    dis_data=BUF[0];
    dis_data=(dis_data<<8)+BUF[1];
    temp=(float) dis_data/1.2;
    sd=temp;
    OLED_ShowNum(20,6,sd,5,16);
}

 

实现图示显示效果的主程序为:

int main(void)
{
    csi_error_t ret;
    csi_rtc_time_t last_time, base_time, alarm_time;
    board_yoc_init();
    oled_pinmux_init();
    OLED_Init();
    OLED_Clear();
    OLED_ShowString(20,0,"CH2601",16);
    OLED_ShowString(20,2,"OLED & RTC",16);
    BH1750_Init();
    udelay(1000 * 1000);
    OLED_ShowString(20,2,"OLED & BH1750",16);
    OLED_ShowString(20,4,"Sunlight=",16);
    OLED_ShowString(68,6,"lx",16);
    while (1) {
        Get_Sunlight_Value();
        udelay(1000 * 1000);
    }
}

 

由于电源引脚紧张,后面需要将显示任务交回给LCD屏,以便空出电源引脚来连接其它的外设。

 


回复

1151

帖子

3

资源

版主

我也有这种想法,可是不想折腾,SPI可以空出很多IO。

回复

1268

帖子

0

资源

纯净的硅(高级)

lugl4313820 发表于 2022-5-13 20:16 我也有这种想法,可是不想折腾,SPI可以空出很多IO。


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

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    推荐帖子
    【官宣】TI 《电源设计基础》中文版重磅上市,myti 用户还有福利!

    给大家推荐一本电源管理方面的书,由TI Power 电源管理教父级作者 Robert Mammano 编著。目前,中文版新书重磅上市! 优惠的价 ...

    用Python控制硬件 - 调理电路频响测试自动化

    转载自:《用Python控制硬件43-调理电路频响测试自动化》 这次使用之前介绍的F5520A和F8808A,测量一块模拟调理电路的频 ...

    造成不同批次LCD色差的原因

    我们在日常商务工作中经常会遇到客户反馈:不同批次的液晶屏怎么点亮后显示效果会有些许不同呢?我们就这个问题作出以下分析: ...

    BQ24610的智能锂电池充电系统

    BQ24610是TI公司推出的一款比较先进的,面向5V至28V电压输入的锂离子电池供电应用开关模式独立电池充电器IC.基于便携式分子筛制 ...

    获奖名单|有奖问答 | 富士通铁电随机存储器 FRAM 知多少

    活动详情:有奖问答 | 富士通铁电随机存储器 FRAM 知多少 请获奖网友在领奖截止日期前确认论坛个人资料中的相关信息> ...

    MCU开发板用作工业应用板,需要考虑哪些问题

    半导体供应商利用评估板和演示板等开发板为其微控制器提供支持。这些板的预期用途是让工程师能够首先熟悉目标微控制器,然后协助 ...

    关闭
    站长推荐上一条 1/10 下一条

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

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

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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