Arduino DCF77信号分析仪时钟的制作

电子说

1.3w人已加入

描述

步骤1:时钟功能和特性

Arduino

接收并显示第二个来自发射机的DCF77编码信号德国。

在8x8点矩阵显示器上显示接收到的信号。收到并检查错误后,就可以在第二个8x8点矩阵显示器上显示存储的数据,并在顶部的两个7段显示模块上更新实时时钟和显示时间以及日期。

显示信号错误代码,信号状态,星期几和第三个点矩阵显示器上的显示强度。如果接收到的信号有误,请使用实时时钟显示时间,图1表示将完整一分钟的动画接收到缓冲区中。 p》

使用四个7段显示模块来显示缓冲区,DCF位,无错误,周期时间和脉冲宽度。

在第二个Atmega 328 IC上提供的可切换DCF77信号滤波使用软件通过Udo Klein对DCF77分析仪和超级过滤器进行远程控制的个别重置,DCF77声音的开/关和超级过滤器状态LED的开/关。

上面的图片2显示了前面板的特写。

图3显示了3个LED点矩阵显示器的详细信息。

缓冲区中接收到下一分钟的DCF77代码(左矩阵1)在分钟结束时以每秒1位的速度@,如果错误检查确定,则将缓冲区加载到当前显示存储区(矩阵2中间)中,并更新实时时钟(RTC)矩阵3右侧显示星期几,显示强度,时钟状态和时钟信息

步骤2:超级过滤器

Arduino

在打开Udo时克莱因的超级滤波器会主动处理来自天线/接收器的输入DCF77信号。经过数天的学习,Super Filter可以预测DCF77信号,并使用它来确定输入信号是否包含任何错误。即使没有信号,超级滤波器也将合成经过校正的DCF77信号。

图片1超级滤波器示例

第一行显示超级滤波器已打开。一旦同步并调谐到信号中,即使信号完全丢失,超级滤波器也会合成一个好的信号。当出现噪声信号时,超级滤波器将搜索已知的信号位,并使其自身与发送器保持同步。底行显示超级过滤器已关闭。无论接收到什么信号(好或坏),都会将其发送到解码器。请注意,即使超级滤波器已关闭,超级滤波器输入也始终连接到输入的DCF77信号。由于超级滤波器可能需要几天的时间才能调整到最高精度,因此可以确保始终以最大精度与DCF77信号进行调整/同步。

图2显示了超级滤波器的流程图。

步骤3:时钟盒

Arduino

此时钟的盒基于Tesco黑色玻璃和金属灯笼。外壳上有一个铰接的门,位于时钟的右边。

顶部的玻璃面板非常适合3 x点矩阵显示器。我增加了18mm MDF的顶部和底部以及2 x 6mm的胶合板,以替换小的顶部面板上的侧玻璃。这些面板喷涂有黑色丝绸,以匹配金属外壳。外壳顶部的原始金属手柄被切掉,顶部MDF面板上切有2个插槽以容纳手柄的剩余部分。尺寸H27xW15xD15cm

步骤4:LED点矩阵显示结构

Arduino

Arduino

Arduino

Arduino

Arduino

Arduino

Arduino

图片01显示器使用3x 8x8点阵显示模块和板载MAX7219 IC。

图片02将铝条切成一定尺寸,并钻6个孔以装上矩阵模块安装螺栓。请注意,对于预制模块,下部连接器可能需要拆焊,然后重新焊接在板子背面。

图片03。根据需要,在裸露的焊盘上使用额外的螺母和螺栓作为垫片。

图片03。然后将透明的有机玻璃板切成一定尺寸,并钻出安装孔,并将其安装在铝条的顶部。

p》

图片04。在Lazertran贴花转印纸上打印出显示器,并固定在Perspex纸上,确保与点矩阵模块对齐。

让纸干燥,不要用

图片05。在有机玻璃后面添加最后一张白纸以完成扩散效果。纸张越重,矩阵LED越会扩散(变暗)。

您可以通过为7段显示器和矩阵显示器设置不同的强度值来抵消此效果。请注意,如果您不想使用Lazertran,则可以将显示器打印在白纸上,然后将其固定在有机玻璃的后面。

图片06和07。完整的显示器可以安装到外壳中了。

第5步:主显示板构造

Arduino

Arduino

Arduino

用于容纳显示屏的主显示板四个7段显示器由2个Vero板和L形绝缘铝角螺栓固定在一起。

在完成的时钟上,装有两个Arduino的Vero主板固定在顶部的六个安装螺栓上。 p》

