ATtiny85禁用复位后仅ADC3读数正常,其余ADC异常求助
ATtiny85禁用复位后ADC0/1/2读数异常排查方案
核心排查方向:复位引脚复用后的ADC配置冲突
ATtiny85禁用复位功能时,复位引脚(PB5)会被复用为ADC5,这个操作会连带影响ADC0-2的配置逻辑,尤其是CodeVision的默认熔丝或初始化代码可能未适配复用后的引脚映射与参考源设置。
1. 检查熔丝位配置
禁用复位(RSTDISBL熔丝)后,必须确认以下熔丝是否正确设置:
- 禁止误烧写
SELFPRGEN熔丝,该选项会破坏ADC参考电压的稳定性 - 明确ADC参考源配置:CodeVision中需手动指定为
VCC或内部1.1V,禁用复位后默认参考源可能被强制切换,导致ADC0-2采样基准异常 - 可用avrdude命令行烧写正确熔丝示例:
注:0xdd的hfuse配置包含RSTDISBL,同时保留ADC参考源的可配置性avrdude -c usbtiny -p t85 -U lfuse:w:0xe2:m -U hfuse:w:0xdd:m -U efuse:w:0xff:m
2. 修正CodeVision的ADC初始化代码
CodeVision默认ADC初始化可能未适配复位禁用后的引脚映射,需手动修正寄存器配置:
- 强制锁定ADC参考源,在初始化代码中添加:
// 设置参考源为VCC(若用内部1.1V则改为(1<<REFS1)|(1<<REFS0)) ADMUX = (1<<REFS0); // 使能ADC,设置128分频(匹配ATtiny85时钟频率) ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); - 读取ADC时明确指定通道,避免自动映射错误:
调用时直接传入uint16_t read_adc(uint8_t channel) { // 保留参考源配置,仅切换通道 ADMUX = (ADMUX & 0xF0) | (channel & 0x0F); ADCSRA |= (1<<ADSC); // 启动转换 while(ADCSRA & (1<<ADSC)); // 等待转换完成 return ADC; }0(ADC0)、1(ADC1)、2(ADC2),不要依赖CodeVision自带的通道宏定义
3. 排查硬件层面的干扰与引脚映射
- 复位禁用后,PB5引脚若未使用需悬空或接下拉电阻,避免浮空噪声干扰ADC0-2采样
- 确认电位器的接线:ADC0对应PB0、ADC1对应PB1、ADC2对应PB2,不要与PB5(复用ADC5)混淆
- 电位器的电源、地需与ATtiny85的VCC/GND共地,布线尽量缩短,减少信号干扰
内容的提问来源于stack exchange,提问作者Dean Hill
相关产品推荐
相关产品推荐

