购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 呼吸灯应用系统设计思路

1.2.1 系统的工作流程

呼吸灯应用系统的工作流程如图 1.1 所示,其工作过程就是一个“明—暗—明”的过程。

图 1.1 呼吸灯应用系统的工作流程图

1.2.2 系统的需求分析与设计

设计呼吸灯系统,需要考虑以下几方面的内容:

(1)要发光,则需要一个合适的光源。

(2)需要一个能够对光源进行相应控制的驱动电路。

(3)ATmega128 单片机要有与驱动电路匹配的接口。

(4)需要设计合适的单片机软件。

1.2.3 “呼吸”效果实现原理

在ATmega128 单片机应用系统中,最常用的发光源是发光二极管(LED)。发光二极管的发光强弱和通过它的电流大小相关,电流越大,发光二极管的光越强,通过对该电流大小的控制,即可以实现对发光二极管亮度的控制。当该电流逐渐增大时灯光逐渐变亮,反之灯光逐渐变暗。

1.2.4 ATmega128 单片机简介

ATmega128 是基于RISC结构的 8 位高性能、低功耗处理器,是AVR单片机系列中整体性能最强的一款产品,其主要特点如下:

(1)支持 131 条AVR指令,其中大多数指令执行时间为单个时钟周期,执行速度快。

(2)内部有 32 个 8 位通用工作寄存器,硬件乘法器只需两个时钟周期,当工作频率为 16MHz时,性能高达 16MIPS。

(3)内置 4KB的片内SRAM,128KB的系统内可编程Flash,4KB字节的EEPROM。

(4)内置具有独立锁定位的可选Boot代码区,并且可以通过片上Boot 程序实现系统内编程。

(5)内置 4 个灵活的、具有比较模式和PWM功能的定时/计数器T/C和一个实时时钟RTC。

(6)内置 8 通道 10 位ADC,可以组合为 8 个单端通道或 7 组差分通道,其中有两个具有可编程增益(1×,10×,或 200×)的差分通道。

(7)内置片内模拟比较器。

(8)内置具有独立片内振荡器的可编程看门狗定时器。

(9)内置多种串行通信接口,包括TWI(I 2 C)两线接口,两路可编程USART,可工作于主机/从机模式的SPI串行接口。

(10)提供 53 个可编程的I/O口,64 引脚TQFP封装,64 引脚MLF封装。

(11)支持符合JTAG标准的边界扫描,提供与IEEE 1149.1 标准兼容的JTAG硬件接口。

(12)支持 2.7~5.5V(ATmega128L)和 4.5~5.5V(ATmega128)工作电压,ATmega128L工作频率为 0~8MHz,ATmega128 的工作频率为 0~16MHz。

图 1.2 是ATmega128 的内部结构示意图,各个部分的详细说明如下:

图 1.2 ATmega128 的内部结构

(1)ALU(运算器):支持通用寄存器之间,以及通用寄存器与常数之间的算术和逻辑运算,ALU也可以执行单寄存器操作,运算完成之后更新相应的状态寄存器的内容以反映操作结果。ATmega128 通过有条件或无条件的跳转指令和调用指令来控制程序的工作流程,从而可以直接寻址整个地址空间。

(2)通用寄存器:其中 6 个寄存器可以联合起来构成 3 个 16 位的X、Y、Z间接寻址寄存器,用来寻址数据空间以实现高效的地址运算,其中一个指针还可以作为程序存储器查询表的地址指针。

(3)程序存储器:这是可以在线编程的Flash,其快速访问寄存器由 32 个 8 位通用寄存器组成,访问时间为一个时钟周期,从而ATmega128 可以实现单时钟周期的运算器操作。在典型的运算器操作中,两个位于不同通用寄存器中的操作数被同时访问,然后执行运算,结果被送回到通用寄存器,整个指令执行过程仅需一个时钟周期。

(4)中断模块:ATmega128 内置一个灵活的中断模块,其控制寄存器位于I/O空间内,并且有一个位于状态寄存器SREG中的全局中断使能位,每个中断在中断向量表中都有独立的中断向量,其优先级与该中断向量在中断向量表中的位置有关,中断向量地址越低,其优先级越高。

