AVR模拟比较器使用方法

合集下载

AVR教程11

AVR教程11

A VR教程11试图降低AVR 操纵系统的功耗时需要考虑几个问题。

通常来说,要尽可能利用睡眠模式,同时使尽可能少的模块继续工作。

不需要的功能务必禁止。

下面的模块需要特殊考虑以达到尽可能低的功耗。

模数转换器使能时, ADC 在睡眠模式下继续工作。

为了降低功耗,在进入睡眠模式之前需要禁止ADC。

重新启动后的第一次转换为扩展的转换。

具体请参照P192“模数转换器”。

模拟比较器在空闲模式时,假如没有使用模拟比较器,能够将其关闭。

在ADC 噪声抑制模式下也是如此。

在其他睡眠模式模拟比较器是自动关闭的。

假如模拟比较器使用了内部电压基准源,则不论在什么睡眠模式下都需要关闭它。

否则内部电压基准源将一直使能。

请参见P189“模拟比较器”以熟悉如何配置模拟比较器。

掉电检测BOD假如系统没有利用掉电检测器BOD,这个模块也能够关闭。

假如熔丝位BODEN 被编程,从而使能了BOD 功能,它将在各类休眠模式下继续工作。

在深层次的休眠模式下,这个电流将占总电流的很大比重。

请参看P38“掉电检测”以熟悉如何配置BOD。

片内基准电压使用BOD、模拟比较器与ADC 时可能需要内部电压基准源。

若这些模块都禁止了,则基准源也能够禁止。

重新使能后用户务必等待基准源稳固之后才能够使用它。

假如基准源在休眠过程中是使能的,其输出立即能够使用。

请参见P40“片内基准电压”以熟悉基准源启动时间的细节。

看门狗定时器假如系统无需利用看门狗,这个模块也能够关闭。

若使能,则在任何休眠模式下都持续工作,从而消耗电流。

在深层次的睡眠模式下,这个电流将占总电流的很大比重。

请参看P40“看门狗定时器”以熟悉如何配置看门狗定时器。

端口引脚进入休眠模式时,所有的端口引脚都应该配置为只消耗最小的功耗。

最重要的是避免驱动电阻性负载。

在休眠模式下I/O 时钟clkI/O 与ADC 时钟clkADC 都被停止了,输入缓冲器也禁止了,从而保证输入电路不可能消耗电流。

在某些情况下输入逻辑是使能的,用来检测唤醒条件。

AVRJTAGICE仿真器使用说明

AVRJTAGICE仿真器使用说明

AVRJTAGICE仿真器使用说明
首先,我们需要准备一台计算机和AVR JTAG ICE 仿真器。

将仿真器
插入计算机的USB接口,并确保计算机已安装了AVR Studio软件,这是
一款用于AVR 微控制器开发的集成开发环境(IDE)。

接下来,我们将目标设备与AVRJTAGICE仿真器连接起来。

首先,在
目标设备上找到JTAG接口的引脚,通常为4个或5个引脚,并将仿真器
的JTAG线连接到目标设备的JTAG接口上。

然后,将仿真器的USB线连接
到计算机的USB接口上。

现在,我们打开AVR Studio软件,并创建一个新的项目。

选择正确
的目标设备,并确保使用JTAG作为调试接口。

AVR Studio会自动检测到
连接的AVR JTAG ICE 仿真器,并在界面上显示连接状态。

在仿真调试模式下,我们可以通过设置断点、单步执行、查看变量值
等方式进行调试。

AVR Studio提供了丰富的调试功能,如查看寄存器、
查看存储器、查看端口状态等。

我们可以根据需要使用这些功能进行调试,以发现和修复程序中的错误。

在进行仿真调试时,还可以使用"Watch"功能监视变量的值。

通过添
加变量到监视列表中,我们可以随时查看变量的当前值,并在程序执行过
程中观察变量的变化情况。

当调试完成后,我们可以通过点击"Stop Debugging"按钮退出仿真调
试模式。

在退出之前,我们可以选择保存当前的仿真调试结果,以便日后
查看和分析。

马伟力AVR笔记:六、模拟比较器和ADC实验

马伟力AVR笔记:六、模拟比较器和ADC实验

A VR学习笔记六、模拟比较器和ADC实验-------基于LT_Mini_M166.1 模拟比较器实验6.1.1 实例功能模拟比较器和模数转换ADC是单片机内部最常见的两种支持模拟信号输入的功能接口。

大部分AVR都具备这两种类型的接口。

本实例将以ATmage16芯片为例,介绍模拟比较器的使用方法,在下一个实例中介绍模数转换ADC。

使用模拟比较器可以实现单片机系统电源电压的检测,更巧妙的应用是利用模拟比较器和一些简单的外围电路,设计简单的模数转换ADC。

本实例实现利用模拟比较器比较某一点电压与内部模拟比较器参考电压的高低。

共有3个功能模块,分别描述如下:●单片机系统:使用ATmega16单片机的模拟比较器比较某一点的电压与参考电压的关系。

●外围电路:利用电阻设计的分压电路。

●软件程序:熟悉掌握ATmega16单片机的模拟比较器的使用。

通过本实例的学习,掌握相关电路设计,并掌握以下知识点:●了解单片机的模拟比较器。

●了解单片机的模拟比较器的使用。

●掌握单片机模拟比较器的编程。

6.1.2、器件和原理1、模拟比较器的介绍ATmega16的模拟比较器可以实现对两个输入端:正极AIN0和负极AIN1(分别对应于ATmage16的引脚PB2、PB3)的模拟输入电压进行比较。

当AIN0上的电压高于AIN1的电压时,模拟比较器输出ACO被设为“1”。

比较器的输出还可以被设置作为定时计数器1输入捕获功能的触发信号。

此外,比较器的输出可以触发一个独立的模拟比较器中断。

用户可以选择使用比较器输出的上升沿、下降沿或事件触发作为模拟比较器中断的触发信号。

2、与模拟比较器相关的寄存器与模拟比较器相关的寄存器是SFIOR、ACSR。

用户通过这两个寄存器的相关位实现对模拟比较器的设置和控制。

1)特殊功能IO寄存器—SFIOR时模数转换(ADC)功能被关闭(ADCSRA寄存器中的ADEN使能位为“0”)时,允许使用ADC 多路复用器选择ADC的模拟输入端口作为模拟比较器反向端的输入信号源。

如何正确使用电子电路中的比较器

如何正确使用电子电路中的比较器

如何正确使用电子电路中的比较器电子电路中的比较器是一个重要的元件,用于比较两个电压信号的大小,并输出相应的电平信号。

