第 10 章 模拟比较器和 ADC 接口模拟比较器和模数转换 ADC 是单片机内部最常见的两种支持模拟信号输入的功能接口。大部分 AVR 都具备这两种类型的接口。本章将以 ATmage16 芯片为例,介绍这两种模拟接口的原理和应用设计方法。10.1 模拟比较器ATmega16 的模拟比较器可以实现对两个输入端:正极 AIN0 和负极 AIN1(对应于ATmage16 的引脚 PB2、PB3)的模拟输入电压进行比较。当 AIN0 上的电压高于 AIN1 的电压时,模拟比较器输出 ACO 被设为“1”。比较器的输出还可以被设置作为定时计数器 1 输入捕获功能的触发信号。此外,比较器的输出可以触发一个独立的模拟比较器中断。用户可以选择使用比较器输出的上升沿、下降沿或事件触发作为模拟比较器中断的触发信号。比较器的方框图和周围电路如图 10-1 所示。图 10-1 模拟比较器的方框图10.1.1 与模拟比较器相关的寄存器和标志位与模拟比较器相关的寄存器是 SFIOR、ACSR。用户通过这两个寄存器的相关位实现对模拟比较器的设置和控制。1) 特别功能 IO 寄存器—SFIOR寄存器 SFIOR 中的第 3 位 ACME 为模拟比较器多路使能控制位。当该位为逻辑“1”,同时模数转换(ADC)功能被关闭(ADCSRA 寄存器中的 ADEN 使能位为“0”)时,允许使用 ADC 多路复用器选择 ADC 的模拟输入端口作为模拟比较器反向端的输入信号源。当该位为零时,AIN1 引脚的信号将加到模拟比较器反向端。2) 模拟比较器控制和状态寄存器—ACSRACSR 是模拟比较器主要的控制寄存器,其中各个位的作用如下:位 7—ACD:模拟比较器禁止当该位设为“1”时,提供给模拟比较器的电源关闭。该位可以在任何时候被置位,从而关闭模拟比较器。在 MCU 闲置模式,且无需将模拟比较器作为唤醒源的情况下,关闭模拟比较器可以减少电源的消耗。要改变 ACD 位的设置时,应该先将寄存器 ACSR 中的 ACIE位清零,把模拟比较器中断禁止掉。否则,在改变 ADC 位设置时会产生一个中断。位 6—ACBG:模拟比较器的能隙参考源选择当该位为“1”时,芯片内部一个固定的能隙(Bandgap)参考电源 1.22V 将代替 AIN0的输入,作为模拟比较器的正极输入端。当该位被清零时,AIN0 的输入仍然作为模拟比较器的正极输入端。位 5—ACO:模拟比较器输出模拟比较器的输出信号经过同步处理后直接与 ACO 相连。由于经过同步处理,ACO 与模拟比较器的输出之间,会有 1~2 个时钟的延时。位 4—ACI...