痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
12
返回列表 發新帖
樓主: legion

給antlu大的GPS接收器

  [複製鏈接]
發表於 2012-8-2 18:00:13 | 顯示全部樓層
legion 發表於 2012-8-2 05:15 PM static/image/common/back.gif
是啊,即然是TTL準位,那就直接接上到MCU的RX接腳,
不過你不是要拉到屋頂去接收嗎,
一般的RS232大概只有10- ...

LEGION大:
   RS232 與 RS485 只是驅動差異嗎? 我沒用過 RS485 介面!!
還有 抓資料的技巧需要請您指導一下!! 以前有做過 鍵盤掃描,但是一長串的資料作篩選這沒有經驗!
 樓主| 發表於 2012-8-2 20:07:18 | 顯示全部樓層
antlu 發表於 2012-8-2 06:00 PM static/image/common/back.gif
LEGION大:
   RS232 與 RS485 只是驅動差異嗎? 我沒用過 RS485 介面!!
還有 抓資料的技巧需要請您指導一 ...

基本上RS232和RS485只是在傳輸模式結構不同而己,
傳輸資料的格式內容就完全不王涉,最大的差別在距離而己
至於抓資料就只是對串列資料流作字元判斷及讀取而己
我MAIL給你的檔案用ASM寫的,都有完整註明,只要直接抓取記憶體位址內容就好了
這一段用C反而在效能上一個不小心就會被拖掉的,請參考看看MAIL給你的檔案內容
發表於 2012-8-2 20:32:38 | 顯示全部樓層
看完版大的電路 GPS接收器應該是通上電源後就持續一直送出信號了
本來還以為要透過RS-232送出指令給它 才會回應相關的資訊
發表於 2012-8-2 20:35:07 | 顯示全部樓層
legion 發表於 2012-8-2 08:07 PM static/image/common/back.gif
基本上RS232和RS485只是在傳輸模式結構不同而己,
傳輸資料的格式內容就完全不王涉,最大的差別在距離而己
...

LEGION大:
   感謝了!! 接下來就要看我的造化了!!(話說太快了!! 怕"造化弄人")
發表於 2012-8-2 23:37:43 | 顯示全部樓層
對岸的一份文件,希望對大家有幫助。

單晶片解讀GPS訊息的程序設計.pdf (93.29 KB, 下載次數: 26)
發表於 2012-8-2 23:47:11 | 顯示全部樓層
antlu 發表於 2012-8-2 06:00 PM static/image/common/back.gif
LEGION大:
   RS232 與 RS485 只是驅動差異嗎? 我沒用過 RS485 介面!!
還有 抓資料的技巧需要請您指導一 ...

RS232 轉 RS485 演進史.
http://godspeedlee.byethost10.com/modbus/0/index.html
發表於 2012-8-2 23:54:08 | 顯示全部樓層
感謝大家的支持,提供許多寶貴資料!!  收下來慢慢消化!!
發表於 2012-8-3 00:18:41 | 顯示全部樓層
長距離傳輸推薦使用 RS-422,使用全雙工四線式的傳送方式(T+,T-,R+,R-),不會有 RS-485 控制收發切換的問題。

我的習慣上使用 SN75176 時不加 20K 的提升電阻,但是會在接收輸入 A B 端並上一個約 120 歐姆的負載電阻,降低線路阻抗來降低雜訊。
 樓主| 發表於 2012-8-3 13:09:12 | 顯示全部樓層
kenneth 發表於 2012-8-3 12:18 AM static/image/common/back.gif
長距離傳輸推薦使用 RS-422,使用全雙工四線式的傳送方式(T+,T-,R+,R-),不會有 RS-485 控制收發切換的問 ...

kenneth大,
因為antlu大只是要拉到屋頂,所以大約也在30米內,加上單純只有單向從GPS接頭接收信號而已
所以用RS485應該就沒有收發切換問題,
而SN75176加個20K的提升電阻只是一個習慣而已,因平時拉個3-50米長而已,只要沒有太大的干擾就沒有去想太多
找個時間換成120歐姆的電阻來用還比20k來的方便許多.
發表於 2012-8-3 17:36:05 | 顯示全部樓層
legion 發表於 2012-8-3 01:09 PM static/image/common/back.gif
kenneth大,
因為antlu大只是要拉到屋頂,所以大約也在30米內,加上單純只有單向從GPS接頭接收信號而已
所以 ...

