带ATiny的时间测量仪(共7页)_第1页
带ATiny的时间测量仪(共7页)_第2页
带ATiny的时间测量仪(共7页)_第3页
带ATiny的时间测量仪(共7页)_第4页
带ATiny的时间测量仪(共7页)_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、带 ATiny 的时间(shjin)/间隔(jin g)测量仪 作者(zuzh):Vladimir Mitrovic, Croatia 本项目要说明的是,用很少的硬件就能做一 个多功能时间和间隔测量表,还带易于读数 的 LCD 显示器的。 一种 ATtiny2313 型号的 AVR 微控制器可以测量输入针脚 PD2 和 PD3 的脉冲的两个连续逻辑电平转换之间的时间间 隔。在微秒级,测量时间间隔的范围为 10 微 秒到 30 分钟,测量精度为 1 微秒。 在毫 秒级,测量时间间隔的范围为 1 毫秒到 4 小 时,测量精度为 1 毫秒。 在电路中,DIP 开关组 S2 决定了仪器的设 置,具体如

2、下: S2 1-8: 选择脉冲边沿(上升或下降)开始测量。 S2 2-7: 选择脉冲边沿(上升或下降)结束测量。 S2 3-6: 测量单位和精度(微秒或毫秒) S2 4-5: 测量模式(连续或单次/保持) 开关组功能和选项的详细说明 见表1。 测量结果显示在一个 LC 显示屏上,分两行显 示共 16 个字符。 第一行显示所选的时间间 隔、测量单位和测量模式,第二行显示测量结 果(时间)。 表 1 S2 1-8 S2 2-7 S2 3-6 S2 4-5 标准时间间隔 关 关 x x 从下降边沿到下一个下降边沿。 关 开 x x 从下降沿到上升沿(2 个正脉冲的时间间隔)。 开 关 x x 从上升

