原创 AVR学习日志(四十七)—学习使用模拟比较器

2010-11-2 12:13 4721 6 8 分类: MCU/ 嵌入式

      --学习使用模拟比较器 


        由于懒猫这几个月生活一直不稳定,所以AVR学习日志已有好长时间没有续写了,最近懒猫再翻看AVR时发现还有好多东东还没有尝试着去做,所以懒猫决定继续将AVR进行到底!好了,还是不费话了,开始今天的学习的吧。


        所谓模拟比较器就是模拟电平之间的比较,单片机的内部的比较器一般都很简单,没有分立元件组成的比较器精准度高,但是小东东也有大用途,可以用他来检测单片机的电压跌落,也可以比较从传感器采集过的模拟信号……正好ATmega8515内部有模拟比较器,所以懒猫决定来试一下这个功能。


      关于ATmega8515内部比较器由PB2(AIN0)与PB3(AIN1)口输入,模拟比较器对正极 AIN0 的值与负极 AIN1 的值进行比较。当 AIN0 上的电压比负极 AIN1上的电压要高时,模拟比较器的输出 ACO 即置位。比较器的输出可用来触发定时器/计数器 1 的输入捕捉功能。此外,比较器还可触发自己专有的、独立的中断。我们也可以自己选择比较器是以上升沿、下降沿还是交替变化的边沿来触发中断。关于这些可以参看寄存器ACSR.


下面给出程序:


/************************************************


//文件名称:Analog_Comparator.c


//功    能:学习使用单片机内部的模拟比较器


//作    者:懒猫爱飞


//建立日期:2010.11.02


//备    注:MCU-ATmega8515 开发环境-winavr100110


************************************************/


#include <avr/io.h>


#include <inttypes.h> //关于数据类型的一些定义


#include <stdint.h>    //同样是一些数据类型的定义


#include <avr/interrupt.h>


#include <util/delay.h>


 


#define LED_ON(N)  PORTC &= ~_BV(N)   /*第N个LED灯亮*/


#define LED_OFF(N) PORTC |= _BV(N)    /*第N个LED灯灭*/


 


/************************************************


//函数名称:void port_init(void)


//功    能:端口初始化


//入口参数:NULL


//出口参数:NULL


//备    注:NULL


************************************************/


void port_init(void)


{  


   PORTA = 0x00;


   DDRA  = 0x00;


 


   PORTB = 0x00; //关闭弱上拉,


   DDRB  = 0x00; //PB2,PB3(AIN0/AIN1)设置为输入


                 //PB3 AIN1 (Analog Comparator Negative Input)


                 //PB2 AIN0 (Analog Comparator Positive Input)


   PORTC = 0xff;


   DDRC  = 0xff; //LED灯l输出端口


 


}


/************************************************


//函数名称:int main(void)


//功    能:主程序


//入口参数:NULL


//出口参数:0


//备    注:NULL


************************************************/


int main(void)


{


         port_init();


 


         SFIOR |= _BV(PUD); //禁止内部上拉


         ACSR  |= _BV(ACIE); //允许模拟比较器是断


        


         sei();        


 


         while(1);


 


         return 0;


}


/************************************************


//函数名称:ISR(ANA_COMP_vect)


//功    能:模拟比较中断处理程序


//入口参数:中断向量入口地址 ANA_COMP_vect


//出口参数:NULL


//备    注:NULL


************************************************/


ISR(ANA_COMP_vect)


{


         if(ACSR & _BV(ACO)) //检测AC0位,判断AN0电压是否大于AN1电压


         {


                   LED_ON(0);


                   LED_OFF(1);


         }


         else


         {


                   LED_ON(1);


                   LED_OFF(0);


         }       


}


其测试电路图在附件中。


仿真说明:当AIN1低于AIN0时L1(绿灯亮),当AIN1高于AIN0时L2亮(黄灯亮)。


好了,今天就先到这吧,懒猫要继续别的功能模块了^_^


再喊一下口号,鼓励一下自己:


 


每天进步一点点,开心多一点^_^


 


 


 


 


 


 


 


 


 


 


 


 


 

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

xucun915_925777961 2010-11-2 14:17

嗯,嗯!将单片机进行到底,呵呵……

用户1584993 2010-11-2 13:30

又开始看到你的学习日志了,加油吧!
相关推荐阅读
xucun915_925777961 2013-04-28 11:31
毕业后的五年拉开大家差距的原因在哪里?【转】
  有人工作,有人继续上学,大家千万不要错过这篇文章,能看到这篇文章也是一种幸运,真的受益匪浅,对我有很大启迪,这篇文章将会改变我的一生,真的太好了,希望与有缘人分享,也希望对有缘人有所帮助!...
xucun915_925777961 2013-03-31 20:28
职场大牛精彩总结:职场上,如何做人做事做管理【转】(文/张子阳)
      大道至简,越是根源和基本的问题,道理实际上越简单。关于如何做人、做事、做管理的书很多,我看得不多,但是我觉得这些书更多是侧重技术和实现细节上的,而很少从人的思想和观念去讲。实际...
xucun915_925777961 2013-03-28 14:03
介绍几种优秀的UML工具
统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件密集系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言...
xucun915_925777961 2013-03-27 18:05
IAR EW FOR 8051 修改工程名称的方法
        近段时间一直在搞蓝牙4.0的开发任务,所以用到了IAR编译器,话说IAR编译器用途蛮广,可以编译MSP430,ARM,还有TI的51核芯片,当然,这要不同的版本,我现在用的是for...
xucun915_925777961 2013-03-26 16:40
Cortex-M3学习日志(八)-- TFT实验Part(a)
    自己用的LPC1768的开板带有一块2.4寸的TFT彩色液晶屏,虽然自己工作中还用不过显示屏,但是晚上闲着也是闲着,于是继续玩咱的LPC1768吧。 我的开发板上的液晶屏的用的是SPI接口,当...
xucun915_925777961 2013-03-25 20:48
说说那几款查看源代码的工具
说说那几款查看代码的工具 今天给大家介绍几款单片机工程师所喜欢的几款查看源代码的工具,这几款工具在懒猫的日常工作中可是帮了不少忙。 一、 Source Insight     Source Insig...
EE直播间
更多
我要评论
2
6
关闭 站长推荐上一条 /1 下一条