失禮!沒講清楚,我的意思是如果需要用到雙向 TX 與 RX 的傳輸,RS422 會比 RS485 來的好,這個 GPS 的應用只有單向所以只要是平衡式的輸出即可,所以 RS422 在此也等同 RS485 了。

於理論上 75176 的提升電阻與負載電阻都應該有,尤其是線路超長時。
實際上在工程中用示波器驗證了有終端電阻比提升電阻好,所以我的偷懶法是只加終端電阻,用網路線拉個一百米沒問題。
當 Layout 時還是會留提升電阻的位置,怕萬一時後能夠用上。
 樓主| 發表於 2012-8-3 17:59:32 | 顯示全部樓層
kenneth 發表於 2012-8-3 05:36 PM static/image/common/back.gif
失禮!沒講清楚,我的意思是如果需要用到雙向 TX 與 RX 的傳輸,RS422 會比 RS485 來的好,這個 GPS 的應 ...

kenneth大
失禮!沒講清楚! kenneth大看來你想太多了,
其實kenneth肯出聲這就己是受用無窮的事了
很多觀念上的問題都還需要kenneth大的指導的
有時自己也是很偷懶,沒想太多就把以前用過的直接拿來用的
發表於 2012-8-3 21:59:10 | 顯示全部樓層
GPS04 [800x600].JPG

GPS02 [800x600].JPG

這是第一個 GPS的拆機照,現在 在研究 大陸的GPS C程式... 有進展,但是還在摸索中....
發表於 2012-8-8 14:52:27 | 顯示全部樓層
程式比我想像的還要複雜啊!! 終於有一點眉目!! 用實驗板 慢慢的把他試出!!
我使用 LEGION大的ASM ,但是我又不會ASM 只好把他改寫成C ,問題點在於 C的指令又沒有很熟!! 而程式又摸不著!! 所以借用 實驗版的 "顯示部分" 7段顯示 和LED ,一開始很高興以為LED 會亮表示 程式運作正常,於是把 顯示程式配上去,發現全都不動作!! 於是 利用 LED的顯示 來判斷程式在哪一個步驟還有動作!! 另外一方面用7段顯示 來判斷我的 $GPMRC, 進到哪一個字母的判斷, 還有使用DEBUG 模式把條件先放在程式裡面,在一步一步的土法追蹤發現 while(xxx== 1) 跟我的想象不一樣!! 就這樣終於 可以把 格林威治的時間(時 分 秒) 閃動的顯示出!!
後續還要繼續測試與簡化 LOOP 方式取代一步一步的重覆,以及時間的閃爍 中原標準時間(+8)..等問題,最終就是 RS458 電路...

室外GPS收訊才佳!!
GPSa02 [800x600].JPG

沒有信號時 顯示 000000 GPSa01 [800x600].JPG
GPS剛剛打開的時候 2359XX 開始顯示

一但收到信號時就取代原有的時間,以格林威治為標準時間
GPSa06 [800x600].JPG
GPSa04 [800x600].JPG
GPSa07 [800x600].JPG




GPSa03 [800x600].JPG
GPSa05 [800x600].JPG
 樓主| 發表於 2012-8-8 18:05:46 | 顯示全部樓層
RS458電路應是小事,這兩天我把RS485的電路實際測試一下
antlu大只要解決主程式就好了
發表於 2012-8-8 21:06:33 | 顯示全部樓層
本帖最後由 antlu 於 2012-8-9 12:21 AM 編輯

legion大:
  //目前這樣可以初步顯示 閃爍有一點點, 沒有加8小時!! 後續就是 簡化 和 加入其他功能了!!
//把中斷時間改變已經不在閃爍 加了中原標準時間轉換!!

//20120808 modify OK  while(rec==0); 等待直到1才跳離

#include<reg52.h>
#define DataPort P0 // display LED segment
#define DrivePort P1 //display LED digit
//unsigned char code GPS_ASC[]="GPRMC,";
unsigned char CLCK[6]={1,2,3,4,5,6};
unsigned char Gok;// "$GPRMC," 確認完成
sbit Gok_LED =P1^2;// 收到"$GPRMC,"送出LED
sbit rec_led =P1^3;
bit rec;  // receive rs232 OK_flag
unsigned char REV_DATA;//儲存RS232緩衝區的暫存變數
void Init_Timer0(void);//定时器初始化
#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^2;//定义锁存使能端口 段锁存
sbit LATCH2=P2^3;//                 位锁存

unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码
unsigned char TempData[8]; //存储显示值的全局变量




void Display(unsigned char FirstBit,unsigned char Num)
{
      static unsigned char i=0;
          

           DataPort=0;   //清空数据,防止有交替重影
       LATCH1=1;     //段锁存
       LATCH1=0;

       DataPort=dofly_WeiMa[i+FirstBit]; //取位码
       LATCH2=1;     //位锁存
       LATCH2=0;

       DataPort=TempData; //取显示数据,段码
       LATCH1=1;     //段锁存
       LATCH1=0;
      
           i++;
       if(i==Num)
              i=0;


}

void Init_Timer0(void)
{
TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
EA=1;            //总中断打开
ET0=1;           //定时器中断打开
TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1
{
TH0=(65536-2010)/256;//0xd8;                  //重新赋值 2ms 不閃爍
TL0=(65536-2010)%256; //0xf0;
    Display(0,6);
   
}

void UART_Init(void)
{
    SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xFA;               // TH1:  重装值 4800 11.0592MHz  
    TR1   = 1;                  // TR1:  timer 1 打开                        
    EA    = 1;                  //打开总中断
    ES    = 1;                  //打开串口中断
}

void UART_SER (void) interrupt 4 //來自串口時鐘 1602 程式
{
     if(RI)                        //判断是接收中断产生
     {
          RI=0;                      //标志位清零
          REV_DATA =SBUF;                 //读入缓冲区的值
      rec=1;
          rec_led=1;
         }
   if(TI)  //如果是发送标志位,清零
     TI=0;
}

unsigned char GPRMC_K(void)//比較 $GPRMC
{
          while(rec==0);
        if(rec==1)
              if(REV_DATA == 'G')//一路比較下去全部要相同 "GPRMC,"
                    rec=0;
                   else
                 return 0;
          while(rec==0);        
        if(rec==1)             
          if(REV_DATA == 'P')           
                        rec=0;   

                     while(rec==0);        
        if(rec==1)             
          if(REV_DATA == 'R')//一路比較下去全部要相同 "GPRMC,"           
                        rec=0;         
                  else
                    return 0;                 
      
                     while(rec==0);        
        if(rec==1)             
          if(REV_DATA == 'M')//一路比較下去全部要相同 "GPRMC,"           
                        rec=0;
           
                 
      
                     while(rec==0);        
        if(rec==1)             
          if(REV_DATA == 'C')//一路比較下去全部要相同 "GPRMC,"           
                        rec=0;


          while(rec==0);     
        if(rec==1)     
          if(REV_DATA == ',')//一路比較下去全部要相同 "GPRMC,"
                   rec=0;
                  else
                    return 0;

          while(rec==0);      
        if(rec==1)                     
           CLCK[0]=REV_DATA-0x30;//10hr
                   rec=0;      
                        
                     while(rec==0);      
        if(rec==1)                     
           CLCK[1]=REV_DATA-0x30;//1hr
                   rec=0;         
                 
          while(rec==0);      
        if(rec==1)                     
           CLCK[2]=REV_DATA-0x30;//10min
                   rec=0;         
                 
      
                     while(rec==0);        
        if(rec==1)                     
           CLCK[3]=REV_DATA-0x30;//1min
                   rec=0;         
                 
      
                     while(rec==0);        
        if(rec==1)                     
           CLCK[4]=REV_DATA-0x30;//10sec
                   rec=0;         
                 
      
                     while(rec==0);        
        if(rec==1)                     
           CLCK[5]=REV_DATA-0x30;//sec         

  TT=CLCK[0]*10+CLCK[1]+8;//中原標準時間轉換!!
  if(TT>23)
     TT-=24;
         CLCK[0]=TT/10;
         CLCK[1]=TT%10;
                    
      

  return 1;
  }



void Get_Gps(void)
{
if(rec==1)
  {
    rec=0;//清除授信旗標
    if(REV_DATA == '$')
     {
          Gok=GPRMC_K();//確認收到 "GPRMC," 字元
      }
    }
  }


void Dis_tr(void)//轉換相關值到顯示
{
unsigned j;
for(j=0;j<6;j++)
{
TempData[j]=dofly_DuanMa[CLCK[j]];
}

/*



TempData[0]=dofly_DuanMa[CLCK[0]-48];
  TempData[1]=dofly_DuanMa[CLCK[1]-48];
   TempData[2]=dofly_DuanMa[CLCK[2]-48];
    TempData[3]=dofly_DuanMa[CLCK[3]-48];
         TempData[4]=dofly_DuanMa[CLCK[4]-48];
          TempData[5]=dofly_DuanMa[CLCK[5]-48];
*/
          }


void main(void)
{
Init_Timer0();
UART_Init();
while(1)
{
Get_Gps();
  if(Gok==1)
      {
     Dis_tr();//轉換相關值到顯示
           }

  }
}
發表於 2012-8-12 21:26:48 | 顯示全部樓層
把先前的小綠人時鐘改為GPS時鐘,卻發現問題很多,一直顯示不出來,要不就是閃爍厲害,實驗版的電路是用 74573 使用LATCH 方式用中断方式把他顯示出來,而小綠人則利用一般的定時分工驅動,也因為如此導致 GPS信號讀取時間不足而無法顯示,這正應驗了 LEGION大的"預言"....

GPS時鐘10 [800x600].JPG

GPS時鐘11 [800x600].JPG

GPS時鐘12 [800x600].JPG

//小綠人時鐘改為gps 時鐘 20120812

#include<reg52.h>
#define DataPort P0 // display LED segment
#define DrivePort P2 //display LED digit
//sbit Gok_LED =P1^2;// 收到"$GPRMC,"送出LED
bit disp_flag;
bit rec;  // receive rs232 OK_flag

void DelayUs2x(unsigned char t);//us级延时函数声明
void DelayMs(unsigned char t); //ms级延时
void Display(unsigned char n,unsigned char Num);// 把七段顯示出去

unsigned char code  segment[10]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// VFD
unsigned char code grid[4]={ 0x01,0x02,0x04,0x08 };
// 10H H 10m m, 位碼3>>分, 位碼2>>10分,位碼1>>時, 位碼0>>10時,
unsigned char TempData[4];
//,把段碼的資料存到要顯示的緩衝器上面,利用類似查表的對應方式,送出至顯示器. TempData[ ] 是放置要顯示的7段資料
unsigned char CLCK[6];
//void Display(char n,char Num);
unsigned char count;


void Display_Data_Operation(void)//以時間分秒為共同語言, 數字轉換成7段顯示
{
TempData[3]= segment[CLCK[0]];//时
// if (CLCK[2]==0)
  //  TempData[3]=0;
TempData[2]= segment[CLCK[1]];//
TempData[1]= segment[CLCK[2]]; //分
TempData[0]= segment[CLCK[3]];//
//Display(0,4);       
}       
//--------------------------------------------------------------------------------------------
void Display(unsigned char n,unsigned char Num)// 把七段顯示出去
{
      unsigned char i;
           n=0;//已經沒有用了,但先前程式設計關係還是把他設為0
          for(i=0;i<Num;i++)
           {
           DataPort= TempData; //
           DrivePort= grid;      
                 DelayMs(5); //0908 update 因閃爍把20改成10 >>5>>2
       }
}

void DelayUs2x(unsigned char t)
{   
while(--t);
}

void DelayMs(unsigned char t)
{
while(t--)
{
     //大致延时1mS
     DelayUs2x(245);
         DelayUs2x(245);
}
}




//  ///////////////FROM GPS ///////////////////////////////////////////////////
unsigned char Gok;// "$GPRMC," 確認完成
unsigned char REV_DATA;//儲存RS232緩衝區的暫存變數
void Init_Timer0(void);//定时器初始化

//----- FROM GPS PROG -----

void Init_Timer0(void)
{
TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
EA=1;            //总中断打开
ET0=1;           //定时器中断打开
TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1
{
// static unsigned int count;
TH0=(65536-2010)/256;                  //重新赋值 2ms
TL0=(65536-2010)%256;

count++;
if (count==10)
  {
   count=0;
   disp_flag=1;

   }
}

void UART_Init(void)
{
    SCON  = 0x50;                        // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xFA;               // TH1:  重装值 4800 11.0592MHz  
    TR1   = 1;                  // TR1:  timer 1 打开                        
    EA    = 1;                  //打开总中断
    ES    = 1;                  //打开串口中断
}

void UART_SER (void) interrupt 4 //來自串口時鐘 1602 程式
{
     if(RI)                        //判断是接收中断产生
     {
          RI=0;                      //标志位清零
          REV_DATA =SBUF;                 //读入缓冲区的值
      rec=1;
//          rec_led=1;
         }
   if(TI)  //如果是发送标志位,清零
     TI=0;
}

unsigned char GPRMC_K(void)//比較 $GPRMC
{
unsigned char TT;//轉換用
          while(rec==0);
        if(rec==1)
              if(REV_DATA == 'G')//一路比較下去全部要相同 "GPRMC,"
                    rec=0;
                   else
                 return 0;
          while(rec==0);        
        if(rec==1)             
          if(REV_DATA == 'P')           
                        rec=0;   

                     while(rec==0);        
        if(rec==1)             
          if(REV_DATA == 'R')//一路比較下去全部要相同 "GPRMC,"           
                        rec=0;         
                  else
                    return 0;                 
      
                     while(rec==0);        
        if(rec==1)             
          if(REV_DATA == 'M')//一路比較下去全部要相同 "GPRMC,"           
                        rec=0;
           
                 
      
                     while(rec==0);        
        if(rec==1)             
          if(REV_DATA == 'C')//一路比較下去全部要相同 "GPRMC,"           
                        rec=0;


          while(rec==0);     
        if(rec==1)     
          if(REV_DATA == ',')//一路比較下去全部要相同 "GPRMC,"
                   rec=0;
                  else
                    return 0;

          while(rec==0);      
        if(rec==1)                     
           CLCK[0]=REV_DATA-0x30;//10hr
                   rec=0;      
                        
                     while(rec==0);      
        if(rec==1)                     
           CLCK[1]=REV_DATA-0x30;//1hr
                   rec=0;         
                 
          while(rec==0);      
        if(rec==1)                     
           CLCK[2]=REV_DATA-0x30;//10min
                   rec=0;         
                 
      
                     while(rec==0);        
        if(rec==1)                     
           CLCK[3]=REV_DATA-0x30;//1min
                   rec=0;         
                 
      
                     while(rec==0);        
        if(rec==1)                     
           CLCK[4]=REV_DATA-0x30;//10sec
                   rec=0;         
                 
      
                     while(rec==0);        
        if(rec==1)                     
           CLCK[5]=REV_DATA-0x30;//sec         
                 

  TT=CLCK[0]*10+CLCK[1]+8;
  if(TT>23)
     TT-=24;
         CLCK[0]=TT/10;
         CLCK[1]=TT%10;
  return 1;
  }



void Get_Gps(void)
{
if(rec==1)
  {
    rec=0;//清除授信旗標
    if(REV_DATA == '$')
     {
          Gok=GPRMC_K();//確認收到 "GPRMC," 字元
      }
    }
  }


// ---------  GPS MAIN PROGRAM -------------

void main(void)
{
Init_Timer0();
UART_Init();
while(1)
{
Get_Gps();

  if(Gok==1)
      {
       Display_Data_Operation ();//轉換相關值到顯示
           }

if(disp_flag==1)
   {
     disp_flag=0;
     Display(0,4);
    }
Display(0,4);
  }
}




後續的玩具會利用 74595 驅動 點陣LED 目前 部分線路先做出來,接下來就是 控制驅動電路,最後則是 修改程式把跑馬燈的程式修改給 GPS點陣時鐘使用...

GPS時鐘02 [800x600].JPG


GPS時鐘01 [800x600].JPG


GPS時鐘04 [800x600].JPG


GPS時鐘03 [800x600].JPG

 樓主| 發表於 2012-8-12 23:13:44 | 顯示全部樓層
antlu 發表於 2012-8-12 09:26 PM static/image/common/back.gif
把先前的小綠人時鐘改為GPS時鐘,卻發現問題很多,一直顯示不出來,要不就是閃爍厲害,實驗版的電路是用 74573  ...

antlu大
看來你還是改一下,平時還是用ds1302作平時時間的抓取顯示
然後每小時作一次gps校時便很夠用了,
再怎麼變化,不管是過多少年也是頂多固定每小時差上個幾秒
不然就把32.768的補償電容換成可變電容,找個計頻器再作校整,那誤差就更小了
因又在忙,所以忘了說,上面劃的那個GPS用RS485傳輸是可以的,
前幾天試了1條50米長的是能用的,就請參考看看了,
看來是可以先固定你的GPS接收到外頭去了
我是自己在寫一個程式,大概就固定在每天早晚6點用GPS作一次校時
現在是麻煩在用ASM去寫一個月里的某一個日期是那個月的那1週比較麻煩,
這段是快寫好了,花了半天在弄這個,有時想想,還是返回用C寫這類運算比較方便
但遇到效率問題時就又傷腦筋
發表於 2012-8-13 09:32:16 | 顯示全部樓層
legion 發表於 2012-8-12 11:13 PM static/image/common/back.gif
antlu大
看來你還是改一下,平時還是用ds1302作平時時間的抓取顯示
然後每小時作一次gps校時便很夠用了,

LEGION大:
   我現在的板子有 1302 只要改程式就可以了,問題在於 1302 的讀取與寫入時間會增加許多,若是與GPS一起讀取會導致閃爍的問題,還有定時讀取和寫入的動作我還沒有概念... 目前GPS不需要太長的CABLE 放在"採光罩"下面就可以了!!(溫度會高一些) 就等你的時間更新程式,我可能會花時間在 點陣LED的驅動方面,這樣就可以完成 點陣GPS時鐘了,
  你看我的程式會發現 我只讀取時 分 秒 而已,因為 跳"," 的部分我還沒寫,所以還要花一些時間把他"解"出來,因為你的程式寫的很簡潔,我還不知道要如何把  跳"," & 跳幾個"," 想出來,這部分完成才有機會把年月日弄出來...
   GPS 訊號較弱的時候會有每秒"閃爍"一下的問題,使用 LATCH 就沒有這現象...
 樓主| 發表於 2012-8-13 21:05:26 | 顯示全部樓層
如果真的因為效能產生閃爍情形時,除了修改效能及接收GPS頻率外
只能從輸出到LED電路上作更改,使用串入並出用LATCH模式
不過這里指的是你那4個8位數可是每次都作一次傳輸,等於一次傳32個
或用BUS的模弍來作LATCH就更加快一些,但是應該不用搞的更複雜才是
要維持視覺上的時間連續動作也有很多方式
目前我的作法是GPS平時是不送電,在一定指定時間控制一個繼電器作送電給GPS
平時GPS大約要5分鐘左右才會完全收到信號,所以設定送電10分鐘後才收GPS信號
收完信號後,停止DS1302動作,將GPS時間值加1秒輸入DS1302,控制停止到啟動1秒差再回復DS1302動作
GPS接著斷電,那整個電路就少了1個GPS作常態性耗電
就像早上5:10分GPS送電,5:20分接收GPS信號作時間校正,5:21分GPS斷電
設半夜也行,我想應該沒人半夜起來看為何時鐘停了幾秒吧
你的程式中要加上一段GPS接收判讀錯誤次數比較
一旦接收判讀多少次錯誤時便先跳出,這大概就是你會"閃爍"一下的問題
同一個東西,每人方法不同,找一個自己順手又能接受的會比較快一點

發表於 2012-8-14 01:00:05 | 顯示全部樓層
legion 發表於 2012-8-13 09:05 PM static/image/common/back.gif
如果真的因為效能產生閃爍情形時,除了修改效能及接收GPS頻率外
只能從輸出到LED電路上作更改,使用串入並出 ...

LEGION大:
  你的創意真的很棒又省電,LOADING 又小!! 很直得"努力"去改! 謝謝!!
 樓主| 發表於 2012-8-15 22:04:14 | 顯示全部樓層
希望能早日看到antlu大的大作
發表於 2012-8-16 12:15:32 | 顯示全部樓層
legion 發表於 2012-8-15 10:04 PM static/image/common/back.gif
希望能早日看到antlu大的大作

LEGION大:
   小弟的作品 昨天晚上PO出來了,很陽春!! 我個性較急所以就先做一個簡易版的,希望不會讓你失望,會再接再勵的, http://bbs.pigoo.com/thread-40195-1-1.html 您參考!! 開機之後不會顯示 約 幾秒之後就會顯示時間,一開始 因為收不到 GPS 所以會以系統時間 07:59:XX 等收到 GPS 信號之後自動更新時間顯示,..
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2024-12-18 11:09 PM , Processed in 0.080357 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.