APP下载

基于AVR USB接口的温度测量系统设计

2011-11-03裴文莲余小昕

中国新技术新产品 2011年14期
关键词:驱动程序端口编程

裴文莲 余小昕

(安徽理工大学计算机学院,安徽 淮南 232001)

1 、引言

ATmega8是基于增强的AVR RISC结构的低功耗8位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间,AT-mega8的数据吞吐率高达1 MIPS/MHz。USB接口以其数据传输快、连接简单、易于扩展、支持热插拔等特点已成为外设与PC通信的主要方式之一。灵活轻便的Atmega8可以利用中断和串行通信技术实现模拟USB通信。

2 、系统硬件设计

2.1 硬件总体设计

设计所用的传感器是DALLAS公司生产的一线式数字温度传感器DS18B20,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃。 核心模块是AVR高速单片机Atmega8。AVR单片机是新一代基于哈佛结构的高速RISC微控制器,具有速度快、价格低、可靠性高,I/O口线驱动能力强和片内集成外设资源丰富等特点,其内部集成有可进行ISP下载编程的Flash,EEPROM、熔丝位和锁定位。AVR单片机的ISP下载电缆制作简单、成本低廉,还有免费的下载软件 (例如PonyProg)支持。Atmega8内部集成了8路10位的ADC,外部中断通过引脚INT0和INT1触发。电路板的硬件资源中附加一个USB接口,便于主从之间进行数据交换。

2.2 "软USB"的实现方法

在不是使用USB控制器的情况下,实现AVR单片机进行类似USB形式的数据传输,需要在硬件上加以添加器件。如图一,在Data-上接一个阻值为1.5K的上拉电阻。该上拉电阻实现的是低速USB数据传输。AVR单片机由于实现的是"软USB",由于本身处理能力所限,只能实现低速数据传输,故该上拉电阻不可缺省。此外,系统要使用12 MH2晶振,这样,经过8分频后才能使用USB低速1.5 MB/s的数据传输速率。

由于USB接口的电压数值为3.6 V。而电脑USB端口的输出电压为5 V,因此,为了电平匹配,本电路特使用3.6 V稳压二极管D1、D2来分别与D一、D+相连,其中两端口分别通过68Ω的电阻与PD4以及PD2相连;

因为涉及到外设,所以需要安装驱动。本文所选择的驱动程序为LibUSB-Win32。该驱动程序可应用于Win2000、WinXp等Windows操作系统上。并允许用户通过直接调用函数的方式对Windows系统上的任意一个USB设备进行访问。该驱动程序具有以下特点:能够任意与已安装的USB设备进行通信;可用作自己开发USB设备的驱动程序;支持批量和中断传输;支持USB规范的所有标准设备请求;支持USB设备制造商的自定义请求。

2.3 原理图设计

针对本设计所要完成的任务,以Atmega8为核心,设计电路图并制作开发板。原理图的绘制分成两层来设计:显示部分(DISPLAY)和微处理器部分 (MCU)。DISPLAY层主要有LED和LCD显示器;MCU层主要有Atmega8核心器件、USB接口电路、AD转换部分、相应的串口以及必要的周边电路。MCU层中的USB接口与微处理器的连接如图一所示。

图一USB与微处理器的连接示意图

3 、软件部分设计

使用GCC可以方便的编译avr程序

3.1 系统流程

软件设计及其实现是基于WINAVR编程环境,代码则利用C语言实现。AVR单片机主要完成两个功能:温度测量和数据传送。温度测量主要是对电压信号进行采样,以确定温度的离散数值。传送数据则是将测量的数据通过AVR所模拟的USB端口传至PC端,以便PC端进行数据的显示。其主要流程如图二所示。

3.2 温度数据的采集

ATmega8内含一个10位逐次逼近型ADC。该ADC可与一个8通道的模拟多路复用器连接,以对来自端口C的8路单端输入电压进行采样。单端电压输入以0 V(GND)为基准。对于连续AD数据采集,采用的是中断法与微处理器进行通信,即一次AD转换结束后便产生中断。设计时可利用如下函数对电压数值进行采集:首先定义全局变量Value,储存所测量到的温度数值,并将该值作为USB端口的发送

3.3USB数据传输

为了利用ATMEGA8模拟"软USB",在搭建好了开发环境的前提下,在WINAVR将AVRUSB的文件配置文件夹USBDRV放置在源文件目录下。USB接口的函数的实现:

(1)初始化函数:使用AVRUSB前,通常都要通过调用初始化函数usbInit()来对USB端口进行初始化,调用该函数之前,考虑到该程序可能由其他程序段跳转而来,因此,初始化之前,一般要将USB端口进行重新复位,复位只需要将D-和D+端口的电平拉低即可;

(2)用户程序的主循环中需要定期调用USB事件处理函数。USB事件处理函数在没有USB事件需要处理时将直接返回,否则将调用内部函数来进行相应的事件处理,最后再将数据传递到用户接口函数中,用死循环实现即可。一次USB通信的超时时间是50ms。所以,在编程时应注意其他事件不要占用太长的时间。

(3)事件接口函数:在用户程序中,需要编写USB用户事件接口函数,以完成USB通信。AVRUSB将用户接口简化为以下3个函数:usbFounctionWrite ()、usbFounctionRead()、usb-FounctionSetup(),参照功能参数表,将相应位置1或0。

(4)编译文件的配置 在WINAVR软件环境下,还需要配置MakeFile,以用于编译编程文件。

结束语

基于AVR Atmege8 USB技术的温度测量和显示系统由于使用了一体的软USB技术,其硬件电路设计更加小巧稳定。经使用和测试证明:该系统具有性能稳定、价格低廉等特点。重要的是,本系统提供了一种低成本的USB设计方案,同时较详细的提供了温度测量系统设计流程和部分代码,在GCC环境下用C语言实现所有的软件设计很简单易行。从而为中低成本的USB设备开发提供了一个较好的思路。

[1]张洪,董秀成.基于AVR单片机的通用USB接口模块设计.国外电子元器件,2008(05).

[2]佟长福.AVR单片机GCC程序设计.北京航空航天大学出版社,2006.

[3]孙福文.基于AVR USB接口的温度测量系统下位机设计.电子元器件应用,2008(11).

[4]王晶,邱建东,甘艳.基于AVR的USB通信模块设计.铁路计算机应用,2009(5).

猜你喜欢

驱动程序端口编程
编程,是一种态度
编程小能手
纺织机上诞生的编程
计算机硬件设备驱动程序分析
端口阻塞与优先级
初识电脑端口
8端口IO-Link参考设计套件加快开发速度
基于MPC8280的CPU单元与内部总线驱动程序设计