找回密码
 立即注册
楼主: 神农鼎

利用ADC15通道在内部固定接的1.19V辅助固定信号源,反推其他通道的输入电压或VCC

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-27 07:53:40

0

主题

1

回帖

40

积分

新手上路

积分
40
发表于 2024-1-15 15:53:04 | 显示全部楼层
不知道这个1.19V高低温特性如何?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-1-15 15:58:25 | 显示全部楼层
抗温飘的, +-1%

注意,是假定2次采样转换期间 【ADC_VREF+ = ADC_VCC = MCU_VCC】不变
===所以对外部采样转换一次,也要对内部ADC15接的信号源立即采样转换一次

回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2024-02-22 09:29:24

5

主题

51

回帖

285

积分

中级会员

积分
285
发表于 2024-1-17 17:41:53 | 显示全部楼层
void ADC_Init(){
P_SW2 |= 0x80;
  //代码
  P_SW2 &= 0x7f;
//代码
}

我想请教一下  为什么P_SW2要先打开 bit7 位后  在关闭bit7,可以不关闭吗??我不是太理解  P_SW2 &= 0x7f; 的实际意义

点评

一般用户使用(99%), 建议主函数 main入口(开始) , 就直接置位 P_SW2 |= 0x80; 然后不用管他(除非你用到片外扩展 XRAM).  详情 回复 发表于 2024-1-26 08:53
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-1-17 18:59:40 | 显示全部楼层
没必要关闭,我是建议不关闭

注意,是假定2次采样转换期间 【ADC_VREF+ = ADC_VCC = MCU_VCC】不变
===所以对外部采样转换一次,也要对内部ADC15接的信号源立即采样转换一次

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-1-26 08:53:20 | 显示全部楼层
Hons*** 发表于 2024-1-17 17:41
void ADC_Init(){
P_SW2 |= 0x80;
  //代码

一般用户使用(99%), 建议主函数 main入口(开始) , 就直接置位 P_SW2 |= 0x80;

然后不用管他(除非你用到片外扩展 XRAM).
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:441
  • 最近打卡:2025-05-02 09:05:39

45

主题

176

回帖

1735

积分

金牌会员

积分
1735
发表于 2024-4-4 22:04:17 | 显示全部楼层
LAO*** 发表于 2024-1-26 08:53
一般用户使用(99%), 建议主函数 main入口(开始) , 就直接置位 P_SW2 |= 0x80;

然后不用管他(除非你用到 ...

层主的意思是否就是我这样的配置:
void main()
{
    GPIO_set();                //预置所有I/O口全部为准双向口
    EAXSFR();                //允许访问扩展RAM区特殊功能寄存器( XFR)
********
EAXSFR();是官方头文件里定义好的,就是宏定义P_SW2 |= 0x80
而GPIO_set();是我自己在头文件里添加的宏定义,使用起来方便省事。

点评

估计会出错, 因为 你的 GPIO_set(); 函数, 可能会用到 XFR定义. 正确方法是上下两行对换一下, EAXSFR(); 永远放在首行, 保险.  详情 回复 发表于 2024-4-5 04:04
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-4-5 04:04:03 | 显示全部楼层
乐此*** 发表于 2024-4-4 22:04
层主的意思是否就是我这样的配置:
void main()
{

估计会出错, 因为 你的 GPIO_set(); 函数, 可能会用到 XFR定义.

正确方法是上下两行对换一下, EAXSFR(); 永远放在首行, 保险.

回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:441
  • 最近打卡:2025-05-02 09:05:39

45

主题

176

回帖

1735

积分

金牌会员

积分
1735
发表于 2024-4-5 12:30:07 | 显示全部楼层
LAO*** 发表于 2024-4-5 04:04
估计会出错, 因为 你的 GPIO_set(); 函数, 可能会用到 XFR定义.

正确方法是上下两行对换一下, EAXSFR(); ...

多谢指点!目前使用还没发现有问题,但以后就把顺序改过来用好了,谢了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:441
  • 最近打卡:2025-05-02 09:05:39

45

主题

176

回帖

1735

积分

金牌会员

积分
1735
发表于 2024-4-5 12:36:41 | 显示全部楼层
本帖最后由 乐此不疲 于 2024-4-5 12:49 编辑

在此也把端口宏定义分享给大家,虽然班门弄斧但用起来真心方便也就不敢藏私了,也请大神把关指正:

#define        GPIO_set() do{\
P0M0 = 0x00;\
P0M1 = 0x00;\
P1M0 = 0x00;\
P1M1 = 0x00;\
P2M0 = 0x00;\
P2M1 = 0x00;\
P3M0 = 0x00;\
P3M1 = 0x00;\
P4M0 = 0x00;\
P4M1 = 0x00;\
P5M0 = 0x00;\
P5M1 = 0x00;\
P6M0 = 0x00;\
P6M1 = 0x00;\
P7M0 = 0x00;\
P7M1 = 0x00;\
}while(0)



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-5-26 21:38:44 | 显示全部楼层
外部固定,就可以知到内部1.19V实际是多少/也可以校准,
内部校准固定后,也就可以反推外部了

每个MCU个体不一样,这个1.19V 是出厂时校准的,
可能 1.190V, 可能 1.191V, 可能 1.189V, 1.188V,
读出来的值是出厂时校准后的最优值,但不可能全是 1.190V,
只会是这附近


回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 09:08 , Processed in 0.164914 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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