(5)内部扩展资源:ATmega128 内部集成了多种外部资源,包括SPI接口、ADC接口、E 2 PROM、串行模块等。

1.2.5 RCL电路

ATmega128 单片机的输出是一个数字信号,只有“0”和“1”两种状态,也就是说只有“大电流”和“小电流”,不能直接对LED进行控制,此时需要一个相应的电路来将这个数字信号转换为模拟信号。

RCL电路是一种可以进行储能释放的电路,如图 1.3 所示。如果在电容C 1 两端加上一个电源,电源将对C 1 进行充电,C 1 在两端累积电荷;如果此时电源被撤去,C 1 开始通过R 1 和L 1 组成的回路进行放电,但是电感L 1 会产生逆电动势,同时继续给C 1 充电,所以此时C 1 处于一个反复的充放电过程,直到其中最开始存储的电能都在电阻R 1 上消耗掉。

图 1.3 RCL电路

如果在RCL电路的R 1 和L 1 之间串联一个发光二极管,在电容两端加上高/低数字逻辑电平,则可以实现发光二极管上电流的变化。

注意: 这个充放电的过程,被称为RCL的阶跃响应,其充放电的时间是可以通过相关的公式计算出来的,有兴趣的读者可以自行查阅电路相关书籍。

1.2.6 PWM控制

虽然RCL电路能够将对应的高/低数字逻辑电平转换为模拟信号,并且实现电流的大小变化,但是还是需要ATmega128 单片机提供数字逻辑电平,此时可以应用PWM控制原理。

PWM是脉冲宽度调制(Pulse Width Modulation)的缩写,简称脉宽调制,是一种使用ATmega128 单片机或其他处理器的数字输出来对模拟电路进行控制的方法,这种方法以数字方式来控制模拟电路,可以大幅度降低系统的成本和功耗。

在采样控制理论中有一个重要结论:当冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。PWM控制技术即以该结论为理论基础,利用ATmega128 单片机的I/O引脚输出一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需波形,按一定的规则对各脉冲的宽度进行调制。PWM控制技术既可改变逆变电路输出电压的大小,也可改变输出频率。

对于PWM控制来说,其关键参数有两个:脉冲频率和脉冲宽度,在实际的ATmega128 单片机应用系统中,通常可以使用定时器来实现对这两个参数的控制。

在呼吸灯实例中,修改PWM的输出波形,可以改变RCL电路外加电源工作时间的长短,并对RCL电路的充电频率进行调整,从而可以分别修改吸气和呼气的长度,以及呼吸的频率。

1.2.7 ATmega128 单片机的开发环境

ATmega128 的常用软件开发环境包括AVR Studio、GCCAVR(WINAVR)、ICC AVR、Code Vision AVR等,其中最常用的是ICCAVR。

ICCAVR集成开发环境的主要特点如下:

(1)它是一个综合了编辑器和工程管理器的集成工作环境(IDE),集成度高,使用简单;

(2)源文件全部被组织到工程之中,文件的编辑和工程的构筑也在这个环境中完成,编译错误会显示在状态窗口中,当点击错误时,光标会自动跳转到错误的那一行,便于用户进行修改和编译;

(3)工程管理器可以生成AVR单片机直接使用的.HEX格式文件,该格式的文件可被大多数编程器所支持。

1.ICCAVR的工作界面

ICCAVR集成开发环境提供了丰富的内部工具,常用命令都具有快捷工具栏,并且提供了ICCAVR Application Builder快速开发工具用于帮助用户快速建立一个应用工程文件。除了代码编辑窗口,ICCAVR还提供了菜单命令栏、快捷工具栏、项目管理窗口、代码编辑窗口、状态栏、输出窗口等。ICCAVR的工作界面如图 1.4 所示。

图 1.4 ICCAVR的工作界面

2.ICCAVR的菜单

ICCAVR的菜单栏包括File、Edit、Search、View、Project、Studio+、RCS、Tools、Terminal、Help菜单项,下面将详细介绍这些菜单的用途。

图 1.5 是File(文件)菜单的示意图,该菜单包含了用于文件操作的相关菜单项,详细说明如下所示。

图 1.5 File菜单