它广泛应用于各种电子设备中,如自动控制系统、测量仪器、传感器等。

本文将介绍如何正确使用电子电路中的比较器,包括比较器的基本原理、连接方法以及一些注意事项。

一、比较器的基本原理比较器是一种特殊的集成电路,它有两个输入端和一个输出端。

其中一个输入端称为正输入端,另一个输入端称为负输入端。

比较器通过比较这两个输入端的电压信号大小,决定输出端的电平信号。

比较器通常有两种基本工作模式:开环比较和闭环比较。

在开环比较中,输出端直接与输入端相连,通过电压比较来决定输出电平;而在闭环比较中,输出信号通过一个反馈网络与输入端相连,形成一个反馈回路,从而实现更加精确的比较和控制。

二、比较器的连接方法正确的连接比较器对于实现预期功能至关重要。

下面是常见的几种连接方法:1. 单电源连接:将比较器的正输入端连接到一个参考电压源,负输入端连接到待比较的信号源。

输出端连接到负载电阻或其他电路中。

2. 双电源连接:正输入端和负输入端分别连接到待比较的信号源,输出端同样连接到负载电阻或其他电路中。

这种连接方式适用于需要比较两个信号之间的差异。

3. 开关比较器:比较器也可以用作开关,通过控制输入信号的电平来切换输出。

通过连接额外的控制电路,可以实现对输出状态的控制。

三、使用比较器的注意事项在正确使用比较器时,还需要注意以下几点:1. 输入电压范围:比较器通常有一个工作电压范围,超过该范围可能造成输出的不准确或损坏。

因此,在使用之前,应仔细查阅比较器的规格书,确保输入电压在允许范围内。

2. 输入偏置电流:比较器的输入端会引入一个偏置电流,这可能对某些应用有影响。

在选择比较器时,需要考虑偏置电流的数值,以确保其在具体应用中不会引发问题。

3. 输出电流:比较器的输出端通常只能提供较小的电流。

如果需要控制较大的负载,可以通过连接一个缓冲放大器或驱动器来实现。

比较器指令操作方法

比较器指令操作方法

比较器指令操作方法比较器指令是计算机指令的一种类型,用于实现比较操作。

比较操作是计算机处理中常见且重要的操作之一,常用于判断条件、排序和查找等算法中。

比较器指令可用于比较两个数据的大小、相等性和关系,并根据比较结果设置相应的标志位或执行相应的分支操作。

下面是关于比较器指令的一些常见操作方法。

1. 比较数值大小:比较器指令可用于比较两个数值的大小。

常见的比较器指令包括CMP (Compare)、CMPS(Compare String)和CMPXCHG(Compare and Exchange)等。

使用这些指令时,需要将要比较的两个数值加载到寄存器中,然后执行比较操作,并根据比较结果设置相应的标志位。

2. 比较字符串:比较器指令还可用于比较两个字符串的大小。

CMPS指令可以用于比较两个字符串在内存中的内容。

它将比较源字符串和目标字符串中相同位置的字符,并根据比较结果设置标志位。

3. 比较条件跳转:比较器指令常用于实现条件跳转操作。

根据比较结果,可以使用JMP(Jump)、JE(Jump if Equal)、JNE(Jump if Not Equal)、JG(Jump if Greater)、JGE (Jump if Greater or Equal)、JL(Jump if Less)、JLE(Jump if Less or Equal)等指令实现条件跳转。

这些指令可以根据标志位的值来判断是否满足条件,并执行相应的跳转操作。

4. 比较并交换:比较器指令还可以实现比较并交换操作。

CMPXCHG指令可以用于比较寄存器中的值和内存中的值,并根据比较结果进行交换操作。

使用CMPXCHG指令时,可以设置标志位来表示比较结果,然后根据标志位的值决定是否进行交换。

5. 比较多个数值:在某些情况下,需要比较多个数值的大小。

这时可以使用多个比较器指令来实现。

比如可以使用多个CMP指令,将要比较的数值加载到不同的寄存器中,然后依次进行比较操作。

如何正确使用比较器实现电压比较

如何正确使用比较器实现电压比较

如何正确使用比较器实现电压比较比较器是一种常用的电子元件,可用于比较电压大小,并将结果以数字信号的形式输出。

在电路设计和控制系统中,正确使用比较器可以实现电压比较的功能,为我们提供准确的判断和控制依据。

本文将介绍如何正确使用比较器实现电压比较,并提供一些实际应用的案例。

1. 比较器基本原理比较器是一种可将输入电压与参考电压进行比较,并输出高低电平信号的电子元件。

一般而言,比较器有一个非反馈输入端和一个反馈输入端,通过比较两个输入端的电压大小,输出端将产生相应的电平信号。

当非反馈输入电压大于反馈输入电压时,输出端产生高电平信号;当反馈输入电压大于非反馈输入电压时,输出端产生低电平信号。

2. 使用比较器实现电压比较要正确使用比较器实现电压比较,需注意以下几个关键要点:2.1 选取合适的比较器在选择比较器时,需根据应用的具体要求来确定哪种类型的比较器最适合。

常见的比较器有开关型比较器和放大型比较器两种。

开关型比较器速度快,但精度相对较低,适用于一些简单的比较应用;放大型比较器精度高,但速度较慢,适用于较为复杂的比较和控制任务。

2.2 设置参考电压比较器需要一个参考电压来进行电压比较。

我们可以通过外部电阻分压,或使用内置的参考电压源来设置合适的参考电压。

根据应用需要,选择合适的参考电压值,并正确连接至比较器的反馈输入端。

2.3 连接输入信号将需要进行比较的电压信号连接至比较器的非反馈输入端。

注意,输入信号的电压范围应在比较器的工作电压范围之内,避免损坏比较器。

2.4 设置输出电平根据应用的需要,合理设置比较器的输出电平。

一般可通过连接一个电阻和电源,将输出引脚连接至所需的电平,用于后续的判断和控制。

3. 比较器实际应用案例比较器在实际应用中有着广泛的用途,以下是两个常见的比较器应用案例:3.1 温度控制系统比较器可用于温度控制系统中的温度检测和控制。

通过将传感器测得的温度信号与预设的温度阈值进行比较,当温度超过或低于设定值时,比较器输出相应的控制信号,触发温度控制装置进行相应的操作,以实现温度的控制和调节。

avr模拟比较器的使用

avr模拟比较器的使用

模拟比较器对正极AIN0的值与负极AIN1的值进行比较。

当AIN0上的电压比负极AIN1上的电压要高时,模拟比较器的输出ACO即置位。

比较器的输出可用来触发定时器/ 计数器 1 的输入捕捉功能。

