You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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命令行烧写正确熔丝示例:
    avrdude -c usbtiny -p t85 -U lfuse:w:0xe2:m -U hfuse:w:0xdd:m -U efuse:w:0xff:m
    
    注:0xdd的hfuse配置包含RSTDISBL,同时保留ADC参考源的可配置性

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 04:48:20