打印

关于SM9541的问题!

[复制链接]
4397|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
東南博士|  楼主 | 2017-5-12 11:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
I2c, se, AC, ck, ic
/*
* Example Code for pressure reading from I2C bus
* Used microcontroller: Microchip PIC24FV32KA302
* This code is not complete! Basic I2C functions have to be added
*
*/
//Read byte from I2C bus; send master ACK-bit
char i2c_read_ack(void) //does not reset bus!!!
{
int i = 0;
char data = 0;
//set I2C module to receive
I2C1CONbits.RCEN = 1;
//if no response, break
while (!I2C1STATbits.RBF)
{
i++;
if (i > 2000) break;
}
//get data from I2CRCV register
data = I2C1RCV;
//set ACK to high
I2C1CONbits.ACKEN = 1;
//wait before exiting
Delay(10);
//return data
return data;
}

相关帖子

沙发
東南博士|  楼主 | 2017-5-12 11:52 | 只看该作者
//Read byte from I2C bus; don't send master ACK-bit
char i2c_read_nack(void) //does not reset bus!!!
{
int i = 0;
char data = 0;
//set I2C module to receive
I2C1CONbits.RCEN = 1;
//if no response, break
while (!I2C1STATbits.RBF)
{
i++;
if (i > 2000) break;
}
//get data from I2CRCV register
data = I2C1RCV;
//set ACK to low
I2C1CONbits.ACKEN = 0;
//wait before exiting
Delay(10);
//return data
return data;
}

使用特权

评论回复
板凳
東南博士|  楼主 | 2017-5-12 11:53 | 只看该作者
//Read digital pressure value
unsigned int I2CreadP_digital(void)
{
// Two bytes have to be read
unsigned char i2c_byte1 =0;
unsigned char i2c_byte2 =0;
/*****
*
* The two most significant bits of the first byte are status bits!
* They don't contain pressure value information.
*
* Encoding of status bits:
* 00: Normal operation, good data packet
* 01: Device in Command Mode
* 10: Stale data: Data that has already been fetched since
* the last measurement cycle.
* 11: Diagnostic condition exists *
*
* For further information see Datasheet of ASIC ZSC31014
*
*******/
unsigned char status =0;
int digital_Pressure =0;
unsigned char i2c_relevant_bits = 0;
// Initialize I2C Connection
i2c_init();
// Start I2C Communication
i2c_start();
// Send Slave Adress+Read-Bit; wait for slave ACK-Bit
send_i2c_byte(0b10100001);
//Read first byte + sending ACK-Bit
//the two MSBs of this byte are status bits!!
i2c_byte1 = i2c_read_ack();
//Read second byte without sending ACK-Bit
i2c_byte2 = i2c_read_nack();
//extract status bits from first byte
strncpy(status, i2c_byte1, 2);
//extract relevant bits for pressure value from first byte
strcpy(i2c_relevant_bits, i2c_byte1 + 2);
//calculate digital pressure value
digital_Pressure = i2c_relevant_bits * 256 + i2c_byte2;
return digital_Pressure;
}

使用特权

评论回复
地板
東南博士|  楼主 | 2017-5-12 11:54 | 只看该作者
// Reading of actual decimal pressure value
double I2CreadP_decimal(double P_min, double P_max)
//Range setup with P_min and P_max
{
//read digital pressure value
unsigned int digital_Pressure = I2CreadP_digital();
//constant for digital analog conversion DAC = (2^14)-1
int DAC = 16383;
//calculate proportional pressure value of P_range
double prop_P_range = digital_Pressure/DAC;
/* calculate decimal pressure value out of
* proportional pressure and given range setup */
double decimal_Pressure = prop_P_range*(P_max-P_min)+P_min;
return decimal_Pressure;
}

使用特权

评论回复
5
東南博士|  楼主 | 2017-5-12 11:54 | 只看该作者
请问 关于 IIC 总线的 连续读写 是怎么样的一个过程呢?

这个是压差传感器的官方例程。。。。

使用特权

评论回复
6
chrise23| | 2017-5-15 21:57 | 只看该作者
東南博士 发表于 2017-5-12 11:54
请问 关于 IIC 总线的 连续读写 是怎么样的一个过程呢?

这个是压差传感器的官方例程。。。。 ...

连续写,比单独写速度快点,一般是地址后面直接跟数据就好了,但是指令肯定是不一样的。

使用特权

评论回复
7
MTCN2013| | 2017-5-15 22:00 | 只看该作者
你的例程,有点看不懂,缺少写指令和写数据的函数的。

使用特权

评论回复
8
mdk55555| | 2017-5-17 17:43 | 只看该作者
MTCN2013 发表于 2017-5-15 22:00
你的例程,有点看不懂,缺少写指令和写数据的函数的。

确实写数据和写指令没有。函数要重新写的。

使用特权

评论回复
9
喵喵小星人| | 2017-5-21 09:10 | 只看该作者
SM9541是什么东西呢?好像一个数码管型号

使用特权

评论回复
10
xiaolong12| | 2017-5-21 09:15 | 只看该作者
喵喵小星人 发表于 2017-5-21 09:10
SM9541是什么东西呢?好像一个数码管型号

楼主都说了。压差传感器,用的是I2C的接口。

使用特权

评论回复
11
rmbass| | 2017-5-23 22:22 | 只看该作者
xiaolong12 发表于 2017-5-21 09:15
楼主都说了。压差传感器,用的是I2C的接口。

这个一般用在什么地方呢

使用特权

评论回复
12
東南博士|  楼主 | 2017-5-24 16:27 | 只看该作者
压差变送器 比如 医疗设备。

使用特权

评论回复
13
diu| | 2018-8-9 10:27 | 只看该作者
想问一下楼主,你这个官方例程在哪找的

使用特权

评论回复
14
diu| | 2018-8-9 13:28 | 只看该作者
東南博士 发表于 2017-5-24 16:27
压差变送器 比如 医疗设备。

楼主这个传感器的官方例程有链接没

使用特权

评论回复
15
super何川| | 2018-11-6 10:23 | 只看该作者
您好,能加个qq,或者微信吗,SM9541的问题。qq1017122008,微信18815284821

使用特权

评论回复
16
東南博士|  楼主 | 2018-11-12 15:14 | 只看该作者
好的 回复了个电话 楼上已经解决问题了!

好的!

使用特权

评论回复
17
邓亨礼| | 2018-12-5 19:35 | 只看该作者
您好,我现在在调试SM9541,发现芯片没有应答,已经调了2天了,还是不能正常读取。能写好的demo吗或指导下,能否加个qq或微信939808122    13821175331谢谢了,感激不尽。

使用特权

评论回复
18
邓亨礼| | 2018-12-5 19:36 | 只看该作者
東南博士 发表于 2018-11-12 15:14
好的 回复了个电话 楼上已经解决问题了!

好的!

您好,能加个qq或微信吗,想请教下关于sm9541的问题,谢谢啦
939808122
13821175331

使用特权

评论回复
19
東南博士|  楼主 | 2019-1-8 13:45 | 只看该作者
就在这里一起探讨吧!

使用特权

评论回复
20
東南博士|  楼主 | 2019-1-8 13:45 | 只看该作者
你用逻辑分析仪 抓取一下 你的数据 看看是不是正确的!

使用特权

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

本版积分规则

382

主题

6081

帖子

34

粉丝