一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 2434|回复: 4

新手请求帮助,关于AD的标准化语句

[复制链接]
发表于 2010-6-24 23:35 | 显示全部楼层 |阅读模式
我的程序的意思是用到串口指定要采样的通道0-4,m16通过串口把采到的数据发送给电脑。现在的问题是在指定的通道上可以正常的返回0x00~0x3ff。但是我后来想直接返回采样的电压数值,REF 2.56V 于是采用了语句
adt=(unsigned int)(((unsigned long)adt*2560)/1023);
adt是采样后的数值uint型,全局变量。adl、adh是uchar,局部变量 、txdat()是串口发送函数。
按照我的理解应当标准化后的电压应当是0-2560。
    adt=(unsigned int)(((unsigned long)adt*2560)/1023);
    adl=adt;
    adh=adt>>8;
    txdat(adh);
    txdat(adl);
如果不加adt=(unsigned int)(((unsigned long)adt*2560)/1023);可以收到0-3ff的数值;
但是加上adt=(unsigned int)(((unsigned long)adt*2560)/1023);却收不到正确的标准化的电压

搞了几天不得要领请大虾帮忙
发表于 2010-6-25 06:41 | 显示全部楼层
本帖最后由 倪大德 于 2010-6-25 08:13 编辑
我的程序的意思是用到串口指定要采样的通道0-4,m16通过串口把采到的数据发送给电脑。现在的问题是在指定的 ...
孬孬 发表于 2010-6-24 23:35 https://www.yleee.com.cn/images/common/back.gif


       程序将AD转换值转化为0-2560电压值。

       试一下以下的分解后程序:供参考!

       long m;                                     //   1.  先定义一个无符号长整形变量m
       m=(2560*(long)adt)/1023;         //   2.  将AD采样数据转换成需要的数据形式
       adt=(uint)m;                             //   3. 再将无符号长整形变量m强制转换成无符号整形变量送adt
回复

使用道具 举报

 楼主| 发表于 2010-6-25 19:41 | 显示全部楼层
先谢谢倪老师。用了您的语句可以工作了。可是,为什么将程序分解后就可以了呢?难道是我声明的是unsigned long。而您声明的是long的缘故?
回复

使用道具 举报

发表于 2010-6-26 08:24 | 显示全部楼层
先谢谢倪老师。用了您的语句可以工作了。可是,为什么将程序分解后就可以了呢?难道是我声明的是unsigned l ...
孬孬 发表于 2010-6-25 19:41 https://www.yleee.com.cn/images/common/back.gif



         问题解决就好!

    1。     碰到问题将程序分解也许更能解决问题。

  不同的编译器对数据类型的处理会有所区别。

  如:ICCACR和CVAVR中数据类型的处理也略有不同,

又如:GCCAVR可指定64位双精度浮点型数据,而ICCAVR,Keil则不能。

  这些问题以前都碰到过。

    2.  教科书上的AD处理也许比较规范。其实将上面的语句作以下处理,程序会更容易理解!  

           adt=adt*2.502         //満幅2560



回复

使用道具 举报

 楼主| 发表于 2010-10-5 21:48 | 显示全部楼层
谢谢,学习了,回来顶一下
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2026-4-22 00:05 , Processed in 0.034322 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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