3、沿到下降沿(正脉冲持续时间)。 开 开 x x 从上升沿到下一个上升沿。 x x 开 x 测量单位为 s (t(min)=10s, t(max)=1800s (30m)。 x x 关 x 测量单位为 ms (t(min)=1ms, t(max)=14400s (4h)。 x x x 关 连续测量:当一次测量已结束且其结果已显示时, 开始新的一次测量 x x x 开 单次测量:当一次测量结束其结果显示时,程序停止。 (x = 无关项) 元件列表 电阻器 R1,R3 = 10k R2 = 1k R4 = 39 R5 = 1k8 P1 = 10k 预设 电容器 C1 = 22F 35V radial

4、 C2,C3,C6 = 100nF C4 = 47pF 微调 C5 = 22pF 半导体 D1 = 1N4001 D2,D3 = BAT41 D4 = 低电流 LED IC1 = 78L05 IC2 = ATtiny2313, Elektor Shop # 080876-41 其他 S1 = 触觉开关,6mm 尺寸 S2 = 4 路 DIP 开关 K1,K2 = PCB 安装端子,引脚间距 5mm (0.2“) K3 = 10 路方形针座 X1 = 8MHz 石英晶体 LCD1 = LCD 模块,2 行,16 字符 LCD 针座 16 路 1 行 0.1 间距 LCD 插座条 16 路 1 行

5、 0.1 间距 PCB, 参考 080876-I LED D4 在测量(cling)期间会亮灯,而在两次测量的 间隔(jin g)以及 Hold 期内则熄灭(xmi)。 其主要目的是, 在较长的测量期内指示测量正在进行中。 当然你也,可以略去 LED 和 R5。 在微秒级,ATtiny2313 内的 8位 计时器/计数 器 0 设置为普通模式,比较匹配输出 B 处在开动状态,计时器计算预分频 的系统同步脉冲发生器脉冲。 由于使用了一个 8MHz 石英晶体 且分频器的除数设定为 8 ,计时器/计数器 0 的值每 微秒增加 1。 输出比较寄 存器 B 设定为 255,每到 第 256 个脉冲时会触

6、发输出 比较针脚 (OC0D) 。OC0D 针脚内在地与计时器/计数器 1 的输入端相连,而计时器/计 数器 1 计算 OC0D 上收到的 这些脉冲,计算精度为 16 位, 如此我们便制作了一个 25 位的 硬件计数器(16 位 T/C1+OC0D 位 +8 位 T/C0)。 软件能实现额外的 6 位精度,在测量过程 中,程序循环运行,等待停止测量信号,且不 断收集计时器/计数器 1 的溢位旗标 TOV1。 如果设定了 TOV1 的值,则程序将 6 位 SW 计数器的值增加 1,并且清除 TOV1。 这 里不用中断,因为中断可能会延迟识别停 止状态。 一个 31 位的计数器可以计算高达 2,1

7、47,483,647 微秒。 出于实用的考虑,微秒级最大测量(cling)时间定为 1,800,000,000 微秒(30 分钟)。 毫秒级也 是通过大致相同的方式(fngsh)实现,除了将系统时钟 的分频(fn pn)系数设定为 8 外。 在测量后,把结果 除以 125,得出最大值 17,179,869 毫秒。 同 样出于实用的考虑,毫秒级最大测量时间定为 14,400,000 毫秒(4 小时)。 当 ATtiny 的针脚 PD2( 触发斜率取决于 S2 1-8 的 设置)识别到一个下降或 上升边沿时,测量开始, 同时执行外部中断向量 INT0。 当针脚 PD3( 触发斜率取决于 S2 2-

8、7 的设置)识别到一个下 降或上升边沿时,测 量停止,同时执行外 部中断向量 INT1。 为该项目编写的程序可以从1免费下载。 程 序是用 BascomAVR 编写的,内嵌有中断汇 编码并插入了对计时关键的程序。 在主循环 内,程序一直监视 S2 中的开关,启动测量并 显示测量结果。 与之前的读数相比,开关的 设置一发生变化,新的测量级别、模式和/或 开始/停止斜率就将被确定,显示屏上的第一 行显示内容将会相应地更新。 在量测例行程序的开头,计时器/计数器以及 软件计数器(对 26-31 位)被清零,OC0B 位 被重置,且外部中断 INT0 启动。之后程序 循环运行,等待 INT0 中断发生

9、,触发 INT0 中断程序。在该程序中,计时器/计数器 0 启 动,一些计数器被设置成初始值,LED D3 亮 灯,INT0 中断被关闭避免再次触发,而 INT1 中断被开启。程序继续循环运行,等待 INT1 中断发生,INT1 发生将触发 INT1 中断程序。 在该程序中,计时器/计数器 0 被停止,且往 后的外部中断被关闭。 程序开始时,计时器/计数器 1 被启动,并且 在程序运行过程中无需停止和重新启动;因为 它计算来自计时器/计数器 0 的脉冲,因此它 将与计时器/计数器 0 同时开始和停止。 当测量程序探测到两个外部中断都被关闭时, 一次测量即告完成。测量结果从硬件 (HW) 和软件

10、 (SW) 寄存器收集得来,LED D3 被关 闭,进行一些计算后测得的时间间隔显示在显 示器的下一行(第二行)。 至于精确度,计数器的硬件部分计算时钟脉 冲,因此不可能有错误计数。 软件部分计算 计时器/计数器 1 溢位,会有几个周期数的延 迟。 但是,当计时器被停止时,HW 部分能 实现与硬件部分同步。 INT0 与 INT1 中断程 序是精心编写的,从程序开始到计时器/计数 器 0 在一个程序开始、在另一个程序停止这段 时间内,延迟是完全相同的。 在外部中断被 触发到中断程序开始启动这段时间内,会有短 时间的延迟。 这段延迟的长短取决于中断被 触发时正在被执行的指令。 指令在 1-4 同

11、步 脉冲发生器周期内执行,因此差异最大可达 3 个同步脉冲发生器周期。 但是,由于计时器/ 计数器 0 计算的系统时钟要除以 8,一次在两 个级别(微秒和毫秒)的最终计数仅产生一个 1 的误差。 因此,对总体精度有显著影响的 唯一因素就是晶体精度 - 考虑当您在显示屏上 看到 t=123456789 s 的情形。 第二个需要(xyo)考虑的是测量时间,在毫秒级,测 量时间(shjin)可能持续几个小时。 因此(ync)一个特别的 SW 计数器在等待循环中(在测量期内有两个 等待循环;等待开始信号和等待停止信号)被 启动。 该计数器可能计算到预先设定的测量 时间的最大值,在这种情况下,计数器停止

12、继 续测量,并显示 t14400000。 起初,测 量时间的最大值被设定为允许的最大值,即微 秒级为 30 分钟,毫秒级为 4 小时。 与其他开关一样,测量开始前,读取 S2 4-5。 但是,如果该开关被关闭(并且单次/保持模 式被激活)则程序以另一种方式运行: 在等待开始信号时,测量时间最大值计数器被 阻止,但在等待停止信号时(在等待一次非重 复的脉冲发生时,允许无限时等待时间,尽 管脉冲持续时间仍被限制在测量时间最大值之 内),它被再次开启。 当测量结果显示在显示屏上时,程序在循环中 等待,通常监视 S2 4-5,一旦打开开关,会立 即继续运行。 供应给该项目的 TmeterElektor

13、.bas 程序应 在第一次使用前写入 ATtiny2313 微控制器。 必须确保为外部晶体谐振器 (CKSEL31,0 = 1111) 的Flash 熔丝位 CKSEL3.0 设一个合 适的值,因为默认选择的是内部 RC 振荡器。 晶体的频率必须刚好等于 8,000 MHz,这非常 重要,因为这决定了总体精度。 使用一个微 调电容器 C4 用来微调晶体频率。 如果您对 晶体的频率很满意,则用一个固定电容器代 替 C4。 您也可以用一个精确的石英振荡器来 驱动微控制器;此时可不用 C4、C5 以及 X1 ,而把振荡器的输出端连接到 XTAL1 的输入 端。 调节 P1 以获得最佳的显示对比度。

14、在程序中,起初测量时间的最大值被设定为 常数: Const Tmax_us_default = 1800 max measuring time for us range s Const Tmax_ms_default = 14400 max measuring time for ms range s 推荐使用(shyng)上面所列的值作为测量时间最大值, 当然用户(yngh)可以用适当的比较小的值来代替这些 推荐值,例如(lr): Const Tmax_us_default = 60 max measuring time for us range s Const Tmax_ms_default

15、 = 300 max measuring time for ms range s 这样就会把测量时间的最大值缩短到 60 微秒 (微秒级的情况下)和 300 秒(毫秒级的情 况下)。 当然,改变这些最大值之后需要重 新编写程序并把改写的程序重新写入微控制 器。 选择测量时间的最佳最大值非常重要, 因为如果输入电平不变时(或者,如果电平跃 迁发生过于缓慢时,程序将等待长达两倍的测 量时间最大值),程序循环运行并等待,等待 的时间等于测量时间最大值。 改变测量时间最大值的另一个方法是在微控 制器的 EEPROM 中把合适的值编成 16 位无 符号的二进制值,参见表 2。 这些值应以秒 为单位。 程

16、序的原理如下: 如果 EEPROM 为空 (FFh),则使用程序中预 先设定的测量时间最大值。 如果微秒级的 EEPROM 的值大于 1800,则 使用程序中为微秒级预设的测量时间最大值。 如果毫秒级的 EEPROM 的值大于 14400,则 使用程序中为毫秒级预设的测量时间最大值。 任何在允许范围内的 EEPROM 值将被使用, 这种情况下就不是用程序中为该测量级别预设 的测量时间最大值。 表 2 EEPROM 数值 EEPROM 评价 000 0000 LSB 最大微秒级测量时间 s 000 0001 MSB 000 0010 LSB 最大毫秒级测量时间 s 000 0011 MSB 在主程序循环开始时,将读取配置开关组。 长时间的测量可能会造成混淆,因为在正在进 行的测量未结束且测量结果未显示出来之前, 显示屏上显示的是旧的设置以及前一次的测量 结果。 您只要在新的开关设置之后立即重新 设置微控制器,即可加快这个过程。 如要重 新设置微控制器,按重设按键。 在单次/保持模式下,您可以按下述方法开始 新的测量: 开启(kiq) S2 4-5 以重新启动持续(chx)测量模式或重新 设置(shzh)微控制器以重新启动单次/保持模式(用 这种方法,您无法通过快速打

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论