A combined MSF/DCF atomic clock receiver
This is the atomic clock project that has it all - an Anthorn
MSF receiver as well as a Mainflingen DCF receiver, all wrapped into a
single neat little package.
|
Below is the little graphic demonstration program - for those of you that like to read this sort of thing. Notice line 990. This assigns GPIO lines 14 and 15 to the respective clocks. If your interface uses different pins, change this assignment.10 REM MSF_DCF_PI 20 REM Plot both atomic clock signals 30 REM (c) Jochen Lueg 40 REM http://roevalley.com 50 REM Limavady, May 2013 60 REM Version 2.0 70 REM 80 REM Uses GPIO 14 (MSF) and 29 (DCF) for input 90 100 110 OSCLI"RMEnsure GPIO 0.00 RMLoad GPIO" 120 OSCLI"RMensure GPIO 0.40 ERROR Please install the GPIO module" 130 PROCsetupGPIO 140 150 ON ERROR PROCerror 160 PROCinit 170 PROCplot_clocks 180 *QUIT 190 END 200 210 220 230 DEFPROCplot_clocks 240 LOCAL S,H% 250 S=40 260 VDU 5 270 MOUSE OFF 280 MOVE 10,1438: PRINT "Press 1 - 5 to change the time base, S to pause at the end of a screen and C to monitor continuously (default)" 281 GCOL 255,255,0:MOVE 10,12:PRINT Mode$ 290 REPEAT 300 Restart%=0 310 H%=80 320 CMSF%=0 330 CDCF%=0 340 X%=0 350 Y%=1340 360 YM%=1340 370 YD%=1240 380 DX%=X% 390 DY%=YD% 400 MOVE X%,Y% 410 REM Find start change of state 420 REPEAT 430 SYS "GPIO_ReadData",MSFPort% TO Port% 440 UNTIL Port%=0 450 REPEAT 460 SYS "GPIO_ReadData",MSFPort% TO Port% 470 UNTIL Port%=1 480 490 REM Start plotting 500 OldPortMSF%=1:OldPortDCF%=1 510 REM MSF signal 520 REPEAT 530 GCOL255,255,0 540 SYS "GPIO_ReadData",MSFPort% TO Port% 550 IF OldPortMSF%=0 AND Port%=1 DRAW X%/S,YM%+H%*Port%:CMSF%=1 560 OldPortMSF%=Port% 570 DRAW X%/S,YM%+H%*Port% 580 OX%=X%/S:OY%=YM%+H%*Port% 590 600 610 REM DCF signal 620 GCOL 0,255,255 630 MOVE DX%,DY% 640 SYS "GPIO_ReadData",DCFPort% TO Port% 650 DRAW X%/S,YD%+H%*Port% 660 DX%=X%/S:DY%=YD%+H%*Port% 670 X%+=1 680 690 IF X%/S>2300 AND CMSF%=1 THEN 700 X%=0 710 YM%=YM%-80-(2*(H%+20)) 720 YD%=YD%-80-(2*(H%+20)) 730 OX%=X%:DX%=X% 740 OY%=YM%:DY%=YD% 750 760 ENDIF 770 IF INKEY(-49) OR INKEY(-108) S=20 : Restart%=1 780 IF INKEY(-50) OR INKEY(-125) S=30 : Restart%=1 790 IF INKEY(-18) OR INKEY(-109) S=40 : Restart%=1 800 IF INKEY(-19) OR INKEY(-123) S=80 : Restart%=1 810 IF INKEY(-20) OR INKEY(-124) S=160: Restart%=1 820 830 IF INKEY(-83) Mode$="Continuous mode":GCOL 0,0,0:RECTANGLE FILL 0,0,600,12:GCOL 255,255,0:MOVE 10,12:PRINT Mode$ 840 IF INKEY(-82) Mode$="Screen display mode":GCOL 0,0,0:RECTANGLE FILL 0,0,600,12:GCOL255,255,0: MOVE 10,12:PRINT Mode$ 850 CMSF%=0 860 870 MOVE OX%,OY% 880 UNTIL YM%<100 OR Restart%=1 890 IF Restart%=0 AND Mode$="Screen display mode" THEN 900 GCOL 255,255,255 910 MOVE 500,350 920 PRINT"Press SPACE to continue" 930 REPEAT 940 A$=GET$ 950 UNTIL A$=" " 960 ENDIF 970 CLG 971 GCOL 255,255,0:MOVE 10,12:PRINT Mode$ 980 UNTIL FALSE 990 ENDPROC 1000 1010 1020 DEFPROCinit 1030 S%=80 1040 MODE 1280,720,32 1050 VDU 5 1060 MOUSE OFF 1070 Mode$="Continuous mode" 1080 ENDPROC 1090 1100 1110 DEFPROCerror 1120 CLS 1130 PRINT REPORT$;" at line ";ERL 1140 QUIT 1150 ENDPROC 1160 1170 1180 DEFPROCsetupGPIO 1190 MSFPort%=14:DCFPort%=29 1200 SYS"GPIO_EnableI2C",0 1210 SYS"GPIO_ExpAsGPIO",2 1220 SYS"GPIO_WriteMode",MSFPort%,0 1230 SYS"GPIO_WriteMode",DCFPort%,0 1240 ENDPROC |
Back to the start
|