找回密码
 立即注册
楼主: 陈家乐

对 ADC例程补充;如何读取左对齐的ADC结果?

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-01 11:09:19
已绑定手机

51

主题

138

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-10-30 10:14:21 | 显示全部楼层
用尽STC单片机的资源是我的梦想
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-10-30 10:22:18 | 显示全部楼层
陈*** 发表于 2024-10-30 10:13
有没有可能,老梁,我用的是左对齐,而您这种是右对齐呢

跟adc对齐没关系,对一个8位的寄存器左移8位,有可能会全部移走了变成0,为了可靠,我会强转为无符号16位再左移。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-10-30 10:25:30 | 显示全部楼层
陈*** 发表于 2024-10-30 10:12
你说我结果错,没有问题的,我跟STC例程里面的结果对过了的,没有错,只不过是我分别右移了4位吧,您这种写法 ...

((ADC_RES>>4)<<8)
这个语句先右移再左移理论上会让4位数据变为0,如果先左移8再右移4,那还能说得过去,既然结果是对的,那肯定是我有考虑不周的地方,我有时间了单独验证一下。
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-01 11:09:19
已绑定手机

51

主题

138

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-10-30 22:13:12 | 显示全部楼层
梁*** 发表于 2024-10-30 08:22
跟adc对齐没关系,对一个8位的寄存器左移8位,有可能会全部移走了变成0,为了可靠,我会强转为无符号16位 ...

我才反应过来,受教了
用尽STC单片机的资源是我的梦想
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-01 11:09:19
已绑定手机

51

主题

138

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-10-30 22:13:54 | 显示全部楼层

其实为了数据的安全性,处理的保守一点还是挺好的,避免重蹈覆辙之前的错误
用尽STC单片机的资源是我的梦想
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-19 08:35:19

0

主题

22

回帖

126

积分

注册会员

积分
126
发表于 2024-11-9 09:03:24 | 显示全部楼层
为什么我用左对齐:ADC_Val = ((ADC_RES<<8)|ADC_RESL)>>4 (单片机型号STC8G1K08)出来的数据不对
[09:02:09.121]接收←ADC_Result: 3296
                    电压转换结果:15.032V
右对齐数据就正常。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-19 08:35:19

0

主题

22

回帖

126

积分

注册会员

积分
126
发表于 2024-11-9 09:04:30 | 显示全部楼层
右对齐结果正常:
[09:04:00.242]接收←ADC_Result: 879
                    电压转换结果:4.009V
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-19 08:35:19

0

主题

22

回帖

126

积分

注册会员

积分
126
发表于 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 位,本人新手如果分析不对还请各位师傅指正。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-01 11:09:19
已绑定手机

51

主题

138

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-11-9 10:19:59 | 显示全部楼层
阿白*** 发表于 2024-11-9 07:50
已经找出问题所在了 ADC 转换数据分 10位 ADC 跟 12位 ADC   :10位 ADC 应该是 左对齐:ADC_Val = ((unsig ...

你这个多少位精度的ADC和这个什么方式的对齐是没关系的,这个是分开讨论的
用尽STC单片机的资源是我的梦想
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-01 11:09:19
已绑定手机

51

主题

138

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-11-9 10:20:46 | 显示全部楼层
阿白*** 发表于 2024-11-9 07:04
右对齐结果正常:
[09:04:00.242]接收←ADC_Result: 879
                    电压转换结果:4.009V ...

其实就是啥呢,把十二位的还是十位的ADC转换值读出来并显示在串口中,这样子就行了
用尽STC单片机的资源是我的梦想
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 13:20 , Processed in 0.375364 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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