(1)New:新建一个文件。

(2)Reopen:打开历史文件,最近用过的历史文件将显示在右边的子菜单中。

(3)Open:打开一个已存在的文件。

(4)Reload:放弃全部的修改,从磁盘或者备份中重新装载当前文件。

(5)Save:保存当前文件。

(6)Save As:将当前文件保存为另外的名称。

(7)Close:关闭当前文件。

(8)Compile File:把当前文件编译成目标文件、输出.hex或当前项目的启动文件。

(9)Save All:保存所有打开的文件。

(10)Close All:关闭当前打开的所有文件。

(11)Print:打印当前文件。

(12)Exit:退出ICCAVR IDE环境。

图 1.6 是Edit(编辑)菜单的示意图,该菜单包含了编辑操作相关的菜单项,其详细说明如下所示。

(1)Undo:撤销上一次的修改。

(2)Redo:恢复上一次撤销的操作。

(3)Cut:把选择的内容剪切到粘贴板。

(4)Copy:把选择的内容复制到粘贴板。

(5)Paste:将粘贴板的内容粘贴在当前光标的位置。

(6)Delete:删除所选择的内容。

(7)Select All:选择当前文件的全部内容。

(8)Block Indent:对当前选中的整块内容右移。

(9)Block Outdent:对当前选中的整块内容左移。

图 1.7 是Search(查找)菜单的示意图,该菜单包含了用于查找操作的相关菜单命令,其详细说明如下所示。

图 1.6 Edit菜单

图 1.7 Search菜单

(1)Find:在当前编辑窗口中寻找一个或者多个字符串,可以使用Match Case(区分大小写)、Whole Word(全字匹配)、Up/Down(往上或往下)选项。

(2)Find in Files:在当前所有打开的文件中,或在当前工程的所有文件中,或当前目录中的文件中寻找一个或者多个字符串,可以使用Case Sensitive(区分大小写)、Whole Word(全字匹配)、Regular Expression(寻找规则的表达式)选项。

(3)Replace:在当前编辑窗口中替换一个或多个字符串。

(4)Find Again:再次查找。

(5)Goto Line Number:转到当前编辑窗口的指定行。

(6)Add Bookmark:添加书签。

(7)Delete Bookmark:删除书签。

(8)Next Bookmark:跳转到下一个书签。

(9)Goto Bookmark:跳转到指定的书签。

图 1.8 是View(视图)菜单的示意图,该菜单包含了用于控制ICCAVR显示的操作命令,其详细说明如下所示。

(1)Project File Window:打开或者关闭项目组织窗口。

(2)Status Window:打开或者关闭状态窗口。

(3)Project Makefile:以只读方式打开当前项目的makefile文件。

(4)Output Listing:以只读方式打开当前项目的输出列表文件。

(5)Map File:以只读方式打开当前项目的映射文件。

图 1.9 是Project(项目)菜单的示意图,该菜单包含了用于控制ICCAVR项目设置的操作命令,其详细说明如下所示。

图 1.8 View菜单

图 1.9 Project菜单

(1)New:创建一个新的工程项目。

(2)Open:打开一个已经存在的工程项目。

(3)Open All Files:打开选定工程的全部文件。

(4)Close All Files:关闭当前全部打开的文件。

(5)Reopen:重新打开一个最近打开过的工程项目。

(6)Make Project:编译当前工程项目。

(7)Rebuild All:重新编译当前工程项目。

(8)Add File(s):添加一个文件到当前工程项目中。

(9)Remove Selected File(s):从工程项目中删除选中的文件。

(10)Options:打开工程项目编译选项菜单项。

(11)Close:关闭当前工程项目。

(12)Save As:使用新名称保存当前工程项目。

Options(选项)菜单是Project菜单中最重要的菜单项,其用于设置当前项目的相关编译参数,包含了 4 个菜单页,其中最常用的两个菜单页如图 1.10 和 1.11 所示。

如图 1.10 所示是Options菜单选项中的Compiler菜单页,常用的设置是选择项目的“OutputFormat”,通常情况下选择“COFF/HEX”即可,选择该选项生成项目对应的.COFF文件和.HEX文件,前者用于调试,后者用于对ATmega128 编程。

