基于i2c总线的数字电压表设计内容摘要:
采集。 2 .ADC0804的规格及引脚图 8位 COMS逐次逼近型的 A/D转换器; 三态锁定输出; 存取时间: 135181。 s; 分辨率: 8位; 转换时间: 100181。 s; 总误差:177。 1LSB; 工作温度: ADC0804LCN—— 0℃― +70℃; ADC0804LCD—— 40℃― +85℃; 引脚图及说明如图所示: 图 9 ADC0804引脚图 /CS:芯片选择信号。 /RD:外部读取转换结果的控制脚输出信号。 /RD 为 HIGH 时, DB0— DB7 处于高阻抗; /RD为 LOW时,数字数据才会输出。 /WR:用来启动转换的控制输入,相当于 ADC 的转换开始( /CS=0 时),当 /WR 由 HIGH 变为LOW时,转换器被清除;当 /WR回到 HIGH时,转换正式开始。 CLK IN, CLK R:时钟输入或接振荡元件( R, C),频率约限制在 100KHZ— 1460KHZ 如果使用 RC电路 则其振荡频率为 1/( )。 /INTR:中断请求信号输出,低电平动作。 VIN( +)、 VIN( — ):差动模拟电压输入。 输入单端正电压时, VIN( — )接地;而差动输入时,直接加入 VIN( +)、 VIN( — )。 AGND, DGND:模拟信号以及数字信号的接地。 VREF:辅助参考电压。 DB0— DB7: 8位的数字输出。 VCC:电源供应以及作为电路的参考电压。 ADC0804与 89C51连接 (见图 10) 通过调节电位器来调节参考电压,使其稳定在 图 10 ADC0804 与 89C51 连接图 8 图 8 数字电压表原理电路图 9 在电压表中 A/D转换原理 把 ADC0804转换出来的数据转换成可显示的十进制数据方法如下: 以 5伏档为例,若测试端输入为 4伏,实际进入 ADC0804为 4V ( 1) 经 A/D转换后为 11001000B=C8H(查对照表)。 ( 2) C8经十进制转换为 0200,则令 R4=20, R5=00 ( 3) 再将此 0200 2=0400,令 R4=40, R5=00。 ( 4) 将小数点设在 D3上,并将其分别显示为: 0 4 0 0 D4 D3 D2 D1 ( 5) 若档位不同,只要移动小数点的位置就可以了。 表 5 ADC0804 电压输入与数字输出关系 十六进制 二进制 与满刻度的比率 相对电压值 VREF= 伏 高 4 位字节 低 4 位字节 高 4 位字节电压 低 4 位字节电压 F 1111 15/16 15/256 E 1110 14/16 14/256 D 1101 13/16 13/256 C 1100 12/16 12/256 B 1011 11/16 11/256 A 1010 10/16 10/256 9 1001 9/16 9/256 8 1000 8/16 8/256 7 0111 7/16 7/256 6 0110 6/16 6/256 5 0101 5/16 5/256 4 0100 4/16 4/256 3 0011 3/16 3/256 2 0010 2/16 2/256 1 0001 1/16 1/256 0 0000 0 0 0 0 按照上面转化规则即可实现数字电压表的数据采集、 A/D转换、十进制转化。 、 电压档位调节电路 直流 500mV档:由 LM324作为运放,对输入电压进行放大,放大 10倍,使输入到 ADC0804的电压范围在 05V之间。 直流 50V, 500V档:输入电压经由分压 1/ 1/100后送入 ADC0804。 交流档:交流电压输入进行分压,然后由整流桥进行全波整流,由三个电容滤波,输出 10 的直流电压再输入 ADC0804。 电压档位调节器有双层,上层作为电压输入,下层作为单片机判别档位。 图 11 电压档位调节电 路 、显示电路 本电路采用动态模式显示(见图 12)由程序控制 SAA1064使 MX MX2连接的两个三极管交替导通。 图 12 显示电路 硬件实物图 如图 13 把写完的软件烧写到 89C51芯片中,电路中所要用到的各芯片对号入座,插到电路板相应的插槽中即可进行调试与测试。 、 调试 打开电源开关,用另一个数字万用表做校准工作,先对 ADC0804的参考电压进行校准,调节电位器,使参考电压稳定在 ,然后对每个档位进行校准,也是调节各电位器,使显示值与另一个 数字电压表的显示值一致,按下按键 2,看 LED亮度是否变化;旋转电压档位,看 LED的小数点亮的位置是否会变化。 由于所使用的 A/D转换器误差为177。 1LSB,在此电路中的显示的精度为177。 ,因此,测量时最后一位会出现177。 2的跳变。 、测试 打开电源开关时,四个 LED都显示为“ 0”,把档位调节器调到待测档,在此档状态下, 按下按键 2,可以看到右边第 1个 LED显示数字,其数字即为 LED 的亮度等级,同时所有的 11 图 13 数字电压表的硬件实物图 LED的 亮度会随着数字不同呈不同的亮度。 把档位调节到 5V档,此时电路板上的两根测量线可以接上待测电压,进行电压测试,在测试状态下,按下按键 1,可进行数据储存, 12 如:测试电压显示为 ,按下按键 1,即把 这个数据存储到 AT24C01 中,当把档位再调到待测档,按一下按键 1,即可在次显示 ,这说明存储数据成功。 I2C总线的应用程序设计原理 、概述 下面是用软件实现 I2C总线控制数字电压表的显示和存储。 用单片机的两个 I/O口来模拟SDA, SCL 两条传输线上的传输时序,把从 A/D 转 换完的数据传送到指定的从器件,实现单片机对整个系统的控制。 、软件的整体构思 程序中用两个中断,一个用来控制 SAA1064T的输出电流以控制 LED 显示的亮度;另一个中断用来控制 E2PROM 的读写,在没有测试电压时此中断的产生进行读操作,在测电压时中断产生进行写操作(即进行电压值的存储 )。 模拟 I2C 总线的子程序设置了器件的入口地址,这样可以在使用各器件时进行调用。 、应用程序设计实例 、 模拟 I2C总线的程序设计 以 AT89C51作为 I2C总线的主控制器件,进行 I2C总线的模拟传输。 程序 是严格按照 I2C传输协议要求来编写的,主要控制 SCL和 SDA两条信号线的时序来完成寻址和数据的传输。 本设计的要求是对采集的电压进行显示,因此,传输速度要求不是很高,在程序中采用标准模式编写即参照表 1参数值进行时序设计。 模拟 I2C总线的设计程序可以写成一个软件包的形式,只要在主程序中加上文件名,就可以进行直接调用。 I2C 总线的初始化及通用读、写子程序:根据表 1 的参数值写 I2C总线启动子程序、数据传输(读、写)子程序,时序的调整是用 NOP指令,由于 CPU的电路中所用的晶振为 12MHZ,则可以用 4个单片机周期( 1μ S)指令“ NOP”模拟 SCL时钟高电平的宽度。 图 14启动 I2C总线( START)子程序流程图 图 15结束总线( STOP)子程序流程图 开始 SDA 置 1 SDA 置 0 SCL 置 1 创建 延时 4us 创建延时 S SCL 置 0,钳住总线 ,准备发送数据 结束 开始 SDA 置 0 SDA置 1 SCL 置 1 创建延时 4μ S 创建延时 S 结束 SDA 置 0 SCL 置 0 13 图 16 应答信号( MACK)子程序流程图 图 17 写 N 字节数据子程序流程图 、数字电压表程序设计 本程序设计是以 AT89C51 为中心,读取前端 A/D 转换的数据,进行数据十进制调整,然后进行显示,必要时进行数据存储。 硬件中设计了两个按键,在程序中对应两个中断,其分别是用来控制 LED亮度和 AT24C01的读写。 量状态。 当 =0 时,待测状态,此时,不能进行电压测量,只能响应外部两个中断。 响应中断 0时, LED亮度变化,同时显示亮度等级;响应中断 1,读取 24C01数据并进行显示。 =0时,小数点在最低位(即第 4个 LED的小数点亮) 当 =0时,第 3个 LED小数点亮,当 =0时,第 2个 LED小数点亮。 程序初始化,开机显示为 0000。 主程序流程图见图 19。 各个调用子程序流程图: 中断 0:此中断为设置电流输出等级(即 LED 的亮度调节),主要是控制 SAA1064 中的状态字节寄存器 00H的值,其取值范围为: 07H77H,因此,有八级亮度显示。 中断 1:此中断控制 24C01的读写,当 =0时,进行读 24C01,当 =1时写 24C01。 N N N Y Y Y Y 结束 开始 SDA 置 1 使 C=SDA SCL 置 1 ACK 置 0 SCL 置 0 ACK 置 1 C=0? N 开始 启动 I2C 总线 送被控器地址 有应答。 发送一个字节数据 送单元地址 有应答。 有应答。 数据发送完。 结束 发 送停止信号 延时 10ms 等待写完 N Y 14 图 18 读 N 字节数据子程序流程图 图 19 主程序流程图 Y 图 20 中断 0 子程序流程图 Y N Y Y N 开始 启动 I2C 总线 送被控器地址 有应答。基于i2c总线的数字电压表设计
相关推荐
务器端组件架构技术。 借助于 EJB,开发者能够轻松构建企业级的,分布式组件应用。 与此同时,在不用自身开发复杂分布式组件框架的前提下,开发者能够开发架构灵活,运行可靠及安全的应用系统。 对于服务器端开发而言, EJB 引入了快速应用开发( Rapid Application Development,RAD)模型。 因此,在 Java 应用服务器提供商提供的分布式基础框架的基础上,开发者能够快速
ovieid] [int] IDENTITY(1,1) NOT NULL, [moviename] [varchar](50) NOT NULL, [actor] [varchar](50) NOT NULL, [director] [varchar](50) NOT NULL, [price] [int] NOT NULL, [time] [nchar](10) NOT NULL,
度 主键否 说明 ID int 4 是 数据库流水号 bigName varchar 50 商品大类别名称 creaTime dateTime 4 创建时间 商品小分类信息表结构设计 类信息表主要用来保存商品类别中的小的类别信息,包括大分类信息表的编号、小分类名称以及创建时间。 表 tb_smallType 字段名称 数据类型 字段长度 主键否 说明 ID int 4 是 数据库流水号
含一个锂电池,断电情况运行十年以上不丢失数据。 2.计秒、分、时、天、星期、日、月、年,并有闰年补偿功能。 3.二进制数码或 BCD 码表示时间、日历和定闹。 4. 12 小时或 24 小时制, 12 小时时钟模式带有 PWM 和 AM 指导,有夏令时功能。 5. MOTOROLA5 和 INATAEL 总线 时序选择。 6.有 128 个 RAM 单元与软件音响器,其中 14
与电话网络联接,报警时能迅速拨打存 储 的号码。 (3)可通过移动电话与移动电话网络连 接,实现向外界报警。 (4)可预先存储 10 组号码,且掉电不丢失。 (5)可录下 20s 报警资料,可以更改,且掉电不丢失。 (6)传感器采用无线数据通信。 (7)有报警记忆功能。 (8)可实现异常情况的自动复位。 总体设计方案 根据系统功能的要求和系统构成的需要来设计报警器,其总体设计方案如图 所示。
回 OK为例。 调试界面如图 3所示。 发送 : AT 返回值 : 0D 0A 4F 4B 0D 0A 分析上述串口侦听过程可知 , AT指令实质是以字节发送,回车符代表指令的结束, 模块接收到回车符后 开始执行指令 ,指令发送过程中,字节间允许有任意间隔。 模块接收到指令字节后,会立即答复以相应的握手信号。 模块执行指令后的一切返回值(无论指令执行后的