此外,比较器还可触发自己专有的、独立的中断。

用户可以选择比较器是以上升沿、下降沿还是交替变化的边沿来触发中断。

模拟比较器框图特殊功能IO寄存器-SFIORBit3–ACME: 模拟比较器多路复用器使能当此位为逻辑"1”,且ADC处于关闭状态(ADCSRA寄存器的ADEN 为"0”)时,ADC多路复用器为模拟比较器选择负极输入。

当此位为"0”时,AIN1连接到比较器的负极输入端。

更详细描述的请参见“模拟比较器多工输入”。

模拟比较器控制和状态寄存器-ACSRBit7–ACD: 模拟比较器禁用ACD置位时,模拟比较器的电源被切断。

可以在任何时候设置此位来关掉模拟比较器。

这可以减少器件工作模式及空闲模式下的功耗。

改变ACD位时,必须清零ACSR 寄存器的ACIE 位来禁止模拟比较器中断。

否则ACD改变时可能会产生中断。

Bit 6–ACBG: 选择模拟比较器的能隙基准源ACBG 置位后,模拟比较器的正极输入由能隙基准源所取代。

否则,AIN0连接到模拟比较器的正极输入。

见P40 “片内基准电压”。

Bit5–ACO: 模拟比较器输出模拟比较器的输出经过同步后直接连到ACO。

同步机制引入了1 -2 个时钟周期的延时。

Bit4–ACI: 模拟比较器中断标志当比较器的输出事件触发了由ACIS1 及ACIS0 定义的中断模式时,ACI 置位。

如果ACIE和SREG 寄存器的全局中断标志I 也置位,那么模拟比较器中断服务程序即得以执行,同时ACI 被硬件清零。

ACI 也可以通过写"1”来清零。

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

AVR-仿真器使用说明

AVR-仿真器使用说明

感谢您选择AVR-JTAGICE调试器,该仿真器使用USB转串口与主控MCU进行通信,使用前请使用本店的驱动程序,并按要求完成驱动程序的安装。

(安装仿真器驱动,在安装驱动时电脑不要连接仿真器,等安装完了以后再连接仿真器,不然要重新安装仿真器驱动,而且重新安装要先删除驱动,然后再重新启动电脑,再安装。

)仿真器在每次上电时LED会闪烁几秒钟,此时是等待进入升级模式,如不需要升级请等待几秒钟待LED熄来后即可正常使用。

程序调试:程序编译完后选择Debug菜单下的Start Debugging进入调试,调试器将把编译好的程序下载到目标芯片中进行仿真,该过程视实际程序的大小需要不同的时间。

以下是Debug菜单的简要说明(摘自OURAVR)Auto Step自动执行它能重复执行指令。

如果当前处于source方式时(即C语言窗口显示方式),一条新的指令将被执行。

如果disassembly方式(即显示为汇编指令方式),一条汇编指令会被执行。

每条指令被执行后,窗口听所有信息会更新。

每条指令的执行延时,可以在debug option里面选择。

当用户按下停止或有断点(breakpoint)时,将停止自动执行。

Step Into 单步执行仅执行一条指令。

如果当前处于source方式时(即C语言窗口显示方式),一条新的指令将被执行。

如果处理disassembly方式(即显示为汇编指令方式),一条汇编指令会被执行。

每条指令被执行后,窗口的所有信息会更新。

Step Over仅执行一条指令。

如果这条指令包含或调用了函数或子程序,也会执行完这个函数或子程序。

如果存在断点,会停止执行。

执行完成,信息会在窗口里面显示。

Step OutStep Out 一直会执行到当前的程序结束为止。

如果存在断点,会停止执行,当在程序的开始位置Step Out动作,程序为一直执行到结束,除非是在存在断点或用户手工中断它运行结束后,所有信息会在窗口显示。

avr教程11.doc

avr教程11.doc

ATmega16 减少功耗的方法试图降低AVR 控制系统的功耗时需要考虑几个问题。

一般来说,要尽可能利用睡眠模式,并且使尽可能少的模块继续工作。

不需要的功能必须禁止。

下面的模块需要特殊考虑以达到尽可能低的功耗。

模数转换器使能时, ADC 在睡眠模式下继续工作。

为了降低功耗,在进入睡眠模式之前需要禁止ADC。

重新启动后的第一次转换为扩展的转换。

具体请参照P192“模数转换器”。

模拟比较器在空闲模式时,如果没有使用模拟比较器,可以将其关闭。

在ADC 噪声抑制模式下也是如此。

在其他睡眠模式模拟比较器是自动关闭的。

如果模拟比较器使用了内部电压基准源,则不论在什么睡眠模式下都需要关闭它。

否则内部电压基准源将一直使能。

请参见P189“模拟比较器”以了解如何配置模拟比较器。

掉电检测BOD如果系统没有利用掉电检测器BOD,这个模块也可以关闭。

如果熔丝位BODEN 被编程,从而使能了BOD 功能,它将在各种休眠模式下继续工作。

在深层次的休眠模式下,这个电流将占总电流的很大比重。

请参看P38“掉电检测”以了解如何配置BOD。

片内基准电压使用BOD、模拟比较器和ADC 时可能需要内部电压基准源。

若这些模块都禁止了,则基准源也可以禁止。

重新使能后用户必须等待基准源稳定之后才可以使用它。

如果基准源在休眠过程中是使能的,其输出立即可以使用。

请参见P40“片内基准电压”以了解基准源启动时间的细节。

看门狗定时器如果系统无需利用看门狗,这个模块也可以关闭。

若使能,则在任何休眠模式下都持续工作,从而消耗电流。

在深层次的睡眠模式下,这个电流将占总电流的很大比重。

请参看P40“看门狗定时器”以了解如何配置看门狗定时器。

端口引脚进入休眠模式时,所有的端口引脚都应该配置为只消耗最小的功耗。

最重要的是避免驱动电阻性负载。

在休眠模式下I/O 时钟clkI/O 和ADC 时钟clkADC 都被停止了,输入缓冲器也禁止了,从而保证输入电路不会消耗电流。

AVR的操作步骤和应用

AVR的操作步骤和应用

动手学A VR单片机一、AVR单片机家族概述1.1 AVR单片机家族单片机概述AVR单片机系列齐全,可适用于各种不同场合的要求。

AVR单片机主要包括ATTINY、AT90、ATME GA这三大系列。

低档Tiny系列AVR单片机: 主要有Tiny11/12/13/15/26/28等;ATTINY系列最简单、功能最弱。

适用于比较低档的玩具、仪器仪表和简单的控制系统。

