【蓝桥杯嵌入式】MCP4017可编程电阻学习(iic通信)

四、MCP4017可编程电阻
1.概况
内部结构


由Total(Rab)可知这个可编程电阻总电阻为100k欧(当寄存器为0x7F时达到最大电阻)。

由Step(Rs),可知相当于寄存器每增加一个数,电阻增加787.402欧

电阻的计算

:由下图大图可知,Rs的阻值为 AB之间的总电阻除以127,其中Rw的阻值几乎为零,可以忽略不计。N为我们写入的数据。RAB为常量,可以根据数据手册查找

当我们传入0x7f时,对应的电阻就是100K。这里要注意的一点是,我们写进去的一个数字(0-127),读出来也是一个数字,转化为电阻阻值:R = 787.4 * read_resistor 欧,电压:3.3*(R/(R+10)) (假设外接的电压为3.3)

所以蓝桥杯嵌入式这块板子上,

获取MCP当前电阻的方式:

1、读取寄存器值(R_data),然后利用 公式  电阻(R) = R_data  * 787.4 
2、读取PB14电压(V_data),然后利用公式  V_data = 3.3*(R/(R+10)) (假设参考电压为3.3v)。然后解方程即可得知

从机器件的地址

地址前面几位都是固定的:0101 111x(R/~W)

得到MCP4017的从机地址,如果是读操作的话就是0x5F,写操作的话就是0X5E。

接下来,我们根据时序图来编写MCP的读写操作。

原理图:

由此利用AD转换读取PB14引脚,得出PB14处的电压值。

然后分压公式计算出可编程电阻当前阻值(精度低)。


2.读\写动作
写一个字节

官方手册内的参考写时序图:

代码如下:

void write_M24C(uint8_t value)
{
    MYIIC_Start();
    MYIIC_SentByte(0x5E);
    MYIIC_WaitAck();
    
    MYIIC_SentByte(value);
    MYIIC_WaitAck();
    MYIIC_Stop();   
}


读一个字节

官方手册内的参考写时序图:

uint8_t read_M24C(void)
{
    uint8_t data;
    MYIIC_Start();
    MYIIC_SentByte(0x5F);
    MYIIC_WaitAck();

    data = MYIIC_ReceiveByte();
    MYIIC_SentAck(0);
    MYIIC_Stop();

    
   return value;
}

至此,MCP4017的应用程序逻辑就写好了 。代码中不包含iic的通信驱动,请自行添加。

修改电阻后会对应分压电路中电压的改变,即下图

这部分线路被PB14引脚监测,此时我们就需要打开该引脚的ADC功能。


该引脚涉及ADC1外设的其中一个通道,如果此时已经开启了一个通道,并且需要根据比赛进行对应的通通道调整,你可以参考这篇文章,进行ADC指定通道的读取:

http://t.csdnimg.cn/76VK8

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值