标题: 51单片机如何控制电位器输出0-100数字信号? [打印本页]

作者: s7777    时间: 2023-2-8 13:44
标题: 51单片机如何控制电位器输出0-100数字信号?
                adc_value=xpt2046_read_adc_value(0x94);//测量电位器
                Compare=100*adc_value/4096;//将读取的AD值转换为0-100
想令Compare为0-100但实测数据为0-15左右且到15最大以后会再变成0,如何解决?


void main()
{
        Timer0_init();
        while(1)
        {
       
                adc_value=xpt2046_read_adc_value(0x94);//测量电位器
                Compare=100*adc_value/4096;//将读取的AD值转换为0-100
                adc_buf[0]=gsmg_code[Compare/100];
                adc_buf[1]=gsmg_code[Compare/10%10];
                adc_buf[2]=gsmg_code[Compare%10];
                smg_display(adc_buf,1);       
               
        }
}


作者: xuyaqi    时间: 2023-2-8 14:37
把系数4096变小,输出15就会变大,直到最大输出为100.
作者: lkc8210    时间: 2023-2-8 14:44
Compare=100*(long)adc_value/4096;//将读取的AD值转换为0-100
作者: wulin    时间: 2023-2-8 15:29
如果按照电位器的滑动触点的旋转角度和输出端阻值变化的关系,可分为线性电位器、指数式电位器和对数式电位器。在外壳上以字母“X”“Z”“D”作为标志。控制电位器输出0-100数字信号要选择线性电位器,读取的ADC结果按楼上板凳公式换算。
作者: szb314    时间: 2023-2-8 15:54
电位器是个输入器件,正常情况下,不可能输出0-100数字信号
作者: hhh402    时间: 2023-2-8 17:29
lkc8210 发表于 2023-2-8 14:44
Compare=100*(long)adc_value/4096;//将读取的AD值转换为0-100

100*adc_value会数据溢出,改成:
Compare=100*(long)adc_value/4096;//将读取的AD值转换为0-100

作者: Hephaestus    时间: 2023-2-8 19:43
溢出了呗,你应该把各个变量的定义,以及函数原型贴出来,然后看各种数据类型的范围,你肯定是超范围了。
作者: 君工创    时间: 2023-2-8 21:45
比如电位器上端接5V,下端接地,单片机读取电位器中点电压值,取8位ADC,value/2.55.读数就是0-100。
作者: hi等你    时间: 2023-2-9 09:17
看到楼主的问题我很担忧,编程需要语言结构严谨细致,楼主的问话可是完全逻辑混乱,什么叫单片机控制电位器输出?电位器里面有旋转电机吗?单片机如何去控制电位器?楼主的问题应该是:单片机如何读取电位器电阻值然后输出数据.......编程是一门逻辑艺术,楼主写下每一条语句和命令自己要想一想,这样写规范吗,逻辑对不对,单片机会控制电位器吗.........授人以鱼不如授人以渔,祝愿楼主早日成为大师
作者: coody_sz    时间: 2023-2-9 10:14
数字电位才可以输出。
作者: Hephaestus    时间: 2023-2-11 21:37
hhh402 发表于 2023-2-8 17:29
100*adc_value会数据溢出,改成:
Compare=100*(long)adc_value/4096;//将读取的AD值转换为0-100

不用那么复杂,adc_value/41即可。
作者: fishafish    时间: 2023-2-12 10:24
10k电位器串2.8k电阻,电位器滑动端子接7位AD转换器(10位AD结果右移3位)即可完美输出0-100
作者: s7777    时间: 2023-2-14 14:51
hhh402 发表于 2023-2-8 17:29
100*adc_value会数据溢出,改成:
Compare=100*(long)adc_value/4096;//将读取的AD值转换为0-100

感谢





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1