BMP180使用记录(AVR)
硬件篇
硬件按照数据手册连接到单片机的IIC接口或者任意两个IO口即可,记得要加2个4.7K左右上拉电阻。
软件篇
软件依照惯例百度了段AVR下的代码,下载进去后发现所读取出的数据完全不对,于是对照数据手册时序图和操作步骤修改了代码中的几处bug,同时修改了下代码命名规范什么的,修改后数据读取正常。
源代码中几处bug主要是:
1、从eep中读出来的校准参数是short型,后面计算气压公式中并没有将short型强制转换成long型,在winavr下面会导致计算结果错误,
2、IIC读数据移位部分逻辑错误
unsigned char iicRecv(void)
{
unsigned char i,data = 0;
SDA_IN;
for(i=8; i》0; i--)
{
SCL_H;
_delay_us(5);
data|= ((SDA_RD_VAL》》5)《《(i-1));
// Be careful (PA5》》5)
SCL_L;
_delay_us(5);
}
return data;
}
// 注意SDA_RD_VAL移位的时候注意是几号口就移多少,本代码是PA5 3、修改代码适用于各种读取模式
代码部分按照数据手册操作是很简单的,第一步从EEP里面读取出出厂校准参数,第二步写寄存器开启测量,按不同测量模式适当延时,第三步读取温度、大气压,第四步按照手册给定步骤计算即可。
注意点:
1、IIC读取连续地址数据的时候只需要写入首地址即可。
BMP180使用记录(AVR)
硬件篇
硬件按照数据手册连接到单片机的IIC接口或者任意两个IO口即可,记得要加2个4.7K左右上拉电阻。
软件篇
软件依照惯例百度了段AVR下的代码,下载进去后发现所读取出的数据完全不对,于是对照数据手册时序图和操作步骤修改了代码中的几处bug,同时修改了下代码命名规范什么的,修改后数据读取正常。
源代码中几处bug主要是:
1、从eep中读出来的校准参数是short型,后面计算气压公式中并没有将short型强制转换成long型,在winavr下面会导致计算结果错误,
2、IIC读数据移位部分逻辑错误
unsigned char iicRecv(void)
{
unsigned char i,data = 0;
SDA_IN;
for(i=8; i》0; i--)
{
SCL_H;
_delay_us(5);
data|= ((SDA_RD_VAL》》5)《《(i-1));
// Be careful (PA5》》5)
SCL_L;
_delay_us(5);
}
return data;
}
// 注意SDA_RD_VAL移位的时候注意是几号口就移多少,本代码是PA5 3、修改代码适用于各种读取模式
代码部分按照数据手册操作是很简单的,第一步从EEP里面读取出出厂校准参数,第二步写寄存器开启测量,按不同测量模式适当延时,第三步读取温度、大气压,第四步按照手册给定步骤计算即可。
注意点:
1、IIC读取连续地址数据的时候只需要写入首地址即可。
举报