ATMEGA328P拥有一个模拟比较器
网上资料非常少,官方也没有可以使用的库,但是芯片手册上有其使用的说明,现总结一下其使用方法。
理解其使用方法后,可以自己编写一个库,在这里只讲解通过寄存器使用模拟比较器的方法。

文章目录

  • 1. 比较器正负输入
  • 2. ADCSRB
  • 3. ADCSRA
  • 4. ADMUX
  • 5. ACSR(模拟比较器控制与状态寄存器)
  • 6. SREG(AVR状态寄存器)
  • 7. 引脚初始化
  • 8. 示例
    • 8.1 示例1
    • 8.2 示例2

1. 比较器正负输入

  1. 比较器正输入只有一个引脚AIN0,就是6号引脚;当然还可以使用内部基准电压源
  2. 比较器的负输入可以有多个引脚,AIN2(7号引脚)、ADC0、ADC1、ADC2······

2. ADCSRB


这个寄存器中只有第6位对比较器有用
结合上图

  1. 当ACME为0时AIN1为负输入
  2. 当ACME为1,且ADEN为0时可以选择ADC相关引脚为负输入

3. ADCSRA


这个寄存器主要是控制ADC采样方面的,其中第7位ADEN可以用来控制模拟比较器
当写入1使能ADC,写入0关闭ADC。

4. ADMUX


这个也是主要来控制ADC采样的,但在ACME置1、ADEN为0时,可以控制ADC引脚作为比较器的负输入。

以上即解释第一张图中所使用的寄存器


5. ACSR(模拟比较器控制与状态寄存器)

  1. ACD:写入1时,关闭比较器电源;但是当要更改ACD时,先将ACIE置0,否则将会触发比较器中断
  2. ACBG:控制比较器正输入;当为1时,使用内部基准电压作为正输入;当为0时,使用AIN0为模拟比较器正输入
  3. ACO:模拟比较器输出,会有1~2个时钟周期延迟
  4. ACI:这个东西没太搞懂有什么用······
  5. ACIE:使能模拟比较器中断(并且状态寄存器的I位被置1,稍后再说)
  6. ACIC:此位涉及到定时器,会有输入捕捉等功能,还没用到,以后补充。
  7. ACIS1、ACIS0:设置模拟比较器中断模式
ACIS1 ACIS0 模式
0 0 输出触发时比较器中断
0 1 保留
1 0 输出下降沿中断
1 1 输出上升沿中断

6. SREG(AVR状态寄存器)


第7位(I),使能全局中断。

如果以上寄存器设置好后,还是不能使用比较器中断等功能,原因是因为,需要初始化引脚


7. 引脚初始化



具体怎么对应可以查看相关的引脚图
这里:
PORTD6对应AIN0(引脚6)
PORTD7对应AIN1(引脚7)
PORTC0对应ADC0(引脚A0)
PORTC1对应ADC1(引脚A1)
······

相关寄存器已经看完了,接下来就是示例

8. 示例

8.1 示例1

AIN0为正输入、ADC0为负输入,下降沿中断;当ADC0 > AIN0时触发中断。

