avr单片机模拟比较器初始化配置及说明

发布者:快乐飞跃最新更新时间:2016-09-14 来源: eefocus关键字:avr  单片机  模拟比较器  初始化配置 手机看文章 扫描二维码
随时随地手机看文章
avr模拟比较器对正极 AIN0 的值与负极 AIN1 的值进行比较。当 AIN0 上的电压比负极 AIN1 

上的电压要高时,模拟比较器的输出 ACO 即置位。比较器的输出可用来触发定时器 / 计 
数器 1 的输入捕捉功能。此外,比较器还可触发自己专有的、独立的中断。用户可以选择 
比较器是以上升沿、下降沿还是交替变化的边沿来触发中断。 
/*

特殊功能 IO 寄存器- SFIOR

7       6       5       4       3       2      1      0 
ADTS2   ADTS1   ADTS0     –     ACME    PUD    PSR2   PSR10 

Bit 3 – ACME: 模拟比较器多路复用器使能

                                当此位为逻辑 "1” ,且ADC 处于关闭状态 (ADCSRA 寄存器的 ADEN 为 "0”) 时,ADC 多 
                               路复用器为模拟比较器选择负极输入。当此位为 "0” 时, AIN1 连接到比较器的负极输入 
                               端。 


模拟比较器控制和状态寄存器-ACSR 
                                     7     6     5     4     3     2      1      0

                                     ACD ACBG   ACO   ACI   ACIE ACIC ACIS1 ACIS0 
Bit 7 – ACD: 模拟比较器禁用 
                          ACD 置位时,模拟比较器的电源被切断。可以在任何时候设置此位来关掉模拟比较器。这 
                          可以减少器件工作模式及空闲模式下的功耗。改变 ACD 位时,必须清零 ACSR 寄存器的 
                          ACIE 位来禁止模拟比较器中断。否则 ACD 改变时可能会产生中断。

Bit 6 – ACBG: 选择模拟比较器的能隙基准源 
                          ACBG 置位后,模拟比较器的正极输入由能隙基准源所取代。否则,AIN0 连接到模拟比 
                          较器的正极输入。见 P40 “ 片内基准电压 ” 。

Bit 5 – ACO: 模拟比较器输出 
                          模拟比较器的输出经过同步后直接连到 ACO。同步机制引入了 1-2 个时钟周期的延时。

Bit 4 – ACI: 模拟比较器中断标志 
                          当比较器的输出事件触发了由ACIS1 及 ACIS0 定义的中断模式时,ACI 置位。如果 ACIE 
                          和 SREG 寄存器的全局中断标志 I 也置位,那么模拟比较器中断服务程序即得以执行,同 
                          时 ACI 被硬件清零。 ACI 也可以通过写 "1” 来清零。

Bit 3 – ACIE: 模拟比较器中断使能 
                          当 ACIE 位被置 "1” 且状态寄存器中的全局中断标志 I 也被置位时,模拟比较器中断被激 
                          活。否则中断被禁止。

Bit 2 – ACIC: 模拟比较器输入捕捉使能 
                          ACIC 置位后允许通过模拟比较器来触发T/C1 的输入捕捉功能。此时比较器的输出被直接 
                          连接到输入捕捉的前端逻辑,从而使得比较器可以利用 T/C1 输入捕捉中断逻辑的噪声抑 
                          制器及触发沿选择功能。 ACIC 为 "0” 时模拟比较器及输入捕捉功能之间没有任何联系。 
                          为了使比较器可以触发 T/C1 的输入捕捉中断,定时器中断屏蔽寄存器 TIMSK 的 TICIE1 
                          必须置位。

Bits 1, 0 – ACIS1, ACIS0: 模拟比较器中断模式选择 
                          这两位确定触发模拟比较器中断的事件。

ACIS1/ACIS0 设置

                            ACIS1     ACIS0   中断模式
                              0        0      比较器输出变化即可触发中断 
                              0        1      保留 
                              1         0     比较器输出的下降沿产生中断 
                              1         1     比较器输出的上升沿产生中断

                          需要改变 ACIS1/ACIS0 时,必须清零 ACSR 寄存器的中断使能位来禁止模拟比较器中 
                          断。否则有可能在改变这两位时产生中断。
        
        
模拟比较器多工输入          
可以选择 ADC7..0 之中的任意一个来代替模拟比较器的负极输入端。ADC 复用器可用来 
完成这个功能。当然,为了使用这个功能首先必须关掉 ADC。如果模拟比较器复用器使 
能位 (SFIOR 中的ACME) 被置位,且 ADC 也已经关掉 (ADCSRA 寄存器的ADEN 为 0) , 
则可以通过 ADMUX       寄存器的 MUX2..0 来选择替代模拟比较器负极输入的管脚, 
如果 ACME 清零或 ADEN 置位,则模拟比较器的负极输入为 AIN1。 

模拟比较器复用输入 
                                 ACME      ADEN       MUX2..0    模拟比较器负极输入 
                                   0         x          xxx      AIN1 
                                   1         1          xxx      AIN1 
                                   1         0          000      ADC0 
                                   1         0          001      ADC1 
                                   1         0          010      ADC2 
                                   1         0          011      ADC3 
                                   1         0          100      ADC4 
                                   1         0          101      ADC5 
                                   1         0          110      ADC6 
                                   1         0          111      ADC7 

*/
#include
#include
#pragma interrupt_handler ANA_COMP_inter:iv_ANA_COMP
#pragma interrupt_handler Timer1_CAPT:iv_TIMER1_CAPT 
unsigned int ANA_COMP_fun=0;
unsigned int T1_CAPT=0;
void T1_capt_init(void)
{
TCNT1=500;//可以赋值,也可以不用。默认是0
TCCR1A=0x00;   //普通端口操作
TCCR1B|=0X04;//TCCR1B=0X03;256分频.
TCCR1B|=0x80;//ICNC1:1使能噪声捕捉功能
TCCR1B|=1< TIMSK|=0x20; //T1事件捕捉中断使能
}


