SGM58031示例

### 注意事项
1、芯片的从机地址是根据硬件的的ADDR进行决定的,详细见官方手册P18
2、他给的是最小时序要求,不是最长时序要求,也就是你SCL和SDA边沿变换的时间是可以长达ms等
3、读取数据完全按照官方手册来(P12),(我这里是用模拟IIC口来实现的,因为单片机自带的IIC出不了相应时序图)
    所以这里我再啰嗦写一下读数据过程:
        1:写从机:起始、从机地址(根据硬件决定)、ACK(第8位数据低电平是写,高电平是读,读取是先写再读)(第8位8:0)
        2:写寄存器:从机寄存器地址(见手册末尾寄存器章节)、ACK、结束位(这里才发送结束信号)
        3、读从机:起始、从机地址(根据硬件决定)(第8位8:1)、ACK
        4、接收两个数据然后结束
    写数据过程仔细看手册就行,注意第8位,数据是从机地址还是从机寄存器地址、ACK的来源、结束位
4、经过我的测试
    AIN2:0xE583(E才代表选择的是哪个采样通道,根据手册末尾寄存器的详解来算)
    AIN1:0xDxx
    AIN0:0x8xx
5、电压值 = 采样值/32768*自定义倍率(改变相应寄存器的相应位)
6、寄存器不是上电复位,如果需要复位的话先发送0x0通用呼叫地址,然后发送0x0006复用地址
    
    
### 伪码
#### 读
/* Frame 1 */
    IIC_Start();
    IIC_Send_Byte(0x90);
    IIC_Wait_Ack();
/* Frame 2 */
    IIC_Send_Byte(reg_addr);
    IIC_Wait_Ack();
    IIC_Stop();
/* Frame 3 */
    IIC_Start();
    IIC_Send_Byte(reg_addr);
    IIC_Wait_Ack();
/* Frame 4 */
    IIC_Read_Byte();    // 内部有个主机发送应答信号
/* Frame 5 */
    IIC_Read_Byte();    // 内部有个主机发送应答信号
    IIC_Stop();
#### 写
/* Frame 1 */
    IIC_Start();
    IIC_Send_Byte(0x91);
    IIC_Wait_Ack();
/* Frame 2 */
    IIC_Send_Byte(reg_addr);
    IIC_Wait_Ack();
/* Frame 3 */
    IIC_Send_Byte(data1);
    IIC_Wait_Ack();
/* Frame 4 */    
    IIC_Send_Byte(data0);
    IIC_Wait_Ack();
    IIC_Stop();
    
 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值