中档AT90S系列AVR 单片机: 主要有AT90S1200/2313/8515/8535等;目前AT90系列正在停产或转型到Mega系列。

高档ATmega系列AVR单片机: 主要有两个系列:ATmega8/16/32/64/128系列(存储容量为8/16/32/ 64/128 KB)、ATmega48/88/168系列。

ATmega系列使用了更加先进、可靠的制造工艺,高中低档齐全,正在逐步取代AT90系列的产品。

AVR单片机还根据不同的应用推出了各具特色的单片机:如汽车类AVR、CAN总线AVR、智能电池A VR、LCD(液晶显示)AVR、USB总线AVR、灯光专用AVR、Z-Link AVR、微型AVR等9大类型,这些单片机几乎涵盖了8位单片机的所有应用领域。

1.2 AVR单片机的型号与编号AVR单片机型号众多,基本上每种型号都有不同用途,每个系列AVR单片机芯片上都有不同的编号;如何根据芯片上的编号来识别呢?我们以下面这个编号为例来进行说明:ATmega8L-8PI1.AT表示该单片机是ATMEL公司的产品;2.mega表示该单片机为ATmega系列的单片机;3.数字8表示mega系列型号为8的单片机,同时指名了该型号单片机内部flash容量位8KB(8K字节)。

4.字母L表示该单片机为低功耗类型的单片机,同理如果没有L,则表示该单片机为普通类型的单片机;5.“-”后面的数字8表示该芯片允许的最大时钟频率为8MHz,如果是16则表示允许最大时钟频率为16M Hz;6.字母P表示该单片机的封装形式,P是DIP封装(双列直插),A表示有引脚扁平封装(即贴片封装),M表示无引脚扁平封装(对于个人学习,很少使用这种封装)。

AVR 二和一仿真器编程器系统使用说明: 1、 请

AVR 二和一仿真器编程器系统使用说明: 1、 请

A VR二和一仿真器/编程器系统使用说明:1、请正确使用JTAG口和ISP口,具体位置参考下面照片,左边是STK500ISP接口,右边是JTAG ICE仿真器接口,千万不要插错否则极有可能损坏设备,因为AVR的JTAG口和ISP口相反正好有可能造成电源接地。

2、系统不接目标板时,通讯系统和STK500连接,也就是说使用仿真器时必须接目标板,而且目标板要单独供电(也可以由仿真器供电,需打开设备外壳设定),使用STK500时,不能连接JTAG口的线,否则系统自动连机JTAG,也就是说JTAG的通讯优先级高于STK500。

3、JTAG和STK500的连线排列顺序请参考我们的使用手册或ATMEL的官方文档,二者完全兼容。

4、上电顺序为:先把仿真器和PC机连接,系统会自动识别出一个虚拟串口COM3或COM4,根据您电脑的物理串口数量来定。

当然在这之前要安装设备USB驱动程序,该程序在我们的随机光盘中有,目录名为:“仿真器驱动”。

运行SETUP.EXE即可自动完成安装,注意:安装时不能把仿真器和PC机连接。

5、运行ASTUDIO 4.12上位机软件,出现如下画面时可以选择建立/打开新工程还是直接调入以前的工程项目。

如果是使用STK500或只是使用JTAG仿真器来烧写芯片,可以按“Cancel”按钮。

6、进入ASTUIO软件后使用连接设备的按钮,该按钮位于ASTUDIO软件的第二行图标处,如下画面。

7、注意我们只能选择使用设备的类型为JTAG或STK500。

可以选择的设备在左边的一栏里“STK500 or A VRISP”和“JTAG ICE”,右边一栏选择使用的串口号,要和您的USB虚拟串口的串口号COM3或COM4对应起来。

当然也可以选择AUTO使用自动连接设备。

建议在控制面板的设备管理器里确定虚拟串口号再设定,这样可以节省联机时间。

8、选择好设备后,按“Connect…”按钮就可以和您的设备正常连接了。

AVR单片机IO端口操作方法及注意事项

AVR单片机IO端口操作方法及注意事项


一次即可。因为它是一个控制全部上拉电阻的控制位。
DDRB&=~(BIT(2)|BIT(3)); //定义 PB2、PB3为输入
PORTB|=BIT(2)|BIT(3); // 将 PORT 置1,满足上拉电阻的另一个条件
举例四:将PB0、PB1数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1
PORTB^=BIT(0)|BIT(1); // 翻转PB0 、PB1口
举例五:将PB2、PB3定义为输入,不带上拉电阻
DDRB&=~(BIT(2)|BIT(3)); //定义 PB2、PB3为输入
PORTB&=~(BIT(2)|BIT(3)); // 将 PORT 置0,没有上拉电阻
举例六:将PB2、PB3定义为输入,带上拉电阻。即没有引用这些引脚时,缺省值为高电平
SFIOR&=~BIT(PUD); // SFIOR寄存器的上拉电阻控制位PUD置0,在整个代码中,这句话可以不出现,或仅出现
4功能模块(中断,定时器)的输入可以是低电平触发,也可以是上升沿触发或下降沿触发。
5用于高阻模拟信号输入,切记不要使能内部上拉电阻,影响精确度。例如ADC数模转换器输入,模拟比较器输入
作输出时:
采用必要的限流措施,例如驱动LED要串入限流电阻
复位时:
复位时内部上拉电阻将被禁用。如果应用中(例如电机控制)需要严格的电平控制,请使用外接电阻固定电平
举例二:将PB0、PB1定义为输出,PB0、PB1均为高电平
DDRB|=BIT(0)|BIT(1); //定义 PB0、PB1为输出
PORTB|=BIT(0)|BIT(1);// PB0、PB1 输出高电平

模拟比较器(Comparator)

模拟比较器(Comparator)
Address $13 Bit 3 Bit 2 CMPSO Bit 1 CMPSN Bit 0 CMPEN R/W R/W 上電復位值 - 0 0 0
比較器控制寄存器資料位元定義 CMPEN: 比較器模組使能選擇 0︰比較器模組禁止。 1︰比較器模組使能。 比較器模組負輸入端配置選擇。 0︰比較器模組選用內部 1/2VDD 為負端輸入(即這時負輸入共 用引腳配置為普通埠(PortE.1)管腳) 。 1︰比較器模組選用外部埠(PortE.1)為負端輸入。 比較器模組輸出端配置選擇。 0︰比較器模組輸出端配置為內部輸出(即這時輸出共用引腳 配置為普通埠(PortE.0)管腳) 。 1︰比較器模組選用外部埠(PortE.0)為輸出。
圖 1-2:比較參考電壓產生電路
比較電壓值設定寄存器及比較電壓值計算如下:
Address $17 Bit 3 VREF3 Bit 2 VREF2 Bit 1 VREF1 Bit 0 VREF0 R/W R/W 上電復位值 0 0 0 0
參考比較電壓(VREF)=( VREF3: : VREF0 ) *VDD / 16
比較器中斷輸出有效沿選擇寄存器
Address $13 Bit 3 CMPE Bit 2 Bit 1 Bit 0 R/W R/W 上電復位值 0 - - -
比較器輸出有效沿選擇控制寄存器控制位定義 CMPE: 比較器模組輸出產生中斷的有效沿選擇。 0︰選擇輸出下降沿產生中斷。
第 4 頁
1︰選擇輸出上升沿產生中斷。
比較器狀態控制寄存器
Address $14 Bit 3 CMPGO Bit 2 CMPSP2 Bit 1 CMPSP1 Bit 0 CMPSP0 R/W R/W 上電復位值 0 0 0 0
比較器狀態控制寄存器的控制位元定義 比較器模組工作狀態控制。 0︰比較器模組工作停止, 比較器模組比較輸出始終為 0。 1︰比較器模組正常工作, 比較器模組比較輸出為有效狀態。 CMPSP2~0: 比較器模組正輸入通道選擇。 000: 比較器正端輸入選擇 CMPP1 通道 001: 比較器正端輸入選擇 CMPP2 通道 010: 比較器正端輸入選擇 CMPP3 通道 011: 比較器正端輸入選擇 CMPP4 通道 100: 比較器正端輸入選擇 CMPP5 通道

简易AVR单片机教程

简易AVR单片机教程

简易AVR单⽚机教程简易单⽚机教程ICCAVR的使⽤参考程序代码1模拟⽐较器#include#includevoid main(){unsigned char mid;DDRC=0xFF;PORTC=0xFF;ACSR=0x00; //启动模拟⽐较器参考电压接⽐较器正端中断屏蔽触发定时计数器1的捕获关闭while(1){mid=ACSR&0x20; //读出模拟⽐较器的输出值if(mid==0)PORTC|=BIT(0); //PC0=1elsePORTC&=~BIT(0); //PC0=0}}Function:流⽔灯Author:CWBData:2010-05-05--------------------------------*/ #includevoid delay_ms(int ms) {int m,n;for(m=0;m<=ms;m++) for(n=0;n<=450;n++); }void main(){int i,j,k;DDRA=0xFF;DDRB=0xFF;DDRC=0xFF;DDRD=0xFF; PORTA=0x00; PORTB=0x00; PORTC=0x00; PORTD=0x00;while(1){j=0x01;for(i=0;i<=6;i++){PORTA=j;PORTB=j;PORTD=j;delay_ms(600);j=(j<<1);}for(i=0;i<=6;i++)PORTA=j;PORTB=j;PORTD=j;delay_ms(600);j=(j>>1);}}}3、定时计数器TC2#include#pragma interrupt_handler MyCounter:20 static int iCounter=0;void MyCounter(void){if(iCounter<=10){//PORTA^=0xFF;//~PINA;//0xFF;//iCounter++;//iCounter=0;}else iCounter=0;}void main(void){DDRA=0xFF;PORTA=0x00;//PORTB=0xFF;DDRB=0xFF;TCCR0=0x1B;//PWM相位可调,T/C0与输出引脚断开,CLK/64分频//00011011 TCNT0=0x00;//从0开始计数OCR0=0x3E;//达到63时,⽐较匹配发⽣TIMSK=0x02;//中断屏蔽寄存器T/C0输出匹配中断使能#asm("sei");//总中断开放SREG|=0x80;while(1){// for(i=0;i<1000;i++)// for(j=0;j<400;j++);if (iCounter==8) PORTA^=0xFF;};}4、计数器TC0#include#pragma interrupt_handler MyCounter:20static int iCounter=0;void MyCounter(void){if(iCounter<=10){//PORTA^=0xFF;//~PINA;//0xFF;//iCounter++;//iCounter=0;}else iCounter=0;}void main(void){DDRA=0xFF;PORTA=0x00;//PORTB=0xFF;DDRB=0xFF;TCCR0=0x1B;//PWM相位可调,T/C0与输出引脚断开,CLK/64分频//00011011 TCNT0=0x00;//从0开始计数OCR0=0x3E;//达到63时,⽐较匹配发⽣TIMSK=0x02;//中断屏蔽寄存器T/C0输出匹配中断使能#asm('sei')/********************************************//不明原因,C中嵌⼊汇编不能⽤**********************************************/SREG|=0x80;//总中断开放SREG|=0x80;int i,j;// for(i=0;i<1000;i++)// for(j=0;j<400;j++);if (iCounter==8){ PORTA^=0xFF;for(i=0;i<1000;i++)for(j=0;j<400;j++);}};}5、EEPROM/*访问单⽚机资源EEPROM*/#include#define sei() SREG|=0X80#define cli() SREG&=0X7F//EEPROM控制寄存器位定义#define EERE 0 //READ#define EEWE 1 //WRITE#define EEMWE 2 //总写⼊#define WWRIE 3 //中断/*端⼝初始化*/void _init(void){DDRA=0XFF;PORTA=0XFF; }/*EEPROM读程序*/char EEPROM_R(unsigned int EEAdd) {while(EECR&(1<EEAR=EEAdd; //设置读⼊地址EECR|=(1<return EEDR; }/*EEPROM写程序*/while(EECR&(1<EEAR=EEAdd; //设置写⼊地址EEDR=EEData; //设置写⼊数据EECR|=(1<EECR|=(1<}void main(){_init();cli(); //关中断EEPROM_W(0X100, 0X07); //将数据写⼊EEPROM中的0x0100单元PORTA=EEPROM_R(0X0100); //读取0x0100单元的数据,送显sei(); //开中断/***********************开中断关中断的作⽤??*****************************/while(1);}6、计数器测频率#include/*******************程序还有问题要解决**************************/void main(){DDRB=0x08;PORTB=0x00;//PB3(OC0) CONFIG outputTCCR0=0x1B;//64分频pwm ⽐较匹配发⽣oc0触发TCNT0=0x00;OCR0=0x80;//RECT WAVEASSR=0x00; //同步⽅式///T/C2 ⽬的定时1MSTCCR2=0x0B;//32 fen pin CTC 与输出引脚断开TCCR1A=0x00;TCCR1B=0x06;//时钟外部T1引酵下降驱动⼀般模式TCNT1H=0x00;TCNT1L=0x00; //从零开始记数ICR1H=0x00;//似乎没⽤到输⼊捕获寄存器??OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;//都为0 TCNT1中也为0 ⽐较匹配貌似在这种情况不发⽣TIMSK=0x80;SREG|=0x80; //t/c2 ⽐较匹配中断开放全局中断开放}7、串⼝中断int// Target : M16// Crystal: 8.0000Mhz//AVR单⽚机atmega16串⼝中断接收和发送程序。

