[PIC32/SAM] 【ATSAMD51EVK测评报告】+温度大气压检测与显示

[复制链接]
1852|19
 楼主| jinglixixi 发表于 2022-12-18 14:59 | 显示全部楼层 |阅读模式
#申请原创#

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

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

以模拟方式接受字节数据的函数为:
  1. char BMP085_Read_Byte(unsigned char ack)
  2. {
  3.       unsigned char i,receive=0;
  4.       INPUT_MODE_SET();
  5.       for(i=0;i<8;i++)
  6.       {
  7.         SCL_Clr1();
  8.         delay_us(5);
  9.         SCL_Set1();
  10.         receive<<=1;
  11.         if(SDA_IN()==1) receive++;
  12.         delay_us(5);
  13.     }
  14.     if(!ack)
  15.         BMP085_NAck();
  16.     else
  17.         BMP085_Ack();
  18.     return receive;
  19. }

读取温度的函数为:
  1. long bmp085ReadTemp(void)
  2. {
  3.     BMP085_Start();
  4.     BMP085_Send_Byte(BMP085_SlaveAddress);
  5.     while(BMP085_Wait_Ack());
  6.     BMP085_Send_Byte(0xF4);
  7.     while(BMP085_Wait_Ack());
  8.     BMP085_Send_Byte(0x2E);
  9.     while(BMP085_Wait_Ack());
  10.     BMP085_Stop();
  11.     SYSTICK_DelayMs(10);
  12.     return (long) Multiple_read(0xF6);
  13. }

读取大气压的函数为:
  1. long bmp085ReadPressure(void)
  2. {
  3.     pressure = 0;
  4.     BMP085_Start();
  5.     BMP085_Send_Byte(BMP085_SlaveAddress);
  6.     while(BMP085_Wait_Ack()){}
  7.     BMP085_Send_Byte(0xF4);
  8.     while(BMP085_Wait_Ack()){}
  9.     BMP085_Send_Byte(0x34);
  10.     while(BMP085_Wait_Ack()){}
  11.     BMP085_Stop();
  12.     SYSTICK_DelayMs(10);
  13.     pressure = Multiple_read(0xF6);
  14.     pressure &= 0x0000FFFF;
  15.     return pressure;
  16. }

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
gygp 发表于 2022-12-23 21:58 | 显示全部楼层
这个恶意是硬件iic驱动的吗?              
bestwell 发表于 2022-12-24 19:50 | 显示全部楼层
怎么用温度修正气压数据?              
sesefadou 发表于 2022-12-24 21:59 | 显示全部楼层
BMP085怎么进行温度修正?              
 楼主| jinglixixi 发表于 2022-12-25 10:31 | 显示全部楼层
本帖最后由 jinglixixi 于 2022-12-25 10:33 编辑
sesefadou 发表于 2022-12-24 21:59
BMP085怎么进行温度修正?

无需校正,出厂已标定。
 楼主| jinglixixi 发表于 2022-12-25 10:32 | 显示全部楼层
bestwell 发表于 2022-12-24 19:50
怎么用温度修正气压数据?

出厂应该已整定
 楼主| jinglixixi 发表于 2022-12-25 10:33 | 显示全部楼层
gygp 发表于 2022-12-23 21:58
这个恶意是硬件iic驱动的吗?

软件模拟
mnynt121 发表于 2023-1-5 16:00 | 显示全部楼层
气压传感器怎么转换高度呢?              
 楼主| jinglixixi 发表于 2023-1-6 11:53 | 显示全部楼层
mnynt121 发表于 2023-1-5 16:00
气压传感器怎么转换高度呢?

按物理定律,海拔升高气压降低相应数值,然后加以比例变换。
belindagraham 发表于 2023-1-9 09:34 | 显示全部楼层
BMP280吗?              
uiint 发表于 2023-1-9 14:30 | 显示全部楼层
这个最多支持多少个iic设备呢?
 楼主| jinglixixi 发表于 2023-1-9 16:00 | 显示全部楼层
uiint 发表于 2023-1-9 14:30
这个最多支持多少个iic设备呢?

我用的的软件模拟方式,理论=IO口数/2
hudi008 发表于 2023-1-9 17:51 | 显示全部楼层
怎么才能测量多个气压数据?              
 楼主| jinglixixi 发表于 2023-1-10 00:22 | 显示全部楼层
hudi008 发表于 2023-1-9 17:51
怎么才能测量多个气压数据?

测量多个气压数据,啥意思?
rosemoore 发表于 2023-1-10 20:40 | 显示全部楼层
这个使用什么传感器比较好?              
 楼主| jinglixixi 发表于 2023-1-10 23:33 | 显示全部楼层
rosemoore 发表于 2023-1-10 20:40
这个使用什么传感器比较好?

这里用的是BMP085,好像BMP180 BMP182  BMP285都可以。
lihuami 发表于 2023-1-11 21:49 | 显示全部楼层
温度大气测量范围比较大了。              
benjaminka 发表于 2023-1-12 19:16 | 显示全部楼层
可以用来做四旋翼飞行器的定高飞行。
ccook11 发表于 2023-1-12 21:04 | 显示全部楼层
为什么不使用hx711读取气压传感器呢?
 楼主| jinglixixi 发表于 2023-1-12 22:34 | 显示全部楼层
ccook11 发表于 2023-1-12 21:04
为什么不使用hx711读取气压传感器呢?

hx711应该属于模拟量传感器需要自己标定处理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部