ATMEGA328P拥有一个模拟比较器
网上资料非常少,官方也没有可以使用的库,但是芯片手册上有其使用的说明,现总结一下其使用方法。
理解其使用方法后,可以自己编写一个库,在这里只讲解通过寄存器使用模拟比较器的方法。
文章目录
1. 比较器正负输入
- 比较器正输入只有一个引脚AIN0,就是6号引脚;当然还可以使用内部基准电压源
- 比较器的负输入可以有多个引脚,AIN2(7号引脚)、ADC0、ADC1、ADC2······
2. ADCSRB
这个寄存器中只有第6位对比较器有用
结合上图
- 当ACME为0时AIN1为负输入
- 当ACME为1,且ADEN为0时可以选择ADC相关引脚为负输入
3. ADCSRA
这个寄存器主要是控制ADC采样方面的,其中第7位ADEN可以用来控制模拟比较器
当写入1使能ADC,写入0关闭ADC。
4. ADMUX
这个也是主要来控制ADC采样的,但在ACME置1、ADEN为0时,可以控制ADC引脚作为比较器的负输入。
以上即解释第一张图中所使用的寄存器
5. ACSR(模拟比较器控制与状态寄存器)
- ACD:写入1时,关闭比较器电源;但是当要更改ACD时,先将ACIE置0,否则将会触发比较器中断
- ACBG:控制比较器正输入;当为1时,使用内部基准电压作为正输入;当为0时,使用AIN0为模拟比较器正输入
- ACO:模拟比较器输出,会有1~2个时钟周期延迟
- ACI:这个东西没太搞懂有什么用······
- ACIE:使能模拟比较器中断(并且状态寄存器的I位被置1,稍后再说)
- ACIC:此位涉及到定时器,会有输入捕捉等功能,还没用到,以后补充。
- ACIS1、ACIS0:设置模拟比较器中断模式
ACIS1 | ACIS0 | 模式 |
---|---|---|
0 | 0 | 输出触发时比较器中断 |