AVRr单片机:第10章 模拟比较器和ADC接口

AVRr单片机:第10章 模拟比较器和ADC接口
• 对于差分转换,其结果为(ADC结果为补码形式): ADC=(VPOS-VNEG) ×GAIN×512/VREF [X]原=[[X]补]补,真值为原码按权展开。
例题1(单次触发---查询)
• 如图,VREF=5V(AVCC),0~5V的模拟电压从PA0输入, A/D转换后的10位结果从高到低由PD1,PD0,PC7~PC0 输出。系统时钟采用片内的4MHZ时钟。
10.2.3 ADC应用设计要点(2)
• AVR 的ADC 完成一次转换的时间见表 10-7。
10.2.3 ADC应用设计要点(3)
• 2.ADC 输入通道和参考电源的选择
在开始转换前改变通道设置。最简单的方法是等到转 换完成后,再改变通道选择。
• ADC 电压参考源
– ADC 的参考电压(VREF)决定了 A/D 转换的范围。 – 无论选用什么内部参考电源,外部 AREF 引脚都是直
例子(补充)
• 如图,R2,R3分压后作为模拟比较器的正输入 端,模拟比较器的负输入端接至PA0,要求用中 断实现:当比较器的输出电平变化时,D1取反。
10.2 模数转换器ADC
10.2.1 10 位ADC结构
10.2.2 ADC相关的I/O寄存器(1)
10.2.2 ADC相关的I/O寄存器(2)
例题2(单次触发---中断)
• 如图,VREF=5V(AVCC),0~5V的模拟电压从PA7输入, A/D转换后的10位结果从高到低由PD1,PD0,PC7~PC0 输出。系统时钟采用片外的16MHZ晶体。
例题3(自动触发---连续转换模式---中断)
• 如图,VREF=5V(AVCC),0~5V的模拟电压从PA0输入, A/D转换后的10位结果从高到低由PD1,PD0,PC7~PC0 输出。系统时钟采用片外的16MHZ晶体。

AVR使用入门

AVR使用入门

WinAVR(GCC)快速入门AVR比较乱,没有形成主流的开发应用环境,新入门者很容易眼花缭乱难以下手。

首先就是AVR的产品线,频繁的升级换代,始终没有稳定的主流型号,并且有些替代型号和原型号不兼容,同一系列高档型号和低档的不兼容,选型时颇为头痛。

C编译器也是百花齐放,GCC、ICC、Codeversion、IAR都有很多的使用者,这里我们以WINAVR为例,来介绍它的使用方法.(本光盘中配套的几个例子也全部是以此为编译器来进行的,请初学的朋友注意!)首先:安装光盘中的:avr应用/avr开发工具/WinAVR-20050214.exe软件安装好后,你就能在电脑上看到如下的功能菜单:说明如下:名称说明Programmers Notepad GCC语言编辑器。

可提供应用程序接口。

Mfile GCC需要一个叫 makefile 的参数文件才能进行编译。

Mfile 是一个工具,可以让用户方便地修改 makefile 上的参数。

不过我们不推荐使用它。

我们推荐直接用记事本打开 makefile 进行编辑。

A VR Insight 仿真调试工具TkInfo GNU的超文本浏览器Uninstall WinA VR卸载WinA VR 软件WinA VR User Manual WinA VR 用户手册GNU Maunals Online GNU的在线帮助A VR-libc Manual A VR GCC的C语言函数库帮助手册步骤一:打开 PN 工具步骤二:在硬盘建立一个专门存放avr文件的目录,例如,我们在D:\盘新建一个AVR的目录,注意!不要用中文目录!也不要存在其他的有中文目录的路径。

在PN工具的编辑窗口中输入下面的一个简单的跑马灯程序:#include "avr/io.h"static void io_init(void){PORTA = 0xff;DDRA = 0xff;}void mDelay(uint16_t DelayTim){ uint16_t i;for(;DelayTim>0;DelayTim--){ for(i=0;i<4000;i++){;}for(i=0;i<3900;i++){;}}}int main(void){uint8_t i=0;io_init();while(1){ if(++i>=8)i=0;PORTA=~(0x01<<i); //改为0x80>>i可改变流水灯方向mDelay(500);}}然后:菜单 File -->save as..把它保存在刚刚建立的d:\avr目录下,命名为led.c回到前面点程序菜单的winavr的mfile出现前面的界面点击主菜单Makefile->Main file name…即出现如图2所示的对话框,通常不需要更改此选项,最终产生的hex文件即main.hex。

马伟力AVR笔记:六模拟比较器和ADC实验

马伟力AVR笔记:六模拟比较器和ADC实验

马伟力A VR笔记:六模拟比较器和ADC实验-------基于LT_Mini_M166.1 模拟比拟器实验6.1.1 实例功用模拟比拟器和模数转换ADC是单片机外部最罕见的两种支持模拟信号输入的功用接口。

大局部AVR都具有这两种类型的接口。

本实例将以ATmage16芯片为例,引见模拟比拟器的运用方法,在下一个实例中引见模数转换ADC。

运用模拟比拟器可以完成单片机系统电源电压的检测,更巧妙的运用是应用模拟比拟器和一些复杂的中心电路,设计复杂的模数转换ADC。

本实例完成应用模拟比拟器比拟某一点电压与外部模拟比拟器参考电压的上下。

共有3个功用模块,区分描画如下:●单片机系统:运用ATmega16单片机的模拟比拟器比拟某一点的电压与参考电压的关系。

●中心电路:应用电阻设计的分压电路。

●软件顺序:熟习掌握ATmega16单片机的模拟比拟器的运用。

经过本实例的学习,掌握相关电路设计,并掌握以下知识点:●了解单片机的模拟比拟器。

●了解单片机的模拟比拟器的运用。

●掌握单片机模拟比拟器的编程。

6.1.2、器件和原理1、模拟比拟器的引见ATmega16的模拟比拟器可以完成对两个输入端:正极AIN0和负极AIN1〔区分对应于ATmage16的引脚PB2、PB3〕的模拟输入电压停止比拟。

当AIN0上的电压高于AIN1的电压时,模拟比拟器输入ACO被设为〝1”。

比拟器的输入还可以被设置作为定时计数器1输入捕捉功用的触发信号。