void ANA_COMP_init(unsigned char mode,unsigned char ANI1_select)
{
//SFIOR|=1< SFIOR&=~(1< ACSR|=1<


switch(mode)
{
case 0:ACSR&=~((1< case 2:ACSR|=1< case 3:ACSR|=(1< default :ACSR|=1< }
if(ANI1_select)//如果ANI1_select=0,默认的是模拟比较器的负极输入端
{
switch(ANI1_select)
{
case 1:SFIOR|=1< case 2:SFIOR|=1< case 3:SFIOR|=1< case 4:SFIOR|=1< case 5:SFIOR|=1< case 6:SFIOR|=1< case 7:SFIOR|=1< case 8:SFIOR|=1< default :break;
}

T1_capt_init();
// 如果要用到边沿触发功能,就用用到T/C1 的输入捕捉功能中的触发沿选择功能 
//如果不用边沿触发功能,也不用T/C1 的输入捕捉功能,一下两行不用,就屏蔽掉吧。
ACSR|=1< TIMSK|=1<
}


SREG|=0x80; //开放全局中断
}

void ANA_COMP_inter()
{
ANA_COMP_fun++;

}
void Timer1_CAPT()
{
T1_CAPT=ICR1;
}

关键字:avr  单片机  模拟比较器  初始化配置 引用地址:avr单片机模拟比较器初始化配置及说明

上一篇:hex的反汇编文件译码及说明(获得函数地址)
下一篇:avr单片机电源管理及其睡眠模式配置说明

推荐阅读最新更新时间:2024-03-16 15:10

C51单片机学习笔记(三)——按键对灯、蜂鸣器等器件的控制
1.独立按键的原理 一般的独立按键有四个脚,无论按键是否被按下,1和2总是相通的,3和4也是相通的。当按键按下时,1、2脚与3、4脚接通,按住不放则保持接通状态 按键通断过程的抖动:当按键按下时(释放时)输出的理想波形是标准的矩形波,但是,由于机械触点的弹性作用,闭合时电路不会马上稳定的接通,这中间会出现一连串的抖动,如图所示,抖动时间一般为5~10ms 按键的消抖:按键的抖动会造成一次按下被误认为多次按下,所以要进行消抖处理,一般分为硬件消抖和软件消抖,这里讨论软件消抖,方法是当单片机检测到按键闭合时,采用延时程序产生5~10ms的延时,等抖动消失后,再判断是否处于闭合状态,同理释放的时候,也要给延时。 按键给单片机
[单片机]
C51<font color='red'>单片机</font>学习笔记(三)——按键对灯、蜂鸣器等器件的控制
新型 tinyAVR® MCU助力嵌入式应用提高系统吞吐量和降低功耗
全球领先的整合单片机、混合信号、模拟器件和闪存专利解决方案的供应商——Microchip Technology Inc.(美国微芯科技公司)近日再次扩展旗下AVR® 单片机(MCU)产品线,推出三个新的 tinyAVR® MCU系列。ATtiny1617系列MCU新器件的问世使得带有独立于内核的外设(CIP)的AVR家族进一步壮大,有助于提高系统吞吐量和降低总功耗。作为新一代tinyAVR MCU,新器件进一步扩展存储容量,增加了16 KB闪存新选择,并与近期发布的ATtiny817系列器件的引脚和代码互相兼容。此外,该系列所有器件均由Atmel START提供支持,后者是一款在线工具,专用于嵌入式软件项目的直观化、图形化配置。
[单片机]
新型 tinyAVR® <font color='red'>MCU</font>助力嵌入式应用提高系统吞吐量和降低功耗
2. avr定时器/计数器0 --TC0 --快速PWM输出
PWM:脉冲宽度调制,图中T为脉冲周期,t为高电平时间,t与T的比值t/T称为占空比,脉宽调制指的是调整t的大小,即改变脉冲的占空比 ,占空比值越大,输出的电压越高。改变占空比就改变输出的电压,常用于实现D/A,调节电压或电流,改变电动机的转速等。 快速PWM模式:它的计数方式是TCNT0由0开始计数到255式,计数加1返回到0,然后继续加1计数,相对于相位PWM修正模式(由0计数到255,再从255计数到0),只有一个斜坡,因此PWM输出频率高。在快速PWM模式下,计数器的最大值决定了PWM的频率,而比较寄存器OCR0决定了占空比的大小。T/C0是8位计数器, 输出PWM的频率=系统时钟频率/(分频系数*255) 。 P
[单片机]
破解台湾MCU大厂的经营之道:8+32的互补新哲学
每年的MCU发表,都是盛群半导体的年度重头戏。今年盛群也以智能生活之相关控制及通讯应用为应用主轴。且继2015年推出ARM Cortex M0+的32位元Flash MCU,展现出效能、功耗、价格之最佳组合之后,今年也顺势拓展更多32位元MCU的产品系列,其中ARM Cortex M0+的32位元Flash MCU已拥有96MHz的高速与效能,目标将应用于智慧家居、物联网及穿戴式设备等。 8+32让应用更多元 面对MCU发展的脚步,盛群半导体总经理高国栋指出,8位元的基础都已经打稳根基,这些基础更不会消失,而M0+的32位元则是延伸了既有的8位元应用范围。当8位元MCU的功能与特性,没办法满足客户的时候,就会改用32位元。因此,简
[手机便携]
delphi与51单片机串行通信
说明:可能前面几次首发不太准确 //delphi源码 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, SPComm, StdCtrls; type TFCOMM = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Memo1: TMemo; Comm1: TComm; procedure FormShow(Se
[单片机]
基于AT89C2051单片机制作的厨房定时器
该制作以5分钟为一个计时单位,最多计时1小时,3V电池做电源,有蜂鸣器报警,工作时功耗为6mA左右(使用AT89C2051),可以使用3V钮扣电池,具有自动关机功能,不运行时耗电量可以忽略不计,单键操作,简单方便。   电路图   VT1为PNP的9012,当电路不工作时VT1的B极由R4得到高电平,VT1截止,AT89C2051无法从VT1的E极得到电源。当SW1按下时,VT1的B极通过VD2和SB1接地,由高电平转为低电平,VT1导通。此时AT89C2051得电,同时通过C1,R4复位。复位成功后P3.7升为高电平,使得VT2导通,从而使VT1的B极保持低电平状态,这时就算松开SB1,VT1也不会截止而导致MCU失
[工业控制]
基于AT89C2051<font color='red'>单片机</font>制作的厨房定时器
AVR-GCC:关于ISR()不能更新变量
一个AVR与串口通信的基本程序,部分代码如下: unsigned int flag = 0; …… ISR(USART_RXC_vect) { flag = 1; } …… int main(void) { while(0 == flag) { code…… } } 程序在Winavr环境下编译成功,烧写运行后发现,程序并没有按照我预想的那样,出现了这样的现象:程序一直在while里面没有出来,flag的值并没有变化。但是发现,程序确实进入了中断,但是却为什么不能改变变量呢。真是有鬼啦! 一番周折之后,终于在国外的一个网站上找到了相似的问题。于是豁然开朗。 flag变量被编译器在优化的时候认为,它在
[单片机]
C8051F350单片机实现气体流量计检测仪的设计
气体流量计是较为常用的仪表设备。钟罩式气体流量标准装置是以空气作为介质,对气体流量计进行检定、校准和检测的计量标准装置。主要适用于速度式、容积式和差压式等气体流量计的检定、校准和型式评价工作,也可用于气体流量测量的研究工作。本文基于C8051F350单片机,改造现有的钟罩装置,设计一种气体流量计检测仪。 气体流量计检定技术概述 目前,气体流量计的检定方法广义上可分为直接测量和间接测量两种。 直接测量法的是用实际流体进行计量检定,其具体定义为用标准装置(标准流量计或计量器具)与被测流量计串联,通过比较两者测得流体的累积流量值,得出被测流量计测量误差的方法。实流检测法具有检定环境与工况环境一致、流量值准确可靠和真实反映被测流量计计
[单片机]
C8051F350<font color='red'>单片机</font>实现气体流量计检测仪的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved