利用 IO 中断实现低功耗下使用 ADC 按键
1. 概述
IO 不够,几个按键挤到一根 ADC 线上。产品还要低功耗。休眠时 ADC 关着,这根线扫不了。
模拟看门狗能盯电压,ADC 子系统得挂着,电流下不来,这条丢掉。剩下 IO 中断:休眠只留一个 GPIO 看按键节点。键一按,电压掉到能打下降沿的位置,中断把人叫醒。起来再开 ADC,扫一眼是哪颗键。
一般 MCU 的 ADC 脚同时挂着数字输入。同一根线可以一边开着 ADC,一边配下降沿中断,不用再拆脚。
2. 原理图

2.4k 上拉到 3.3V,五颗键各自串电阻落地:0Ω、180Ω、390Ω、620Ω、820Ω。按下之后分压大约 0V、0.23V、0.46V、0.68V、0.84V。
这几档都低到能当低电平。随便按哪颗,ADC 节点都从 3.3V 掉下去,打出下降沿,IO 中断就能从休眠里把人拉起来。
醒来后 ADC 认的是这几个分压点隔得开。休眠认的是任意一颗键都能打出下降沿。键少、分压又压得够低,一根脚就够了。
3. 工作流程
休眠阶段 ADC 关掉,GPIO 盯着按键节点。下降沿中断进来之后再开 ADC,采一次电压,按区间认键。消个抖就行。
4. 独立中断信号
分压档位一多,相邻电压挤太近,ADC 容易认错键。换成双回路轻触开关(DPST)。

一颗键里两路独立常开触点。刀 A 进原来的 ADC 分压网络,电阻按认键来排,档位可以拉开。刀 B 全部并到一根中断线上,按下直接落地。休眠盯这根公共中断线,谁按都打下降沿;醒来再去 ADC 上看是哪颗。
多占一根 GPIO,分压能铺开整段量程,相邻档不容易糊在一起。