此外,比拟器的输入可以触发一个独立的模拟比拟器中缀。

用户可以选择运用比拟器输入的上升沿、下降沿或事情触发作为模拟比拟器中缀的触发信号。

2、与模拟比拟器相关的寄存器与模拟比拟器相关的寄存器是SFIOR、ACSR。

用户经过这两个寄存器的相关位完成对模拟比拟器的设置和控制。

1)特殊功用IO寄存器—SFIOR时模数转换〔ADC〕功用被封锁〔ADCSRA寄存器中的ADEN使能位为〝0”〕时,允许运用ADC 多路复用器选择ADC的模拟输入端口作为模拟比拟器反向端的输入信号源。

AVR单片机功能模块使用

AVR单片机功能模块使用

AVR单片机功能模块使用AVR(Advanced Virtual RISC)是Atmel公司推出的8位和32位单片机微处理器架构,广泛应用于各种嵌入式系统和电子设备中。

AVR单片机具有丰富的功能模块,可以用于实现各种功能和应用。

以下是AVR单片机常用的一些功能模块及其使用方法:1.GPIO模块:GPIO(General Purpose Input/Output)即通用输入输出模块,用于连接外部设备,如开关、LED、继电器等。

可以通过配置寄存器设置引脚的输入或输出功能,并通过操作相应的寄存器进行读写操作。

2.定时器/计数器模块:3.PWM模块:PWM(Pulse Width Modulation)即脉宽调制模块,用于生成具有不同占空比的脉冲信号。

可以用来控制电机的转速、调节LED的亮度等。

可通过设置比较器和计数器的参数来生成不同占空比的PWM信号。

4.ADC模块:ADC(Analog to Digital Converter)即模数转换器模块,用于将模拟信号转换为数字信号。

可以用来测量电位器、光敏电阻等传感器的模拟信号。

可通过配置寄存器设置分辨率、参考电压和采样率等。

5.UART模块:UART(Universal Asynchronous Receiver/Transmitter)即通用异步接收/发送模块,用于与计算机或其他设备进行串口通信。

可以通过配置寄存器设置波特率、数据位、停止位和校验位等。

6.SPI模块:SPI(Serial Peripheral Interface)即串行外设接口模块,用于和外部SPI设备进行通信,如EEPROM、LCD等。

可以通过配置寄存器设置数据位、数据格式、时钟极性和相位等。

7.I2C模块:I2C(Inter-Integrated Circuit)即串行双线制接口模块,用于和外部I2C设备进行通信,如温湿度传感器、实时时钟等。

可以通过配置寄存器设置传输速率、地址选择和数据传输模式等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于AVR 的单片嵌入式系统原理与实践应用模拟比较器和ADC接口模拟比较器和模数转换ADC 是单片机内部最常见的两种支持模拟信号输入的功能接口。

大部分AVR 都具备这两种类型的接口。

本章将以ATmage16 芯片为例,介绍这两种模拟接口的原理和应用设计方法。

软件设计下面是实现简易电压的系统程序代码。

/*****************************************************File name : demo_10_3.cChip type : ATmega16L华东师范大学电子系马潮10-13第10 章模拟比较器和ADC 接口Program type : ApplicationClock frequency : 4.000000 MHzMemory model : SmallExternal SRAM size : 0Data Stack size : 256*****************************************************/#include <mega16.h>flash char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; flash char position[6]={0xfe,0xfd,0xfb,0xf7};unsigned char dis_buff[4]={0,0,0,0},posit;bit time_2ms_ok;// ADC 电压值送显示缓冲区函数void adc_to_disbuffer(unsigned int adc){char i;for (i=0;i<=3;i++){dis_buff[i]=adc % 10;adc /= 10;}}// Timer 0 比较匹配中断服务interrupt [TIM0_COMP] void timer0_comp_isr(void){time_2ms_ok = 1;}// ADC 转换完成中断服务interrupt [ADC_INT] void adc_isr(void){unsigned int adc_data,adc_v;adc_data=ADCW; //读取 ADC 置换结果adc_v=(unsigned long)adc_data*5000/1024; //换算成电压值adc_to_disbuffer(adc_v);}void display(void) // 4 位 LED 数码管动态扫描函数{PORTA |= 0x0f;华东师范大学电子系马潮10-14基于AVR 的单片嵌入式系统原理与实践应用PORTC = led_7[dis_buff[posit]];if (posit==3) PORTC |= 0x80;PORTA &= position[posit];if (++posit >=4 ) posit = 0;}// 系统主程序void main(void){DDRA=0x0f; // !!见以下说明PORTA=0x0f; // !!见以下说明DDRC=0xff; // LED 显示控制 I/O 端口初始化PORTC=0x00;// T/C0 初始化TCCR0=0x0B; // 内部时钟,64 分频(4M/64=62.5KHz),CTC 模式TCNT0=0x00;OCR0=0x7C; // OCR0 = 0x7C(124),(124+1)/62.5=2msTIMSK=0x02; // 允许 T/C0 比较中断// ADC 初始化ADMUX=0x47; // 参考电源 AVcc、ADC7 单端输入SFIOR&=0x1F;SFIOR|=0x60; // 选择 T/C0 比较匹配中断为 ADC 触发源ADCSRA=0xAD; // ADC 允许、自动触发转换、ADC 转换中断允许、ADCclk=125Kz#asm("sei") // 开放全局中断while (1){if (time_2ms_ok){display(); // LED 扫描显示time_2ms_ok = 0;}}}10.1 模拟比较器ATmega16 的模拟比较器可以实现对两个输入端:正极 AIN0 和负极 AIN1(对应于ATmage16 的引脚 PB2、PB3)的模拟输入电压进行比较。

当 AIN0 上的电压高于 AIN1 的电压时,模拟比较器输出 ACO 被设为“1”。

比较器的输出还可以被设置作为定时计数器 1 输入捕获功能的触发信号。

此外,比较器的输出可以触发一个独立的模拟比较器中断。

用户可以选择使用比较器输出的上升沿、下降沿或事件触发作为模拟比较器中断的触发信号。

比较器的方框图和周围电路如图 10-1 所示。

图 10-1 模拟比较器的方框图10.1.1 与模拟比较器相关的寄存器和标志位与模拟比较器相关的寄存器是 SFIOR、ACSR。

用户通过这两个寄存器的相关位实现对模拟比较器的设置和控制。

1) 特殊功能 IO 寄存器—SFIOR华东师范大学电子系马潮10-1第 10 章 模拟比较器和 ADC 接口时模数转换(ADC )功能被关闭(ADCSRA 寄存器中的 ADEN 使能位为“0”)时,允许使用 ADC多路复用器选择 ADC 的模拟输入端口作为模拟比较器反向端的输入信号源。

