陈家乐
发表于 2024-10-30 10:14:21
邮箱 发表于 2024-10-29 15:23
靴靴!!!!{:lol:}
梁工
发表于 2024-10-30 10:22:18
陈家乐 发表于 2024-10-30 10:13
有没有可能,老梁,我用的是左对齐,而您这种是右对齐呢
跟adc对齐没关系,对一个8位的寄存器左移8位,有可能会全部移走了变成0,为了可靠,我会强转为无符号16位再左移。
晓飛飛
发表于 2024-10-30 10:25:30
陈家乐 发表于 2024-10-30 10:12
你说我结果错,没有问题的,我跟STC例程里面的结果对过了的,没有错,只不过是我分别右移了4位吧,您这种写法 ...
((ADC_RES>>4)<<8)
这个语句先右移再左移理论上会让4位数据变为0,如果先左移8再右移4,那还能说得过去,既然结果是对的,那肯定是我有考虑不周的地方,我有时间了单独验证一下。
陈家乐
发表于 2024-10-30 22:13:12
梁工 发表于 2024-10-30 08:22
跟adc对齐没关系,对一个8位的寄存器左移8位,有可能会全部移走了变成0,为了可靠,我会强转为无符号16位 ...
{:lol:}我才反应过来,受教了
陈家乐
发表于 2024-10-30 22:13:54
晓飛飛 发表于 2024-10-30 08:25
((ADC_RES>>4)
其实为了数据的安全性,处理的保守一点还是挺好的,避免重蹈覆辙之前的错误
阿白凌坤
发表于 2024-11-9 09:03:24
为什么我用左对齐:ADC_Val = ((ADC_RES<<8)|ADC_RESL)>>4 (单片机型号STC8G1K08)出来的数据不对
接收←ADC_Result: 3296
电压转换结果:15.032V
右对齐数据就正常。
阿白凌坤
发表于 2024-11-9 09:04:30
右对齐结果正常:
接收←ADC_Result: 879
电压转换结果:4.009V
阿白凌坤
发表于 2024-11-9 09:50:31
已经找出问题所在了 ADC 转换数据分 10位 ADC 跟 12位 ADC :10位 ADC 应该是 左对齐:ADC_Val = ((unsigend int)(ADC_RES << 8) | ADC_RESL)>> 6这样的结果就是 2 的 10 次方 1024
12位 ADC 应该是 左对齐:ADC_Val = ((unsigned int)(ADC_RES<< 8) | ADC_RESL) >> 4这样的结果就是 2 的 12 次方 4096
所以如果是 10 位 ADC 就是整体右移 6 位,本人新手如果分析不对还请各位师傅指正。
陈家乐
发表于 2024-11-9 10:19:59
阿白凌坤 发表于 2024-11-9 07:50
已经找出问题所在了 ADC 转换数据分 10位 ADC 跟 12位 ADC :10位 ADC 应该是 左对齐:ADC_Val = ((unsig ...
你这个多少位精度的ADC和这个什么方式的对齐是没关系的,这个是分开讨论的
陈家乐
发表于 2024-11-9 10:20:46
阿白凌坤 发表于 2024-11-9 07:04
右对齐结果正常:
接收←ADC_Result: 879
电压转换结果:4.009V ...
其实就是啥呢,把十二位的还是十位的ADC转换值读出来并显示在串口中,这样子就行了