免电源的电话使用计时器设计

出处:互联网 发布于:2011-09-03 22:22:37

  电话通信是通过声能与电能相互转换、并利用"电"这个媒介来传输语言的一种通信技术。两个用户要进行通信,简单的形式就是将两部电话机用一对线路连接起来。在通讯沟通频繁的今日,相信家家户户都有一台以上的电话机,您家必定发生过打完电话后未挂好而造成电话无法打进的困扰吧。或者您的家人或同事或朋友打电话一打就打了许久又不自知吧。

  下面为您介绍一款DIY制作:免电源电话使用计时器

  特点说明:

  DIY制作基本上要有着三个特点:

  一看就懂:指电路简单明了。

  一买就有:指电路容易取得。

  一做就成:指制作成功率高。

  免用外部电源,整个DIY电子产品是利用电话线电压来工作的。对通话品质无影响,所谓的无影响其实有着二个含意,一为无杂讯干扰,一为通话音量不增减。大家都知道多位数的LED七段显示得用扫描方式,如此一来会有脉冲电流杂讯产生,这点对听觉灵敏的耳朵而言是不可忽视的。另外整个电路的AC阻抗得非常的低,以免除声音的衰减。针对这二个要求,这里介绍一个简单又实用的电源取得电路供您参考。

  LED显示采用省元件的互补式,即一个LED七段显示器为共阴,另一为共阳,如此即可直接用单片机四个I/O直接推动而得到亮度了。

  利用OTP型单片机EM78P156来做控制,整个程序小小的,若您想更改或增加功能都是非常容易的。

  功能说明:当您的电话使用后没有放置好,或者是打电话聊长天的时候给您显示通话使用时间给予心理压力。基本上可算是有提醒指示及显示二大功能。

  提醒指示:只要LED七段显示器点亮则表示电话线正被使用,此时不是您正在打电话就是话筒未被放置好。

  显示:只要话筒一被拿起,电话回路被建立后单片机开始做计时及显示动作,以分为单位,可显示99分,之后又从0开始。若您要有精准的计时时可在电话通之后按CLR键,此时单片机清除计数从新开始计数显示。线路图如图1所示。