void setup(){Serial.begin(115200);PORTD = _BV(PORTD6); // 初始化引脚6PORTC = _BV(PORTC0); // 初始化引脚ADC0ADCSRB = _BV(ACME);  // 设置ADC为负输入ADCSRA = 0;          // 关闭ADCSREG |= 1<<7;        // 启动全局中断ACSR = _BV(ACIE) | _BV(ACIS1); // 使能比较器中断以及设置中断类型}void loop(){}// 模拟比较器中断函数
ISR(ANALOG_COMP_vect){Serial.println("模拟比较器中断!");
}

8.2 示例2

内部基准电压为正输入,ADC2为负输入,上升沿中断;ADC2 < 1.1V时触发中断。

void setup(){Serial.begin(115200);PORTC = _BV(PORTC2); // 初始化ADC2引脚ADMUX = _BV(MUX1);   // 设置ADC2为负输入ADCSRB = _BV(ACME);  // 设置ADC为负输入ADCSRA = 0;          // 关闭ADCSREG |= 1<<7;        // 开启全局中断ACSR = _BV(ACBG) | _BV(ACIE) | _BV(ACIS1) | _BV(ACIS0); // 设置内部基准电压源为正输入、使能比较器中断、设置中断类型}void loop(){}// 模拟比较器中断函数
ISR(ANALOG_COMP_vect){Serial.println("模拟比较器中断!");
}

Arduino寄存器(模拟比较器)相关推荐

  1. Arduino 寄存器(ADC)

    说明:Arduino Nano(ATMEGA328P):10位ADC(0~1023) 附:Arduino Nano 内置温度测量(ADC8) 文章目录 1.ADC转换时间 2.转换过程(举例) 3.多 ...

  2. Arduino寄存器(PWM)

    说明:Arduino Nano(ATMEGA328P):2个8位计时器(Timer0.Timer2),1个16位计时器(Timer1). Timer0控制5.6:Timer1控制9.10:Timer2 ...

  3. arduino i2c 如何写16位寄存器_Arduino之我见

    Arduino是一款时尚流行的开源软件&硬件平台,其开发入门简单,是众多DIY玩家及创客的首选.目前,Arduino也开始进入了中小学的创客课程.然而在与很多玩家.学生或是创客老师交流的过程中 ...

  4. DSP TMS320F280049之模拟比较器CMPSS(寄存器版)

    F280049C是一款数模集成的DSP控制器,除了强大的数字处理能力外,还包含一部分的模拟电路,主要有比较器CMPSS.运放PGA.DAC.ADC.内部的比较器一般是结合DAC来使用,每个比较器模块包 ...

  5. 零成本学arduino——74hc595寄存器教程

    本文介绍如何用arduino控制74hc595 1.知识预览 对74hc595寄存器进行介绍 shiftOut()函数介绍 对控制程序进行介绍 2.仿真预览 点击74hc595开始仿真 3.74hc5 ...

  6. Arduino板上通过操作端口寄存器来进行控制

    端口寄存器允许在Arduino板上更低级和更快地操纵微控制器的i / o引脚.Arduino板上使用的芯片(ATmega8和ATmega168)有三个端口: B(数字引脚8到13) C(模拟输入引脚) ...

  7. arduino教程——PIND寄存器使用

    PIND介绍 arduino中使用Port操作 PORTD映射到Arduino数字引脚0到7 DDRD - 端口D数据方向寄存器 - 读/写 PORTD - 端口D数据寄存器 - 读/写 PIND - ...

  8. arduino i2c 如何写16位寄存器_arduino入门

    硬件:Arduino Uno是基于ATmega328P(数据表)的微控制器板.它具有14个数字输入/输出引脚(其中6个可用作PWM输出),6个模拟输入,工作电压5v,输入电压7-12v. 串行:0(R ...

  9. arduino i2c 如何写16位寄存器_树莓派3B开发Go语言(二)寄存器版本GPIO

    作者:爪爪熊 链接:https://www.jianshu.com/p/0495c0554a63 來源:简书 之前将go语言的运行环境给搭建起来了,但是没有开始真正的试试Go 语言操作树莓派硬件的效果 ...

最新文章

  1. java面试时候算法题多吗_java程序员面试中最容易被问到的18个算法题(附答案!)...
  2. 程序员的岗位方向和所需技能都有哪些?
  3. csh shell_shell编程(一):初始shell
  4. 使用WINS服务器实现跨网段名称注册解析和释放
  5. 6.6折票仅剩3天 | BDTC 2019全日程公布,哪些是你感兴趣的话题?
  6. Java BigInteger类| nextProbablePrime()方法与示例
  7. 仿无名云易支付首页模板
  8. 从RDS中获取binlog
  9. 毛骨悚然,亚马逊AI突然笑出声来
  10. 职涯成长的认知与突破
  11. 计算机科学与软件工程的关系
  12. 【2022最新Java面试宝典】—— 多线程面试(60道含答案)
  13. 20款英文LOGO字体
  14. 如何在互联网上寻找免费电子书?(其二)
  15. 正斜杠,又称左斜杠,符号是/;反斜杠,也称右斜杠,符号是\。
  16. 飞马间谍软件猖獗,苹果iOS系统被击穿
  17. android优酷视频黑屏,优酷视频打不开播放变黑屏的原因以及解决方法介绍
  18. UVA 1645 Count——dp
  19. 【转贴】对《高质量程序设计指南--C++/C第二版》的探讨
  20. OpenCV学习笔记-傅里叶变换

热门文章

  1. java如何将char转换成string_java中  如何将char类型转换成string 类型
  2. paper阅读笔记(ABSA)(LCF-BERT):LCF: A Local Context Focus Mechanism forAspect-Based Sentiment Classifica
  3. BS 476-7 常做的产品有哪些?纤维板适用这个标准吗?
  4. 周易算命生辰八字属相的确定
  5. 很多人嘲笑谷歌,这没什么好奇怪的。在娼妓云集的地方,贞洁的女子会受到诽谤和讥笑。
  6. 空气质量控制系统中的AT-AC1200和AT-CSE100、AT-CEL100的应用参数
  7. 西门子中国领导力白皮书
  8. mysql中autocommit,start transaction和begin/commit的异同
  9. win10 ubuntu双系统安装与卸载
  10. Android Opengl es 写字 笔记