当该位为零时, AIN1 引脚的信号将加到模拟比较器反向端。

2) 模拟比较器控制和状态寄存器—ACSRACSR 是模拟比较器主要的控制寄存器,其中各个位的作用如下:位 7—ACD :模拟比较器禁止当该位设为“1”时,提供给模拟比较器的电源关闭。

该位可以在任何时候被置位,从 而关闭模拟比较器。

在 MCU 闲置模式,且无需将模拟比较器作为唤醒源的情况下,关闭模拟 比较器可以减少电源的消耗。

要改变 ACD 位的设置时,应该先将寄存器 ACSR 中的 ACIE 位清 零,把模拟比较器中断禁止掉。

否则,在改变 ADC 位设置时会产生一个中断。

位 6—ACBG :模拟比较器的能隙参考源选择当该位为“1”时,芯片内部一个固定的能隙(Bandgap )参考电源 1.22V 将代替 AIN0 的输入,作为模拟比较器的正极输入端。

当该位被清零时,AIN0 的输入仍然作为模拟比较 器的正极输入端。

位 5—ACO :模拟比较器输出模拟比较器的输出信号经过同步处理后直接与 ACO 相连。

由于经过同步处理,ACO 与模 拟比较器的输出之间,会有 1~2 个时钟的延时。

位 4—ACI :模拟比较器中断标志位当模拟比较器的输出事件符合中断触发条件时(中断触发条件由 ACIS1 和 ACIS0 定义), ACI 由硬件置“1”。

若 ACIE 位置“1”,且状态寄存器中的 I 位为“1”时,MCU 响应模拟比 较器中断。

当转入模拟比较中断处理向量时,ACI 被硬件自动清空。

此外,也可使用软件方 式清零 ACI :对 ACI 标志位写入逻辑“1”来清零该位。

位 3—ACIE :模拟比较器中断允许当 ACIE 位设为“1”,且状态寄存器中的 I 位被设为“1”时,允许模拟比较器中断触发。

当 ACIE 被清“0”时,模拟比较器中断被禁止。

位 2—ACIC :模拟比较器输入捕获允许当该位设置为“1”时,定时计数器 1 的输入捕获功能将由模拟比较器的输出来触发。

在这种情况下,模拟比较器的输出直接连到输入捕获前端逻辑电路,从而能利用定时器/计 数器 1 输入捕获中断的噪声消除和边缘选择的特性。

当该位被清零时,模拟比较器和输入捕 获功能之间没有联系。

要使能比较器触发定时器/计数器 1 的输入捕获中断,定时器中断屏 蔽寄存器(TIMSK )中 的 TICIE1 位必须被设置。

位 1、0—ACIS1、ACIS0:模拟比较器中断模式选择这 2 个位决定哪种模拟比较器的输出事件可以触发模拟比较器的中断。

不同的设置参见华东师范大学 电子系 马 潮 10-2基于AVR 的单片嵌入式系统原理与实践应用表10-1。

注意:当要改变 ACIS1、ACIS0 时,必须先清除 ACSR 寄存器中的中断允许位,以禁止模拟比较器中断;否则,当这些位被改变时,会发生中断。

3) 模拟比较器的多路输入用户可以选择 ADC7..0 引脚中的任一路的模拟信号代替 AIN1 引脚,作为模拟比较器的反向输入端。

模数转换的 ADC 多路复用器提供这种选择的能力,但此时必须关闭芯片的 ADC功能。

当模拟比较器的多路选择使能位(SFIOR 中的 ACME 位)置“1”,同时 ADC 被关闭时(ADCSRA 中的 ADEN 位置“0”),由寄存器 ADMUX 中的 MUX[2:0]位所确定的引脚将代替 AIN1 作为模拟比较器的反向输入端,如表 10-2 所示。

如果 ACME 被清零,或 ADEN 被置 1,则 AIN1 仍将为模拟比较器的反向输入端。

表10-2 模拟比较器多路输入选择10.1.2 模拟比较器的应用设计模拟比较器的基本应用就是对两个输入端(AIN0、AIN1)的模拟电压进行比较,例如对系统电源电压的监测等。

例 10.1 系统电源电压的监测1)硬件电路在一些使用电池供电的便携和手持式系统中,系统需要对电源电压进行监测,一旦电压低于某个值时,就要给出警告,提示用户更换电池或对电池进行充电。

图10-2 是一个简单的电源电压监测电路。

电源电压经过R1、R2 分压后,作为监测电压输入端与PB3(AIN1)连接。

模拟比较器的AIN0 采用芯片内部 1.22V 的固定能隙(Bandgap)参考电源作为比较参考电压。

假定系统正常工作电压范围为 3V-5V,当电源电压低于 3.6V 时就要给出低电压提示。

图中使用 PB2 控制一个 LED 发光作为低电压提示。

当电源电压高于 3.7V 时,PB3(AIN1)引华东师范大学电子系马潮10-3第10 章模拟比较器和ADC 接口脚的电压大于 1.22V,比 AIN0 的 1.22V 高,此时寄存器 ACSR 中的 AC0 为“0”。

而当电源电压低于 3.6V 时,PB3(AIN1)引脚的电压降到 1.2V 以下,比 AIN0 的 1.22V 低,此时寄存器ACSR 中的 AC0 为“1”。

因此,AC0 标志位反映了电压高低的情况。

图 10-2 系统电源电压监测电路2)软件设计下面给出一个简单的电源监测程序,程序循环检测 AC0 的值,当 PB3 的电压低于 1.22V时,PB2 输出低电平,LED 发光,表示低电压报警提示。

/*********************************************File name : demo_10_1.cChip type : ATmega16Program type : ApplicationClock frequency : 4.000000 MHzMemory model : SmallExternal SRAM size : 0Data Stack size : 256**********************************************/#include <mega16.h>void main(void){PORTB.2 = 1; //PB2 设置为输出,控制 LEDDDRB.2 = 1;// 模拟比较器初始化:ACSR=0x40; //允许模拟比较器,AIN0 设置为内部 Bandgap 参考电压 1.22Vwhile (1) //循环检测 AC0 位{华东师范大学电子系马潮10-4基于AVR 的单片嵌入式系统原理与实践应用if (ACSR.5)PORTB.2 = 0; // AIN0 < AIN1elsePORTB.2 = 1; // AIN0 > AIN1,低电压报警}}在上面简单程序中使用了模拟比较器的功能,实现了对电源电压的监测。

相关文档
最新文档