打印
[PIC32/SAM]

【ATSAMD51EVK测评报告】+温度大气压检测与显示

[复制链接]
1297|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创#

BMP085是一款数字式温度大气压传感器,其接口方式为I2C,在OLED屏的配合下就可实现对环境温度及大气压的检测与显示,其效果如下图所示。
检测与显示效果
在检测电路中,这2个外挂器件与开发板的连接关系为:
BMP085
SCL ---PC4
SDA--- PC5
OLED
SCL---PC20
SDA---PC21

2个外挂器件的驱动控制均采用GPIO口模拟I2C的方式,其中BMP085以模拟方式发送字节数据的函数为:
void BMP085_Send_Byte(char txd)
{
    char t;
    OUTPUT_MODE_SET();
    SCL_Clr1();
    for(t=0;t<8;t++)
    {
        if((txd & 0x80)>>7)
            SDA_Set1();
        else
            SDA_Clr1();
        txd<<=1;
        delay_us(5);
        SCL_Set1();
        delay_us(5);
        SCL_Clr1();
        delay_us(5);
    }
}

以模拟方式接受字节数据的函数为:
char BMP085_Read_Byte(unsigned char ack)
{
      unsigned char i,receive=0;
      INPUT_MODE_SET();
      for(i=0;i<8;i++)
      {
        SCL_Clr1();
        delay_us(5);
        SCL_Set1();
        receive<<=1;
        if(SDA_IN()==1) receive++;
        delay_us(5);
    }
    if(!ack)
        BMP085_NAck();
    else
        BMP085_Ack();
    return receive;
}

读取温度的函数为:
long bmp085ReadTemp(void)
{
    BMP085_Start();
    BMP085_Send_Byte(BMP085_SlaveAddress);
    while(BMP085_Wait_Ack());
    BMP085_Send_Byte(0xF4);
    while(BMP085_Wait_Ack());
    BMP085_Send_Byte(0x2E);
    while(BMP085_Wait_Ack());
    BMP085_Stop();
    SYSTICK_DelayMs(10);
    return (long) Multiple_read(0xF6);
}

读取大气压的函数为:
long bmp085ReadPressure(void)
{
    pressure = 0;
    BMP085_Start();
    BMP085_Send_Byte(BMP085_SlaveAddress);
    while(BMP085_Wait_Ack()){}
    BMP085_Send_Byte(0xF4);
    while(BMP085_Wait_Ack()){}
    BMP085_Send_Byte(0x34);
    while(BMP085_Wait_Ack()){}
    BMP085_Stop();
    SYSTICK_DelayMs(10);
    pressure = Multiple_read(0xF6);
    pressure &= 0x0000FFFF;
    return pressure;
}

实现图示效果的主程序为:
int main ( void )
{
    SYS_Initialize ( NULL );
    SYSTICK_TimerStart();
    PORT_REGS->GROUP[2].PORT_DIRSET = 1<<18;
    PORT_REGS->GROUP[2].PORT_DIRSET = 1<<20;
    PORT_REGS->GROUP[2].PORT_DIRSET = 1<<21;
    PORT_REGS->GROUP[2].PORT_DIRSET = 1<<4;
    PORT_REGS->GROUP[2].PORT_DIRCLR = 1<<5;
    PORT_REGS->GROUP[2].PORT_PINCFG[5] = 0x0;
    OLED_Init();
    OLED_Clear();
    OLED_Clear();
    OLED_ShowString(0,0,"t=     C",16);
    OLED_ShowString(0,2,"p=       KPa",16);
    Init_BMP085();
    SYSTICK_DelayMs(1000);
    SYSTICK_DelayMs(100);
    while(1)
    {
       bmp085Convert();
       OLED_ShowNum(24,0,temperature1/10,3,16);
       OLED_ShowNum(24,2,pressure/100,5,16);
       SYSTICK_DelayMs(500);
    }
}

ATSAMD51EVK开发板除了MCC不好用之外,用起来还是比较得心应手的!

使用特权

评论回复
沙发
gygp| | 2022-12-23 21:58 | 只看该作者
这个恶意是硬件iic驱动的吗?              

使用特权

评论回复
板凳
bestwell| | 2022-12-24 19:50 | 只看该作者
怎么用温度修正气压数据?              

使用特权

评论回复
地板
sesefadou| | 2022-12-24 21:59 | 只看该作者
BMP085怎么进行温度修正?              

使用特权

评论回复
5
jinglixixi|  楼主 | 2022-12-25 10:31 | 只看该作者
本帖最后由 jinglixixi 于 2022-12-25 10:33 编辑
sesefadou 发表于 2022-12-24 21:59
BMP085怎么进行温度修正?

无需校正,出厂已标定。

使用特权

评论回复
6
jinglixixi|  楼主 | 2022-12-25 10:32 | 只看该作者
bestwell 发表于 2022-12-24 19:50
怎么用温度修正气压数据?

出厂应该已整定

使用特权

评论回复
7
jinglixixi|  楼主 | 2022-12-25 10:33 | 只看该作者
gygp 发表于 2022-12-23 21:58
这个恶意是硬件iic驱动的吗?

软件模拟

使用特权

评论回复
8
mnynt121| | 2023-1-5 16:00 | 只看该作者
气压传感器怎么转换高度呢?              

使用特权

评论回复
9
jinglixixi|  楼主 | 2023-1-6 11:53 | 只看该作者
mnynt121 发表于 2023-1-5 16:00
气压传感器怎么转换高度呢?

按物理定律,海拔升高气压降低相应数值,然后加以比例变换。

使用特权

评论回复
10
belindagraham| | 2023-1-9 09:34 | 只看该作者
BMP280吗?              

使用特权

评论回复
11
uiint| | 2023-1-9 14:30 | 只看该作者
这个最多支持多少个iic设备呢?

使用特权

评论回复
12
jinglixixi|  楼主 | 2023-1-9 16:00 | 只看该作者
uiint 发表于 2023-1-9 14:30
这个最多支持多少个iic设备呢?

我用的的软件模拟方式,理论=IO口数/2

使用特权

评论回复
13
hudi008| | 2023-1-9 17:51 | 只看该作者
怎么才能测量多个气压数据?              

使用特权

评论回复
14
jinglixixi|  楼主 | 2023-1-10 00:22 | 只看该作者
hudi008 发表于 2023-1-9 17:51
怎么才能测量多个气压数据?

测量多个气压数据,啥意思?

使用特权

评论回复
15
rosemoore| | 2023-1-10 20:40 | 只看该作者
这个使用什么传感器比较好?              

使用特权

评论回复
16
jinglixixi|  楼主 | 2023-1-10 23:33 | 只看该作者
rosemoore 发表于 2023-1-10 20:40
这个使用什么传感器比较好?

这里用的是BMP085,好像BMP180 BMP182  BMP285都可以。

使用特权

评论回复
17
lihuami| | 2023-1-11 21:49 | 只看该作者
温度大气测量范围比较大了。              

使用特权

评论回复
18
benjaminka| | 2023-1-12 19:16 | 只看该作者
可以用来做四旋翼飞行器的定高飞行。

使用特权

评论回复
19
ccook11| | 2023-1-12 21:04 | 只看该作者
为什么不使用hx711读取气压传感器呢?

使用特权

评论回复
20
jinglixixi|  楼主 | 2023-1-12 22:34 | 只看该作者
ccook11 发表于 2023-1-12 21:04
为什么不使用hx711读取气压传感器呢?

hx711应该属于模拟量传感器需要自己标定处理。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

451

主题

2747

帖子

38

粉丝