锆石科技社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1822|回复: 17

AD模块的疑问,求大神指导

[复制链接]

4

主题

40

帖子

1134

积分

金牌会员

Rank: 6Rank: 6

积分
1134
发表于 2017-2-15 15:35:50 | 显示全部楼层 |阅读模式

①这四条语句,为什么要这样赋值?为什么mid1 和mid2取12位的寄存器,整数和小数部分为什么都选择高四位。
  ②绿色注释部分的不等式看不懂,求大神解释。

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2017-2-16 13:18:27 | 显示全部楼层
本帖最后由 锆石科技解答员 于 2017-2-16 13:19 编辑

{2'h0 ,data_out , 2'h0} + {4'h0 , data_out},就相当于 data_out << 2 + data_out。也就是data_out * 4 + data_out =data_out * 5。此时我们将5 * data_out  赋值给mid,然后我们提取mid[11:8]也就相当于右移8位。mid2也是同理
回复 支持 反对

使用道具 举报

3

主题

26

帖子

1162

积分

金牌会员

Rank: 6Rank: 6

积分
1162
QQ
发表于 2017-2-27 16:29:02 | 显示全部楼层
锆石科技解答员 发表于 2017-2-16 13:18
{2'h0 ,data_out , 2'h0} + {4'h0 , data_out},就相当于 data_out

解答哥,整数部分都好理解,关键能不能解释一下小数部分怎么是那样算的呢?mid1[7:0] & 0xFF这一步是干什么用的呢?mid2其实就是把mid1乘以10,也就是把整数部分乘以10,然后再除以256,并没有实现注释中那样的(5*AD_DATA & 0XFF) * 10 啊?
回复 支持 反对

使用道具 举报

发表于 2017-2-27 17:14:09 | 显示全部楼层
难寻 发表于 2017-2-27 16:29
解答哥,整数部分都好理解,关键能不能解释一下小数部分怎么是那样算的呢?mid1[7:0] & 0xFF这一步是干什 ...

mid1[7:0] & 0xFF,其实是没有起到任何作用。这一步骤后面我们在注释中去掉。mid2就如你理解的那样,将mid1乘以10,然后再除以256。
回复 支持 反对

使用道具 举报

3

主题

26

帖子

1162

积分

金牌会员

Rank: 6Rank: 6

积分
1162
QQ
发表于 2017-2-27 19:36:44 | 显示全部楼层
锆石科技解答员 发表于 2017-2-27 17:14
mid1[7:0] & 0xFF,其实是没有起到任何作用。这一步骤后面我们在注释中去掉。mid2就如你理解的那样,将mi ...

谢谢解答,哈哈
回复 支持 反对

使用道具 举报

3

主题

37

帖子

1173

积分

金牌会员

Rank: 6Rank: 6

积分
1173
发表于 2017-3-9 19:36:14 | 显示全部楼层
其实我也是看了好久才看懂这个地方的,虽然可能楼主已经懂了,但是还是在这说一下吧,供后人参考。

其实主要是理解TLC549芯片的工作原理。这个AD芯片是一个8位分辨率的AD转换器,采用的是电容式逐次渐进法来进行AD转换的,意思就是从最高位开始依次每一位取1,与输入的模拟电压Vin比较,如果比Vin高,这一位就置0,如果比Vin低就保留1,最后可以逐次的趋近Vin。

然后就是8位二进制数可以表示的范围是0~255,而TLC549的正参考电压是5V,负参考电压为0V,所以我们需要的范围是0~5。从0~255到0~5,就是我们代码中的操作了,先除以FF(255),再乘以5,就可以完成这个范围的变化了。这个过程中原来全是整数的0~255就会产生我们需要的0~5V电压值并且还有一个小数位的精确度。整数直接取就行,小数需要乘以10,因为只有一位小数。

这么说应该很明了了。参考:http://www.genshuixue.com/i-cxy/p/12288288
回复 支持 反对

使用道具 举报

4

主题

40

帖子

1134

积分

金牌会员

Rank: 6Rank: 6

积分
1134
 楼主| 发表于 2017-3-14 15:15:16 | 显示全部楼层
锆石科技解答员 发表于 2017-2-16 13:18
{2'h0 ,data_out , 2'h0} + {4'h0 , data_out},就相当于 data_out

为什么说“ data_out << 2 + data_out。也就是data_out * 4 + data_out =data_out * 5。”
回复 支持 反对

使用道具 举报

4

主题

40

帖子

1134

积分

金牌会员

Rank: 6Rank: 6

积分
1134
 楼主| 发表于 2017-3-14 15:18:03 | 显示全部楼层
锆石科技解答员 发表于 2017-2-16 13:18
{2'h0 ,data_out , 2'h0} + {4'h0 , data_out},就相当于 data_out

我知道了  谢谢
回复 支持 反对

使用道具 举报

4

主题

40

帖子

1134

积分

金牌会员

Rank: 6Rank: 6

积分
1134
 楼主| 发表于 2017-3-14 15:23:01 | 显示全部楼层
锆石科技解答员 发表于 2017-2-16 13:18
{2'h0 ,data_out , 2'h0} + {4'h0 , data_out},就相当于 data_out

小数那里还不太明白
回复 支持 反对

使用道具 举报

4

主题

40

帖子

1134

积分

金牌会员

Rank: 6Rank: 6

积分
1134
 楼主| 发表于 2017-3-14 17:20:36 | 显示全部楼层
锆石科技解答员 发表于 2017-2-16 13:18
{2'h0 ,data_out , 2'h0} + {4'h0 , data_out},就相当于 data_out

为什么左移加右移的结果就是整数部分了?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|锆石科技社区 ( 苏ICP备15059756号  

GMT+8, 2019-5-27 03:06 , Processed in 1.496063 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表