图1

  图1线路说明:整个线路说实在的,太小了,不过增一分则肥,减一分则瘦。还是老老实实的交待清楚吧,那么您要购买或更换电路时才不会走冤枉路。

  直接从电话线路取得工作电源,如图2所示。

  图2

  为一简单的检波器π型滤波器及基纳稳压器所构成,经过这5个元件的打点而得到从电话端看到的是一个AC低阻抗,同时隔离了单片机扫描LED七段显示器所衍生的杂音。另外5V的稳压二极管更提供了很稳定的电源供电路使用。有二个地方需注意的是5V稳压二极管得选购5W以上的比较不会过热,同时电感得选购直流内阻低的,愈低愈不会发热。

  LED七段显示器采用一共阴极,一共阳极的,故颜色及亮度选相近的。如图3所示。

  图3

  当PORT5输出为HIGH时,共阳极的LED七段显示器被选到,此时PORT6输出为LOW时LED被点亮,反之LED不会亮。当PORT5输出为LOW时,共阳极的LED七段显示器被选到,此时PORT6输出为HIGH时LED被点亮,反之LED不会亮。之所以要四个I/O都并联在一起是要保证有50mA的输出显示电流,不是四个并联使用的话则显示亮度会打折扣。

  单片机部份,见图4。

  图4

  选用台湾EMC公司的EM78P156OTP或8位单片机,不但指令少,程序撰写容易外,所需外部元件也是精简得很,我们不妨看看只需一个32768Hz的石英晶体及一个助振电容就行了,另外的1K电阻是关机泄放电流用的,可避免重置失效,而CLR按键是用来清除显示时间的。若您不再乎那拨号时间的误差则可以不用此元件的。

  程序列:

  程序说明

  DIY制作的软件程序长度仅有78个指令,整个程序可以分成5个段落来做说明,寄存器使用说明:

  DL-----子程序用寄存器

  MIN-----存放分钟资料寄存器

  SEC-----存放秒钟资料寄存器

  DD-----存放显示位数资料寄存器

  DDH-----存放显示资料寄存器

  AB-----存放ACC的副本

  RFB-----存放STATUS的副本

  ⑴ TCC中断子程序

  从0000--001B行为每秒发生的TCC中断子程序,其中0008--000B及0017--0019行为进入及离开中断子程序的ACC及STATUS保留动作。其中000C为每进入中断子程序就将SEC这寄存器予以进位。其中000D--0012为判断SEC寄存器是否大于59,是则将MIN寄存器予以进位并清除SEC寄存器。其中0013--0016为判断MIN寄存器是否大于99,是则将MIN寄存器予以清除,其中001A为清除TCC中断旗标。

  ⑵ LED字型转换程序

  从001C--0026行存放了字型转换表,可将0--9的数字转成相对的LED七字显示器的资料。

  ⑶ 显示时间长度延迟程序

  从0028--002B延迟程序,而0027及002C--002D为启动显示及关掉显示之指令。

  ⑷ 微控制器启始设定程序

  从002F--0039行对微控制器内部相关硬件做了必要性的设定动作。值得特别一提的是0035--0039行对TCC中断记数器予以设定成每秒中断。计算式如下:

  系统时基/(2周期模式×1秒×256进位)而得预除数为64.

  ⑸ LED七字显示器扫描主程序

  从003A--004E行为本软件程序之主程序部份,又可分三部份。003C--0040行为取得MIN的拾位数之值。0042--0046行显示MIN的个位数资料到共阳极的LED七字显示器上。0047--004D行为显示MIN的拾位数资料到共阴极的LED七字显示器上。希望这短短的程序难不倒您才是。

  程序撰写步骤:

  许多人习惯上撰写程序的过程是依照「先小而大」,「先难后繁」,「边测边写」等三项原则来从事的,底下便将电话使用计时器程序分成六个段落来完成。

  1 先给予心跳

  一般撰写程序碰到计时的工作时不外乎三个方式来解决:

  ①用TIMER计数器来产生中断来计时;②用POLLINGTIMER计数器来计时;③用计算程序指令个数来计时。

  这三个方式中以方式一为简单也为准确,故这里打算重要之秒的进位问题就交给TIMER计数器中断方式来解决了。

  这程序的目的是欲了解TCC中断能否满足秒的进位问题。

  程序说明:

  ⑴ 中断子程序

  从0008--000A行为简单的中断子程序,每做就将PORT6反向,离开前顺便清除中断FLAG.

  ⑵ 微控制器起始设定程序

  起始设定是每个程序一开始必须做的,主要功能是将一些会用到的硬件部份做一起始状态的设定以发挥充分的掌控能力。

  ⑶ 从000B~0013行为起始设定程序

  在EM78系列中有所谓的MEMORY及I/O两大空间,一些MEMORY空间的寄存器处理时可用MOV、BS、BC、XOR、OR……等指令,而另一些I/O空间的控制寄存器处理时可用IOW、IOR等指令,这点不要弄混了才是。

  0010MOVA,@0x01;将A内放置1

  0011IOW0x0F;仅致能TCC中断能力

  在EM78156中原本能有WDT中断、外部中断及TCC中断等三种能力,如今我们只保留TCC中断来使用。

  0012MOVA,@0x05;将A内放置5

  0013CONTW;设定TCC控制寄存器

  0014ENI;启动中断能力

  TCC是一个很好用也很复杂的硬件线路,下面仅列出局部有关的地方于附录供大家参考。由于系统时基是采用32768Hz的石英晶体,故本制作之准确度应该不被怀疑才是。当选用2CYCLE及2CLOCK的状态时,若再将TCC设成除以64,那刚好每一秒钟TCC发生溢位中断。

  扫描程序:从0015--0015行,总共1行,仅做跳跃自身之用。

  效果观察:程序写到此时,倘若您手上的线路没焊错的话,那么您将会看到七字显示屏幕显示8并且以1秒亮1秒灭的速度亮灭着。

  2 具有七段显示能力

  接下来就是加强扫描能力,使它有着正确的显示数字的能力。

  整个程序与TC0.ICE的差异就是增加了SEC计数的显示能力,故有三处改动:

  ⑴ 中断子程序中有了INCSEC指令来做每秒进位的动作。

  ⑵ 扫描程序功能加强:从0020--0026行所做之事为重覆的将SEC数字经过查表后丢到P6上。为了方便了解,此时仅对数字0有做显示动作。

  ⑶ 效果观察:程序到此时您会看到个位数的七字显示屏幕从0→9每秒进位。到9以后程序将会错乱。

  3 具有二位数的显示能力

  能够做七段显示之后,各位想看到的当然是二位数字的显示了,由于这里采用一共阴、一共阳的七段显示器,故处理起来还得稍费脑筋。

  程序与TC1.ICE差异之处仅在扫描动作上不同罢了。若要扫共阳的位数时,必须将PORT5外设为高电位输出,而要亮的字划,在PORT6外设为低电位输入即可。若要扫共阴的位数1时,必须将PORT5外设为低电位输出即可,而要亮的字划,在PORT6外设为高电位输出即可。故有了0020--0025行,位数0的显示处理及0026--002C行,位数1的显示处理。

  效果观察:程序到此时您会看到二位数的七字显示屏幕,同时从0→9每秒进位,到9以后程序将会错乱。

  4 具有限数能力

    以上的程序对SEC(秒)都不予限数,当然会造成CALLTABLERETEW错误发生,故底下增加MIN(分)并对SEC、MIN做59及99的限数动作。

  程序与TC2.ICE差异之处有下:

  TCC中断子程序部份增加了A,R3的暂存动作及SEC、MIN的限数动作。0008--000A及0016--0018行系对A及R3做暂存及复原的动作。

  000C--0011行系对秒做59的比较动作,SEC比59大则SEC=0,MIN=MIN+1.

  0012--0015行系对分做99的比较动作,若MIN比99大则MIN=0。

  在扫描程序部份增加了16进制变成10进制的动作。纵然二位数字来显示MIN(分)的讯息是可行的,然将16进制变成10进制才能符合人类的习性。0033--0038行即在做16进制转10进制的动作,将MIN的数值拆成个位数及拾位数,并在0039--003D时显示个位数,而在003E--0044时显示拾位数。

  效果观察:程序到此为止,理论上已做完该完成的所有行为了。但执行起来…为何…为何…忽好忽坏呢?

  完成正确功能:将TC3.ICE程序左看右看,上看下看,怎么看也看不出破绽出来,但为何程序跑起来很不稳定,忽好忽坏的呢?答案是程序错误。

  原来问题就在中断子程序的A及R3暂存及复原这部份。  

    原来程序在A及R3的暂存部份:

  错就错在0009时MOVA,RF指令会破坏ZEROFLAG的资料。新的程序在A及R3的暂存部份:

  新的程序在A及R3的复原部份:

  效果观察:此时此刻的您一定是欢喜异常,眼睛看着分钟一分一分的增加又不死机,刚才紧绷的心情顿时得到解脱,一切的心血总算有了回报了。

  再动手将秒的闪烁呈现在七段的小数点上以满足动感要求。

  要如何增加小数点秒的闪烁呢?其实看结果一点也不困难。增加001D~0020这四行程序就可迎刃而解了。

  5 好上加好

  如果用示波器来看看制作成果的良好程度时,可以看到显示周期比才近50%左右,让人总觉得可惜,倘若能够让显示周期比接近100%不亦快哉!

    再动手改吧.

  人的眼眼睛实在很容易被欺骗,只要扫描频率大于30Hz其实已经看不到闪烁的现象,故在不产生闪烁的现象中如何增加显示周期比呢?

  增加显示时之时间,故这里增加了一个DELAY子程序(002C--0033行所示)供扫描显示时呼叫之用。固定的在个位数及拾位数显示时各呼叫来增加显示周期比。

  效果观察:增加了DELAY子程序之后约可提升亮度一倍左右。

  6 要善始善终-----永不死机

    正当要关掉ICE准备烧写OTP的时候,仔细想想程序才那么小小的,留那么多的空白做什么?不妨拿来「增加稳定度」之用。

  与TC6.ICE程序的差异之处:

  ⑴ 在每个程序的段落"加入JMPINIT"指令。

  ⑵ 在程序节结尾以后「加入JMPINIT」指令。

  这样一来,不论IC何时死机错乱都会跳到开始来执行了。

  加入WATCHDOGTIMER:来避免程序的错误而造成死LOOP现象。

  加入错误侦测能力:利用剩余的寄存器来做引子,随时去读取这些寄存器,若和不为零则代表错误发生了,应该重新开始。

  效果观察:不论如何故意的去弄死机都会从头开始正常执行程序了,大功告成。可以加上您认为漂亮合适的外壳,投入使用了。

  附源程序

 



  
关键词:电源

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

相关技术资料
广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!