如图 1.11 所示是Options菜单选项中的Target菜单页,常用的设置是选择使用的具体器件、选择当前项目的类型是应用代码还是Boot Loader代码,以及选择PRINTF的数据类型。相关参数说明如下所示。

(1)small:只支持%c、%d、%x、%X、%u和%s格式。

(2)long:支持%ld、%lu、%lx、%lX。

(3)float:支持%f,该选项会占用很大的内存空间。

图 1.10 编译菜单页

图 1.11 目标菜单项

图 1.12 是RCS(源控制)菜单的示意图,该菜单中包含了与ICCAVR文件控制相关的操作命令,其详细说明如下所示。

(1)Check In Selected File(s):检查当前工程项目中的所有选择文件。

(2)Check In Project:检查当前工程项目中的所有文件;

(3)Diff Selected File:显示选择文件的差异。

(4)Show Log of Selected Files(s):显示当前文件的修改记录。

图 1.13 是Tools(工具)菜单的示意图,该菜单中包含了对ICCAVR的外部相关工具进行控制的操作命令,其详细说明如下所示。

图 1.12 RCS菜单

图 1.13 Tools菜单

(1)Environment Options:环境和终端仿真器选项。

(2)Editor and Print Options:编辑和打印选项。

(3)In System Programmer:在系统编程器,它提供程序代码下载的应用,需要相应的下载硬件配合。

(4)AVR Calc:AVR计算器,可以计算串口波特率、定时计数器的定时常数等。

(5)Application Builder:应用向导程序,可以生成硬件的初始化代码。

(6)Configure Tools:添加外部工具到工具菜单。

(7)Run:以命令行方式运行一个外部程序。

Help菜单是提供ICCAVR软件相关信息、帮助手册、升级及注册帮助等操作命令的菜单,在此不再赘述。

3.ICCAVR的扩展关键字

ICCAVR除了支持标准的C语言关键字之外,还支持一些扩展关键字,用于编译诸如中断之类的特殊操作,这些关键字的说明及用法如下:

“interrupt_handler”关键字必须在函数之前定义,用于说明该函数是中断操作函数,编译器会在中断操作函数中生成中断返回指令reti来代替普通返回指令ret,保存和恢复函数所使用的全部寄存器,并且会根据中断向量号vector number生成中断向量地址。

“ctask”关键字指定了函数使用非挥发寄存器来保存和恢复代码,其典型应用是在RTOS实时操作系统中让RTOS核直接管理寄存器。

“data”关键字用于改变数据段名称,使其与命令行选项相适应,该关键字在分配全局变量至EEPROM中时必须被使用。

4.ICCAVR的库函数

ICCAVR也提供了许多现成的库函数供用户调用,使用这些函数可以大大提高代码的编写效率,在使用这些库函数之前必须先引用以下对应的头文件。

(1)io*.h:IO寄存器操作函数的头文件。

(2)macros.h:宏和定义声明的头文件。

(3)assert.h:宏声明的头文件。

(4)ctype.h:字符类型函数头文件。

(5)float.h:浮点数原型头文件。

(6)limits.h:数据类型的大小和范围头文件。

(7)math.h:浮点运算函数头文件。

(8)stdarg.h:变量参数表头文件。

(9)stddef.h:标准定义头文件。

(10)stdio.h:标准输入/输出I/O函数头文件。

(11)stdlib.h:内存分配函数的标准库头文件。

(12)string.h:字符串处理函数头文件。

5.使用ICCAVR

由于ICCAVR自带项目管理器,所以用户不需要在项目管理上花费过多的精力,只需要按照以下步骤操作即可建立一个属于自己的项目。

(1)启动ICCAVR,建立工程文件并且选择器件。

(2)建立源文件、头文件等相应的文件。

(3)将工程需要的源文件、头文件、库文件等添加到工程中。

(4)修改启动代码并且设置工程相关选项。

(5)编译并且生成HEX/COFF或LIB文件。 r5AMWhKEszDRhtjS2weZ/zPQ9RdoC2Gfc+frRU5mrkMBlBC6KVnCIs8S4YmwCZxq

点击中间区域
呼出菜单
上一章
目录
下一章
×