float的AD值怎么转成long的PWM值
PIC12F1501单片机,CCS编译器。read_adc()读出来是float,
set_pwm1_duty() 这边赋值需要long,
数据类型怎么转换????
尝试过强制转换duty = (long)ad;结果不行。
路过的大神请指点一二。
adc读出来的是float类型值,我out了! 读出来的AD值先除以AD的最大值然后再乘以PWM的最大值,再四舍五入为整数,不知是这个意思不。 techbaby 发表于 2012-12-6 11:08 static/image/common/back.gif
adc读出来的是float类型值,我out了!
省时间,没说清楚。
ad = ((ad * REF ) / 1024)*2; 这不就是 float了?
k005 发表于 2012-12-6 11:16 static/image/common/back.gif
省时间,没说清楚。
ad = ((ad * REF ) / 1024)*2; 这不就是 float了?
ad和REF若都不是float类型,那么结果肯定不是float型。 techbaby 发表于 2012-12-6 11:45 static/image/common/back.gif
ad和REF若都不是float类型,那么结果肯定不是float型。
CCS编译器里面只要有小数的,都归到float。 那就再×1024后再转换吧 我被楼主折服了 float是从哪里来的呢 yklstudent 发表于 2012-12-6 12:52 static/image/common/back.gif
我被楼主折服了 float是从哪里来的呢
没错啊,又复习一遍数据类型。
AD转换后有小数,不是float? 是什么? 本帖最后由 还有一个 于 2012-12-6 15:42 编辑
乘出的结果直接右移9位行不行? 无语,AD转换后的值肯定不会是float 10位AD是1024,12位是4096,是unsigned int型的呀,(float)adc_value*(5.0/1023)这样才是float型的。 xfdr 发表于 2012-12-6 23:36 static/image/common/back.gif
10位AD是1024,12位是4096,是unsigned int型的呀,(float)adc_value*(5.0/1023)这样才是float型的。 ...
LS都岔开主题了。
(float)adc_value*(5.0/1023)这样才是float型的
我的问题是:这边的float怎样转换成long,误差允许1%。
请各位不要再纠结AD的读数,请关注数据转换。 就楼猪这态度 哎 难交流 楼主为什么不想办法让AD函数读出整型数,而舍近求远,求float 转整型。 众多网友都指出,AD函数应该读出整型,就楼主一人坚持读出是float型。 sz2009 发表于 2012-12-7 20:38 static/image/common/back.gif
楼主为什么不想办法让AD函数读出整型数,而舍近求远,求float 转整型。 众多网友都指出,AD函数应该读出整 ...
请看13L答复
另外问题已解决。 CCS 编译器帮助文档中 搜索 "read_adc()"查看到" Returns: Either a 8 or 16 bit int depending on #DEVICE ADC = directive"
AD读出的值可以直接写入到PWM
set_pwm1_duty( read_adc() );
float 转 int小数转为整数.小数点后要吗?四舍五入? 假如是1.4转成整数 应该是1 还是 2?误差?% 这个只是相对. 解决这样的问题我们很多时候都会陷入死循环.所以避开.另寻出路
wangjiati 发表于 2012-12-8 08:40 static/image/common/back.gif
CCS 编译器帮助文档中 搜索 "read_adc()"查看到" Returns: Either a 8 or 16 bit int depending on...
多谢,就采用的你的方式解决的。 直接把值给PWM不行么?
页:
[1]