冷知识-你不知道的arduino第三个外部中断 库文件提供下载 原创
本帖最后由 mylife1213 于 2014-11-7 15:53 编辑今天给大家分享的是基于Atmega328P arduino的(UNO,duemilanove ,nano,mini)一个硬件(. 英文名叫"Analog Comparator" 翻译过来的意思就是模拟比较器,
下面这张图就是328P内建的模拟比较器架构图;
对应的引脚是arduino 的PIN D6 ,D7 .
比较器大家都比较熟悉,常用的比较器型号像LM393分正反馈与负反馈,328P片上集成的也是一样有正负反馈. D6是正反馈,D7是负反馈. D6正反馈可以通过寄存器操作与能隙基准源连接,D6引脚会被释放成普通引脚
模拟比较器可以配置中断源,下图是系统全部的中断源
ANALOG COMP就是模拟比较器的中断源,这次要用到的就是这个让我们可以配置第三个外部中断!
用到的原理是把D6正反馈通过寄存器配置到能隙基准源,D7负反馈作为中断引脚,如果D7的电压大于能隙基准源
那么比较器输出低电平,如果小于能隙基准源比较器输出高电平(因为D7是负反馈),比较器输出的电平变化是在
内部完成,不会通过引脚输出! 我们可以配置下图ACSR寄存器选择是上升沿中断还是下降沿中断!
原理就介绍到这里,熬夜写帖子有点困,下面就进行库文件的介绍,可能大多数朋友比较喜欢下面的环节,简单实用
晚上编写库的时候为了让大家比较好上手,函数基本和官方中断差不多,只是前面加了字母区别官方中断
#include<ACD.h>
int pin = 13;
volatile int state = LOW;
QUN M; //你要做的只是添加上这个
void setup()
{
pinMode(pin, OUTPUT);
M.attachInterrupt(blink, M_CHANGE); //格式是:M.attachInterrupt(blink, M_CHANGE);
//blink是要执行的函数,
// M_CHANGE 当引脚电平发生改变时,触发中断
// M_RISING 当引脚由低电平变为高电平时,触发中断
// M_FALLING 当引脚由高电平变为低电平时,触发中断
}
void loop()
{
digitalWrite(pin, state);
}
void blink()
{
state = !state;
}
使用模拟比较器中断库你只要添加QUN M; 然后格式是:M.attachInterrupt(blink, M_CHANGE); 和官方比少了中断端口!
D7就是中断端口, M_CHANGE M_RISINGM_FALLING 是选择上升沿还是下降沿或者电平变化产生中断 .
剩下的就明天在继续编辑
下面是库文件
如果要转载请注明链接地址,熬夜写贴不易啊
Thank you very much 讲解得很有用。定时器一直是个头痛的问题,在有的情况下用定时器,与之关联的接口往往无法正常工作。 leicheng 发表于 2014-12-26 17:06 static/image/common/back.gif
讲解得很有用。定时器一直是个头痛的问题,在有的情况下用定时器,与之关联的接口往往无法正常工作。
谢谢,共勉(字数补丁) 谢谢,讲的很清楚 很专业啊,新手向楼主学习了 感谢楼主的分析,不过楼主也是很懒的人啊,库文件没有改名字 这个不错,好好学习下。 有用,收藏 支持支持支持 很不错,Arduino又多了个中断可用,正好适合我的项目!
页:
[1]