图片01和02显示了用螺栓固定在一起以安装显示器的Vero板。面板正面喷涂黑色。连接条被焊接到显示板上。

将四个7段显示器插入连接条,并用四个标签标记。显示器的电源和串行连接在显示板的正面运行。

步骤6:主显示板布局

Arduino

Arduino

Arduino

Arduino

Arduino

Arduino

为清楚起见,笔记型面板的正面显示为橙色,实际的面板正面则涂成黑色。

图片01显示了具有7个分段显示连接条的显示板的正面。

图片02显示了7个分段显示模块以及黑色的木块,用于固定有机玻璃中性密度对比显示盖。注意顶部显示模块上的黑色胶带冒号掩膜。

图03显示了7个分段显示模块,它们没有Perspex中性密度对比显示盖。没有该盖,则很难在强光下阅读。

图片04显示了带有Letroset标签的Perspex中性密度对比显示盖。 Perpex盖安装在主显示屏玻璃的后面,以提供保护。

图片05与图03相同,但Perspex中性密度对比显示屏盖固定在木制安装块上。现在,该显示器在所有照明条件下都易于阅读,并且PCB和显示器部件也从视图中隐藏起来。

图06显示了该盒中的点矩阵和主显示器。

步骤7:主显示板后部和主板安装

Arduino

Arduino

Arduino

