摘要:采用14引脚封装的tinyAVR单片机、广泛应用于手机中的液晶显示模块Nokia3310 LCD和深受欢迎的单总线3引脚数字温度传感器DS18B 20,构建了一款具备实用性和趣味性的,既可读数、又可读图的双模式温度绘图仪。
关键词:tinyAVR单片机;Nokia3310 LCD温度绘图仪;数字温度传感器
1 温度绘图仪介绍
温度绘图仪采用温度传感器和LCD显示屏,以摄氏度和华氏度为刻度显示环境温度,同时也能显示传感器测量和记录下来的最低温度值和最高温度值。图1为温度绘图仪的方框图。利用一个Nokia3310 LCD模块来显示读数,一个按钮开关用来切换屏幕显示模式。第一种模式
为读数模式,交替显示摄氏温度值和华氏温度读数;第二种模式为绘图模式,显示一张由本系统绘制的,温度随时间变化的函数曲线图。本系统利用一节1.5 V干电池供电。
2 Nokia3310 LCD模块简介
Nokia3310的液晶显示模块是一种小巧的图形式LCD模块,在多种嵌入式系统的开发中被广泛应用。它与多种单片机的连接方便,应用非常广泛。这种LCD模块的大小为38 mm×35 mm,有效显示面积为30 mm×22mm,显示分辨率为84×48。该模块是利用一片专用控制器/驱动器芯片PCD8544设计的,能够驱动和显示48行84列的图像,可以通过标准的SPI总线方便地与外界接口。其他重要特性如下:
◆只需要一个外围元件,在VOUT和GND之间连接一个1~10μF的电容;
◆功耗很低,适用于电池供电系统;
◆电源电压范围:2.7~3.3 V;
◆工作温度范围:-25~70℃。
2.1 Nokia3310 LCD的接口信号
Nokia3310 LCD模块通过SPI总线与单片机连接,许多tinyAVR单片机都有这种接口。不过也有少数型号tinyAVR单片机没有这种接口,或是把这种接口用于与单片机的其他外围器件通信。这并不意味着,这种LCD模块就不能与此类单片机对接使用,可以采取软件方式来模拟实现SPI软接口。以这种方式,可以在任何一种单片机的任何通用I/O引脚上连接该LCD模块。SPI软接口最少需要4条I/O引脚。图2是Nokia3310 LCD模块引脚功能图。下面详述一下各条引脚的功能。
Nokia3310 LCD模块的引脚有:
◆VCC:电源输入端。连接稳压电源(2.7~3.3 V)。
◆SCK:串行时钟输入端。速率为0~4 Mbps,连接 单片机I/O引脚。
◆SDI:串行数据输入端。连接单片机I/O引脚。
◆D/C:数据/命令模式选择端。连接单片机I/O引脚。
◆SCE:片选端。可以连接到单片机I/O引脚,或者接地(表示总是选中该LCD),可根据具体情况设置。
◆GND:接地引脚。
◆VouT:VLCD端,通过10μF的电容接地。
◆RST:控制器PCD8544的复位端。连接单片机I/O引脚。
2.2 PCD8544功能描述
PCD8544是一个低功耗CMOS的LCD控制器/驱动器,用于驱动48行84列的图形式LCD显示屏。该型号在单一芯片之内就可以实现LCD显示器所需的全部功能,包括片载的LCD供电和偏压发生器,它不仅功耗低而且所需外围元件少。
3 设计原理
本项目的目标是设计一个用摄氏和华氏显示环境温度的温度显示系统,并且能够显示最低温度和最高温度值;该系统能够按照时间记录温度的变化;系统应选择电池供电,以方便携带或安装在任意位置。
温度绘图仪的电路原理图如图3所示。由于系统中采用了Nokia3310 LCD模块,它需要的电源电压为2.7~3.3 V。系统的电源电路中采用了一片DC-DC升压型电压转换器TPS61070(即为开关式直流稳压器)提供一个3.3 V的直流电源,因此可以选用一节1.5 V干电池供电。电池被连接到SL3(2针)插口上。由于没有极性保护电路,电池安装时需要特别注意。Nokia3310 LCD模块通过SPI总线连接到SL1(8针)插口上。
系统中最重要的元器件是温度传感器,对于该器件有以下几种选择:热敏电阻、热电偶或带隙半导体传感器。其中半导体传感器是最容易实施的。
半导体传感器种类很多,有的直接输出与温度成比例的模拟电压,有的直接输出摄氏或华氏温度的数值。这里选用了一种单总线温度传感器DS18B20,它把温度转换为9位二进制数字来表示摄氏温度或者华氏温度。温度读数的分辨率为0.5℃或0.9°F,测量范围为-55~125 ℃,或者-67~257°F。该传感器每次需要20 ms的转换时间。详细资料可以参考DS18B20的技术手册。
转换后的温度值可以从单线接口读出,在图3中,SL2安装在DS18B20传感器上的插口。电路设有4个按钮开关S1~S4,不过在这个项目中只用到1个开关。这个电路采用了贴片封装的tiny44单片机ATtiny 24/44/84-SSU,它具有14条引脚和4 KB程序存储器。
每当接通电源或者复位时,单片机将初始化显示器,并查询DS18B20传感器,显示华氏和摄氏温度。同时保存检测到的温度最低值和最高值。用户可以随时按下开关,系统会切换到另一种显示模式,显示一张温度随时间变化的曲线。系统连续地读取温度值,但是每隔10 min才保存一次温度读数,并绘制在显示屏上。系统可以保存最多40个读数,因此可以显示最近400 min内的温度变化情况。保存在缓冲存储区中的读数不停地被替换,以便保留新值和冲掉旧值。
4 硬件电路的搭建
线路主要布在元件面(顶面),在焊接面(底面)只有很少的跳线。温度绘图仪电路板的元件面和焊接面分别如图4和图5所示。焊接TPS610 70芯片非常关键,需要特别小心。从焊接稳压器芯片及其外围元件开始,以便在安装其他元件之前,测试TPS61070的输出电压。温度绘图仪显示屏的不同显示模式如图6和图7所示。
5 C语言程序设计
这里提供给大家经过编译的利用C语言编写的源代码程序(软件集成开发环境为WinAVR,C语言编译器为AVR-GCC)。程序需要运行在1 MHz的时钟频率下。
采用编程器STK500在ISP编程模式给单片机烧写程序。单总线温度传感器DS18B20是通过单总线接口完成读/写功能的,这种总线接口在单片机上是利用软件模拟来实现的。可以参考温度传感器的使用手册以获取它的各种命令。这里仅仅对源程序代码中较重要的部分作如下注释:
在ds1820_read函数中读取DS18B20,经过必要的处理后,返回一个10倍于实际摄氏温度值的数值。无限循环构成程序的主体,其操作模式主要有两种:第一种模式是以摄氏度和华氏度交替显示当前温度值,同时显示最大值和最小值;另一种模式是用图形方式显示温度的变化。曲线图的绘制采用了graph1函数,它是通过提取数组data的数值绘制像素点的。Setlcd函数用于在LCD屏幕上绘制坐标轴。S4开关(连接单片机PA1引脚)用于切换上述两种模式。从绘图模式到温度模式的相互切换并不会删除状态信息。程序代码的其他部分用于处理LCD的初始化和绘图算法。
6 独立运行
温度绘图仪采用一节或两节5号或7号规格的干电池,可以是碱性电池,或者可充电的镍氢或镍镉电池。一旦接通电源后,显示器开始显示温度值。可使用开关在读数模式和绘图模式之间切换。