|
感謝 FATZEROS大提供的 電波鐘接收模組,只是 訊號失敗率過高...放棄了!! 有機會去釣魚台再試看看 "收訊"!!
電波鐘的接收則是 1秒鐘一個信號 0或是1或是P 一共要接收60秒才會把 年.日.星期.小時.分鐘.呈現出來而且是前一分鐘的信息,程式寫了一半先把接收的動作寫出來,為了確認是否有問題,於是把硬體電路做出來,配合網友的"套件"於是把它"結合起來!! 昨天把它測試了一下,發現收訊怪怪的!! 應該一秒鐘LED會閃動一下,卻比預期的久了一些!! 四樓外面的收訊算是最好的,程式中有 0 . 1 .P. F(失敗) ,...偶而會有F出現!! 今天再改一下程式,用了三個計數器 把0.1 和P和F 分別累計,天啊!! 這失敗的比例也太高了!! 不管一樓或四樓室內或室外收訊都是超級的差!! 想一想還是回歸 GPS時鐘吧!! 反正 這是高級電波,電波的強度&品質都非常棒,連室內都可以收的清楚,加上最近日本人欺人太甚還揚言釣魚台是他們的領土,它的電波來還是被米國打的很慘(就如蘋果打索尼一樣),所以乾脆放棄了!! 反正我的程式已經有一個階段了,聽說民國150年台灣的電波表發射台會完成,我就慢慢等了....
最後放棄改成 GPS時鐘 內建DS1302版
部分程式:
中斷判斷接收信號
void Timer0_isr(void) interrupt 1
{
TH0=(65536-2010)/256; //重新赋值 2ms
TL0=(65536-2010)%256;
ms2++;// 2ms setflag 作為判斷時機,當中斷1被觸發時ms2也會歸零
if(ms2==25)//50ms ck_A
{
if(TBit==1)//檢查 時間信號是否為HI
TMark=0x01;
}
if(ms2==75)//150 ck_B
{
if(TBit==1)
TMark|=0x02;
}
if(ms2==225)//450 ck_C
{
if(TBit==1)
TMark|=0x04;
}
if(ms2==375)//750 ck_D
{
if(TBit==1)
TMark|=0x08;
}
if(ms2==450)//900ms over
{
if(TBit==1)
{
TMark=0xff;
}
else
{
Tset_OK=1;
Tset_OKLED=1;
}
ms2=0;
}
if(TBit)
{
TBit_flag=0;
}
else
{
TBit_flag=1;
}
//-----------------------------------
ms3++;
if(ms3> 225)//顯示用計時器
{
ReadTimeFlag=1;//450mS 更新一次
ms3=0;
mstmp++;//溫度顯示計時器
if(mstmp>20)
{
mstmp=0;
ReadTempFlag=1;
}
}
//-----------------------------------
}
//檢查時間標碼
unsigned char TMark_CMP(void)
{
switch(TMark)
{
case 0xff:Fcn++;return 'F';break;//信號維持在HI 不良信號
case 0x03cn++;return 'P';break;//"" 信號
case 0x07:Tcn++;return '1';break;//"1" 信號
case 0x0f:Tcn++;return '0';break;//"0" 信號
default:Fcn++; return 'F';
}
}
//-----------------------------------------------------------------
void main (void)
{
LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定
LCD_Clear(); //清屏
Init_Timer0(); //定时器0初始化
T1st=0;
TMark_vlu='Q';
Tset_OKLED=0;
Tcn=0cn=0;Fcn=0;//clear count
while(1)
{
if(TMark==1)
{
if(T1st ==0)//第一次信號起始
{
T1st=1;
ms2=0;
}
}
if(Tset_OK==1)//讀取時間標記
{
TMark_vlu= TMark_CMP();//時間標記判斷 ""=3 "1"=1 "0"=0 其他=9
Tset_OK=0;//等待下一次
T1st =0;//第一次TMark 來需要使用
}
//測試使用
sprintf(temp,"TMark %02c",(char) TMark_vlu);//年月日周
LCD_Write_String(0,0,temp);//显示第一行
sprintf(temp,"T%05d P%3d F%3d",(int)Tcn,(int)Pcn,(int)Fcn);//年月日周
LCD_Write_String(0,1,temp);//显示第一行
}
}
|
|