图01显示了后部(

图片02显示了用8个螺栓将铝绝缘角固定在适当位置的显示板。这样可以将2个Vero板固定在一起。

图03显示了在铝制夹角之间固定在显示板后部的主板。

图中未显示,每个电容器都具有去耦电容显示模块。

步骤8:主Vero板和显示板组件

Arduino

Arduino

Arduino

Arduino

图片01和02 Vero前后的Atemga 328主板布局控制DCF77分析仪和显示。右侧的Atmega 328控制着超级滤波器。

拨动开关控制直接从天线/接收器,超级滤波器或关闭无DCF77信号到板的DCF77输入。

无线接收器,带有DTR的CP2102,PIR检测器和RTC模块都已插入板中。

图03和04显示了组装好的主显示板,其中所有组件和电缆均已连接,可以安装到时钟中

第9步:修改RTC时间7段显示模块以显示冒号分隔符

Arduino

Arduino

Arduino

Arduino

图片01标准显示中只有小数点用于分隔数字。

图片02要在数字3和6上显示冒号,请将这两个数字设置为永久显示“ o”小写字母O

这只会照亮底部的4个led段。

图片03然后将4 x黑色塑料带条粘贴到数字上。

p》

图片04当小写的“ o”全部显示时

步骤10:PIR检测器的设置和安装

Arduino

Arduino

Arduino

Arduino

Arduino

图片01显示了标准的PIR模块。

图片02显示了已移除的红外漫射器。漫射器的一半涂成黑色,因此只能从前半部分感知。 PIR感测晶体管现已暴露。

图片03显示了PIR传感器拆焊后的PIR模块的底面。

图片04显示了连接到PIR的3条导线晶体管先连接到板上,然后再连接到晶体管。

将模块固定在时钟盖的下侧,并将晶体管安装在盖的顶部。

图05显示了PIR扩散器在适当的位置。 PIR晶体管安装在指向前方的扩散器下方。

在PIR模块板上的2个预设上调整了灵敏度和触发时间。

步骤11:远程控制

Arduino

Arduino

Arduino

Arduino

Arduino

Arduino

四个功能

1. DCF77脉冲声音开/关开启DCF77时,可通过小型有源蜂鸣器监视脉冲

2.超级过滤器重置这将重置超级过滤器并删除所有学习到的调优,并且将启动不同步的超级过滤器。超级过滤器监控器LED(如果已打开)将熄灭,直到过滤器自身重新同步

3为止。超级过滤器监控LED指示灯这3个LED监控超级过滤器LED1- DCF77第二脉冲LED2 DCF77信号良好LED3-综合差值

4的功能。 DCF77分析仪时钟重置这将重置时钟并显示为零,并且时钟将失去任何同步。如果先前已经设置了RTC,则会显示RTC时间。请注意,超级过滤器将不会重置,并且任何学习到的调谐和同步都不会受到影响。

如果不需要遥控器,则可以使用瞬时开关。

图片01和02遥控器基于PT2272无线接收器模块(433MHz版本)和PT2262无线发送器模块(433MHz版本)

我在这里使用433Mhz版本在英国,但是有315Mhz的版本可以在其他国家使用。

图片03您可以在内置的密钥卡中准备好315Mhz发射器,包括在Ebay上的单独接收器。如果您选择此选项,则只需将接收器插入主显示板,即可开始使用。该选项似乎在433 Mhz中不可用。

433Mhz选件需要构造一个小型的远程变送器,或者可以从变送器中购买学习型钥匙扣。

图片04用于415Mhz板的遥控变送器

》左侧的四个开关安装在一小块Vero板上。变送器与9v电池一起安装在背面。参见模块随附的接线说明。

图片05或者,可以购买学习型钥匙扣,并可以使用上面的简单电路从变送器对它进行编程。 PCB链接用于将微动开关依次连接到四个输入,因此可以对智能钥匙进行编程。

超级过滤器开/关控制开关

单个开关控制超级过滤器并具有3个位置超级过滤器上-超级过滤器上的输出连接到分析仪时钟DCF77输入并且5v连接到IC1引脚5(IDE引脚3)时,显示矩阵3上的超级过滤器LED点亮。位置分析仪时钟DCF77输入未连接到任何信号在DCF77信号上-在此位置,分析仪时钟DCF77输入直接连接到DCF77接收器/天线。请注意,在所有位置,超级滤波器都直接连接到DCF77接收器/天线,因此始终保持同步。

步骤12:读取接收和解码的矩阵缓冲区将显示00秒34

Arduino

Arduino

Arduino

Arduino

Arduino

Arduino

Arduino

Arduino

图片01

接收到的矩阵缓冲区在左侧,其中包含下一分钟的信息。显示与中间的

解码矩阵相同,该矩阵显示了当前分钟的时间,日期等。每分钟之后(如果可以检查错误,则可以),下一分钟缓冲区数据将加载到中间矩阵中,并成为当前分钟。每秒一次串行接收DCF77数据,一旦时钟同步,第二个0装入缓冲器00(矩阵位置M),第二个1装入缓冲器01等。当接收到位值1时,该段的LED点亮但如果该值为0,则将保持熄灭状态。

图片02

第二个0缓冲区00矩阵标签M

这是分钟的开始,始终为0。/p》

图片03

第二个1到14缓冲区01到14矩阵标签01到14

这些位包含欧洲许可的加密天气数据,并由DCF77时钟使用。此数据显示但未被该时钟使用。

图片04

第二个15缓冲区15矩阵标签Flt该位包含发送器信息,除非存在发送器问题,否则为0。

秒16缓冲区16矩阵标签LHr夏令时通告通常为0。在更改前的小时内将其设置为1。第二个17缓冲区17矩阵标签CEST当CEST(欧洲中部夏季时间)生效时设置为1。第二个18缓冲区18矩阵标签CET当CET(欧洲中部时间)生效时设置为1。第二个19缓冲区19矩阵标签LSec飞跃第二个公告。在leap秒之前的一小时内设置为1。

图片05

第二20缓冲区20矩阵标签S编码时间的开始。始终设置为1。

图片06

第二21至27缓冲区21至27矩阵标签01、02、04、08、10、20和40。

这些位包含分钟,并将它们加在一起以显示从00到59的分钟。21分钟将01点亮20个LED,同样53分钟将01,02,10点亮40个LED

图片07

第二个28缓冲区28矩阵标签P1

该位在21-28分钟位上显示偶数奇偶校验。奇偶校验是错误检查的基本形式。奇偶校验位被添加到一个数字串的末尾,在这种情况下,这是缓冲区21到27的7位。该奇偶校验位指示缓冲区21到27中的1的个数是偶数还是奇数。如果使用偶数奇偶校验时1的数目是偶数,则奇偶校验位是0,如果1的数目是奇数,则奇偶校验位是1。例如,如果要发送的分钟是5。缓冲位(上面的黄色高光) 01 = 1、02 = 0、04 = 1、08 = 0、10 = 0、20 = 0和40 = 0 0r 1010000如果将1的数量加在一起,则得到2。这是偶数,因此奇偶校验位发送将为0。因此,发送器将发送1010000&0。在接收器端,接收器不知道期望使用什么代码,但是知道检查位21到27的奇偶性。如果在接收到位21到28时未命中发生读取操作,例如,接收到的位22为1而不是0,结果位将为11100000。接收器会期望最后一位(奇偶校验)为1,因为奇数为1。

图片08

第二个29至34缓冲区29至34矩阵标签01,02,这表示接收到的信号中存在错误,并且接收到的缓冲区将被拒绝。 04,08,10&20。

这些位包含小时,并加在一起显示从00到23的小时。10小时将只点亮10个LED,同样23小时也将带有01,02和20个LED点亮

第13步:读取接收和解码的矩阵缓冲区,然后显示35到59

Arduino

Arduino

Arduino

Arduino

Arduino

Arduino

图片01

第二个35缓冲区35矩阵标签P2

分钟位29至35上的奇偶校验。请参见P1中奇偶校验的解释(以上第二十八秒)

图片02

第二36至41缓冲区36至41矩阵标签01,02,04 ,08,10&20。

这些位包含月份中的某一天,并加在一起以显示从01到31的日期。月份中的10号只会点亮10个LED,同样,月份中的23号也会点亮HAV e 01,02和20个LED点亮

图片03

第二个42到44缓冲区42到44矩阵标签01,02和04。

这些位包含并相加以显示星期几,星期一= 1,星期日= 7,星期一将仅点亮01 LED,同样,星期日也将点亮01,02&04 LED

图片04

第二个45到49缓冲区45到49矩阵标签01,02,04,08&10

这些位加在一起时包含月份号,范围从01到12。一月只有01 LED点亮,同样,7月将使01,02和04 LED点亮

图片05

第二个50到57缓冲区50到57矩阵标签01,02,04,08,10 ,20,40&80

这些位加在一起时将包含百年中的年份,范围从00到99。年份01只会点亮01 LED,同样,年份99也会带有01,08,10 ,并且80个LED点亮

图片06

第二个58缓冲区58矩阵标签P3

此位在第36至58分钟位上显示偶数奇偶校验。 P1中的奇偶校验国家(以上为秒28)

秒59缓冲区58矩阵标签在第59秒,传输分钟标记1或0,指示在下一个接收到的脉冲上该缓冲区的结尾重置为00。

步骤14:读取日期,显示强度和状态/信息矩阵显示

Arduino

Arduino

Arduino

Arduino

Arduino

第三个LED矩阵显示屏显示星期,显示强度,时钟状态以及信息,并分为四个部分

图片01

Day

此部分仅显示矩阵上的LED点亮的当前日期。

图片02

显示

这部分的16个LED指示自动调整的矩阵和7段显示强度。每秒检查一次光照水平,并相应地上下调整强度。

图片03

状态

八个LED指示时钟状态消息。

DCF:亮起时表示DCF77信号正常。同步:亮起时表示时钟与DCF77信号同步

PT:亮起时表示时钟周期错误接收信号

PW:亮起表示接收信号的脉冲宽度有误

EoB:60秒周期结束前缓冲区已满时亮起

EoM:在60秒周期结束时缓冲区未满(结束标记接收得太早)时亮起

BF:这表明缓冲区已满,通常在60秒接收结束时亮起周期。当接收到许多错误脉冲时,if也会在其他时间点亮。点亮后,缓冲区将重置为00。

RTC:当实时时钟出现错误时,即没有存储时间,该指示灯将亮起。

图片04

Info

八个LED指示时钟信息

Sig:此LED随接收信号Pulse Width一起闪烁,如果打开则不受超级过滤器的影响

Spk:何时亮起表示接收到的信号扬声器已激活,并且可以通过扬声器听到信号脉冲

Fltr:亮起时,超级滤波器已打开,正在处理和合成输入信号。

LED:超级过滤器监控器LED点亮时,它们点亮。

Rmte:按下遥控器上的任何按钮时亮起。

获胜:冬季是钟点时亮起

总和:夏季是钟表时点亮起

飞跃:is年时会亮起

图片05

此图片显示了整分钟的所有数据摘要以及每个缓冲区值的DCF77传输代码转换

步骤15 :原理图

Arduino

Arduino

原理图01显示了主板及其与外部模块的连接。

原理图02显示了与主板的连接。 7个显示模块。

可以从随附的zip文件中下载完整尺寸的原理图。

步骤16:微控制器引脚连接表

Arduino

Atmega 328 IC1和2引脚连接和功能

步骤17:代码

该代码的大部分由Erik de Ruiter为他的DCF77分析器时钟编写。

Erik在GitHub上提供了其代码的完整详细信息。我试图尽可能地保留他的代码,但是在不使用它的地方,我已将其注释掉。在我添加或修改它的地方,我添加了一个注释,////Brett

在这里下载zip格式的代码DCF77分析器代码

在这里在我的网页中查看代码查看代码

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

全部0条评论

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

×
20
完善资料,
赚取积分