基于sopc的电子钟设计

嵌入式设计应用

132人已加入

描述

  SOPC(SystemOnProgrammableChip) 是用可编程逻辑技术把整个系统放到一片硅片上的一种特殊嵌入式系统一方面,它片上系统(SOC)完成整个系统的逻辑功能;另一方面,它是可编程系统,具有灵活的设计方式,可裁剪,扩充,升级,并具备软硬件在系统可编程功能J.S)PC 是PID 和ASIC 技术融合的结果,可以认为SOPC代表了半导体产业未来的发展方向。本文采用EDA 软件QuartuslI 中的SOPCBuilder 构建了一个SOPC 系统。并以构建的系统为平台进行电子钟的软件设计:最后在Altera公司FPGA 多媒体开发平台DE2 上进行实现该方案不同于基于处理器或控制器及SOC 的嵌入式系统,基于SOPC 的嵌入式系统具有可配置的特点,不会包括任何专用外设,而是可根据需要灵活地在一片FPGA 中构造外设接口。

  电子钟是一种用数字电子技术实现时、分、秒自然计时的装置,与机械式时钟相比具有更高的准确性和直观性,而且使用寿命较长,与机械钟相比具有更高的准确性和直观性,具有更长的使用寿命,已得到广泛的使用。数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以利用单片机来实现电子钟等等。这些方法都各有其特点,其中利用单片机实现的电子钟具有编程灵活,以便于功能的扩展。

  电子钟设计原理

  数字钟的示意如下图所示。它由石英晶体振荡器、分频器、计数器、译码器显示器和校时电路组成。振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。计数器的输出分别经译码器送显示器显示。计时出现误差时,可以用校时电路校时、校分。

 sopc

  电子钟功能

  1) 具有正确的时、分、秒计时功能。

  2) 计时结果要用数码管分别显示进、分、秒的十位和个位。

  3) 有校时功能。当S键按下时,分计数器以秒脉冲的速度递增,并按60min循环,即

  计数到期59min后再回到00。当工A键按下时,时计数器以秒脉冲的速度递增,并按24h循环,即计数到23h后再回00。

  4) 利用扬声器整点报时。当计时到达59分59秒时开始报时,在59分50秒、52秒、54秒、56秒、58秒时鸣叫,鸣叫声频为500hz;到达59分60秒时为最后一声整点报时,频率为1khz。

  控定时器的基本组成

  数字钟钟控定时器由:计数器、D触发器、数据选择器、数据分配器、译码器、报时器、闹时器组、分频器和一个或非门这九大模块构成。计数器主要分为24进制计数器和60进制计数器,24进制计数器对数字钟的小时位计行计数,60进制对数字钟的分和秒进行计数。D触发器主要是用在对数字进行校准时的按键消抖作用,以免在校时的时候产生抖动信号。数据分配器的作用是在动态译码时选择输出数据。译码器对输出信号进行译码在数码管上显示出来,让大家数字钟的表示直观。报时电路是使时钟在整点有报时功能而设计的。闹时器是对时钟进行比较产生闹时电信号的电路。

  D触发器的设计

  在本设计中运用到了3个D触发器,它主要是用在对数字进行校准时的按键消抖作用,以免在校时的时候产生抖动信号。

  在电路中用到了D触发器74LS74,74LS74的管脚图如图3-1。

  sopc

  触发器,它是由门电路构成的逻辑电路,它的输出具有两个稳定的物理状态(高电平和低电平),所以它能记忆一位二进制代码。触发器是存放在二进制信息的最基本的单元。按其功能可为基本RS触发器触、JK触发器、D触发器和T触发器。

  这几种触发器都有集成电路产品。其中应用最广泛的当数JK触发器和D触发器。不过,深刻理解RS触发器对全面掌握触发器的工作方式或动作特点是至关重要的。事实上,JK触发器和D触发器是RS触发器的改进型,其中JK触发器保留了两个数据输入端,而D触发器只保留了一个数据输入端。D触发器有边沿D触发器和高电平D触发器。74LS74为一个电平D触发器。

  数据选择器的设计

  在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器,也称多路选择器或多路开关。数据选择器(MUX)的逻辑功能是在地址选择信号的控制下,从多路数据中选择一路数据作为输出信号。

  通过QuartusII软件进行编译后,仿真结果如图3-2所示,

  sopc

  打包后成元器件如图3-3所示;

  sopc

  计数器的设计

  计数器是一种计算输入脉冲的时序逻辑网络,被计数的输入信号就是时序网络的时钟脉冲,它不仅可以计数而且还可以用来完成其他特定的逻辑功能,如测量、定时控制、数字运算等等。

  数字钟的计数电路是用两个六十进制计数电路和“24进制”计数电路实现的。数字钟的计数电路的设计可以用反馈清零法。当计数器正常计数时,反馈门不起作用,只有当进位脉冲到来时,反馈信号将计数电路清零,实现相应模的循环计数。以六十进制为例,当计数器从00,01,02,……,59计数时,反馈门不起作用,只有当第60个秒脉冲到来时,反馈信号随即将计数电路清零,实现模为60的循环计数。

  下面是用Verilog HDL语言编写的24进制、60进制计数器的程序代码: 1)24进制计数器程序代码;

  module count24(ten,one,clk); output[3:0] ten,one; input clk;

  reg[3:0] ten,one; always @(posedge clk) begin

  if(ten[3:0]==2&&one[3:0]==3) begin

  ten[3:0]《=0; one[3:0]《=0; end

  else if(one[3:0]==9) begin

  one[3:0]《=0;

  ten[3:0]《=ten[3:0]+1; end else

  one[3:0]《=one[3:0]+1; end

  endmodule

  通过QuartusII软件进行编译后,仿真结果如图3-4所示,

 sopc

  打包后成元器件如图3-5所示;

 sopc

  60进制计数器程序代码;

  module count60(cout,ten,one,clk); output[3:0] ten,one; output cout; input clk;

  reg[3:0] ten,one; always @(posedge clk) begin

  if(one[3:0]==9) begin

  one[3:0]《=0; if(ten[3:0]==5) ten[3:0]《=0; else

  ten[3:0]《=ten[3:0]+1; end else

  one[3:0]《=one[3:0]+1; end

  assign cout=(ten[3:0]==0&&one[3:0]==0)?1:0; endmodule

  通过QuartusII软件进行编译后,仿真结果如图3-6所示;

 sopc

  打包后成元器件如图3-7所示

  sopc

  数据分配器

  能够将1个输入数据,根据需要传送到m个输出端的任何一个输出端的电路,叫做数据分配器,又称为多路分配器,其逻辑功能正好与数据选择器相反。电路结构:由与门组成的阵列。分类:1路-4路数据分配器(如74LS139)、1路-8路数据分配器(74LS138)等。由于译码器和数据分配器的功能非常接近,所以译码器一个很重要的应用就是构成数据分配器。 也正因为如此,市场上没有集成数据分配器产品,只有集成译码器产品。

  通过QuartusII软件进行编译后,仿真结果如图3-8所示;

 sopc

  译码器

  译码器是一个多输入、多输出的组合逻辑电路。它的工作是把给定的代码进行“翻译”,变成相应的状态,使输出通道中相应的一路有信号输出。译码器在数字系统中有广泛的用途,不仅用于代码的转换、终端的数字显示,还用于数字分配,存储器寻址和组合控制信号等。译码器可以分为通用译码器和显示译码器两大类。在电路中用的译码器是共阴极译码器74LS48,用74LS48把输入的8421BCD码ABCD译成七段输出a-g,再由七段数码管显示相应的数。

  通过QuartusII软件进行编译后,仿真结果如图3-11所示;

  sopc

  分频器

  分频器的作用是将由石英晶体产生的高频信号分频成基时钟脉冲信号和扩展部分所需的频率。在此电路中,分频器的功能主要有两个:一是产生标准脉冲信号;二是功能扩展电路所需的信号,如仿电台用的1KHz的高频信号和500Hz的低频信号等。可以组成二分频电路和四分频电路和十六分频器。

  打包后成元器件如图3-12所示;

  sopc

  闹时器

  数字钟在指定的时刻发出信号,或驱动音响电路“闹时”;或对某装置的电源进行接通或断开“控制”。不管是闹时还是控制,都要求时间准确,即信号的开始时刻与持续时间必须满足规定的要求。在这里将举例来说明它的工作原理。要求上午7时59分发出闹时信号,持续1分钟。设计如下:

  sopc

  在电路图中用到了4输入二与非门74LS20,集电极开路的2输入四与非门74LS03,因OC门的输出端可以进行“线与”,使用时在它们的输出端与电源+5V端之间应接一电阻RL。RL的值由下式决定:

 sopc

  闹时器程序代码;

  module nsdl(out,m1,m2,h1,h2,tenh,oneh,tenm,onem,clk1k,cin);

  output out;

  input[3:0] m1,m2,h1,h2,tenh,tenm,oneh,onem; input cin, clk1k;

  reg out;

  always @(m1 or m2 or h1 or h2 or tenh or tenm or oneh or onem or cin) begin

  if(cin) out《=0; else if(cin==0) begin

  if(tenh==h1&&oneh==h2&&tenm==m1&&onem==m2) out《=clk1k; else out《=0; end end

  endmodule

  打包后成元器件如图3-13所示;

  sopc

  报时器

  (一)功能要求

  报时的功能要求是:每当数字钟计时快要到正点时,通常按照4低音1高音的顺序发出间断声响,以最后一声高音结束的时刻为正点时刻。

      (二)该电路的工作原理

  电路图的工作原理举例来说明;例如设4声低音(约500Hz)分别 在59分51秒、53秒、55秒及57秒,最后一声高音(约1000Hz)发生在59秒,它们的持续时间为1秒。只有当分十进位的Q2M2Q0M2=11,分个位的Q3M1Q0M1=11,秒十位的Q2S2Q0S2=11及秒个位的Q0S1=1时,音响电路才能工作。

  (三)对该电路中使用的元件的介绍

  因为在该电路中所用的元件主要是74LS00、74LS04及74LS20这些元件在前面的

  电路中已经介绍。这里就不再介绍它了

  报时器程序代码;

  module baoshi(tenm,onem,tens,ones,q500,q1k,a,b); input a,b;

  input [3:0]tenm,onem,tens,ones; output q500,q1k; reg q500,q1k;

  always @(tenm or onem or tens or ones) begin

  if ({tenm,onem}==8‘h59&&{tens,ones}==8’h50||{tenm,onem}==8‘h59&&{tens,ones}==8’h52|| {tenm,onem}==8‘h59&&{tens,ones}==8’h54||{tenm,onem}==8‘h59&&{tens,ones}==8’h56|| {tenm,onem}==8‘h59&&{tens,ones}==8’h58) q500《=a; else q500《=0; end

  always @(tenm or onem or tens or ones) begin

  if ((tenm[3:0]==0000&&onem[3:0]==0000)&&(tens[3:0]==0000&&ones[3:0]==0000)) q1k《=b; else q1k《=0; end

  endmodule

  打包后成元器件如图3-14所示;

 sopc

  数字钟原理图

  将各模块组合一起构成如图3-15所示:

  sopc

  软件调试的过程据功能的增加分为几步:

  首先,根据原来的100进制显示程序的基础上编写成时分秒六位显示的主程序。该程序将时分秒分成个位和十位分别计算,所以将60进制和24进制变成10进制、6进制和2进制。又因为如果时十位为2的话,不能大于3,所以在分十位向时个位进位时得判断时十位是否为2,在组员的帮助下经过不断试验和修改终于完成。过程比较顺利。

  该电子钟使用一个键来调时,利用长按来选择所要调的位,用短暂按下来对位进行加1,前提是时钟暂停,这个功能也是通过长按来实现的。选位是从秒个位到时十位依次选取,但到时十位以后就回不到秒个位了,就是不会循环。所以就得对选的位进行检查,如果到了时十位再按取位键就重新赋给秒个位地址。这样就可以循环选位了。但在后来的测试中又有了新的问题,如果该位到了9,对一个位进行加1调整就会显示乱码。时分秒的十位都会调到9!

  对于这个问题费看一些周折。起先构思再加一个减一的键,但不但没有解决这个乱码问题而且减到了0一下很可能也会出现乱码。所以就转而寻求程序解决。调时的时候让它也像正常运行的时候进位?没见过这样的。继而决定在进行加1调时的时候检测该位是否到10或6或3。所以就产生了所谓的调时比较子程序,就是在调时的时候将该位跟10或6或3比较。最后,调试的时候却总是出现这样的情况:所调的位超过了9或5或2就变成乱码。比原来进步的地方就是时分秒的十位不用超过9就变成乱码。这说明虽然还没成功,但还是有前展的。就继续调试。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分