找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6878|回復(fù): 11
收起左側(cè)

一個(gè)簡(jiǎn)易的GPS數(shù)據(jù)顯示器

[復(fù)制鏈接]
ID:71235 發(fā)表于 2014-12-28 00:40 | 顯示全部樓層 |閱讀模式


    前幾天已經(jīng)測(cè)試了LCM顯示的驅(qū)動(dòng),基本能穩(wěn)定顯示了,偶爾啟動(dòng)時(shí)不能執(zhí)行清屏命令。
    昨天下去去小C處買了個(gè)串口擋板,為的是用擋板上的公頭DB9插座。晚上即開(kāi)始制作這個(gè)GPS數(shù)據(jù)顯示器了。
    硬件非常簡(jiǎn)單,一個(gè)TTL-RS232兼容的GPS接收器,這個(gè)早就從淘寶上買過(guò)來(lái)了,比起藍(lán)牙的接收器來(lái)便宜很多,才75塊錢,一個(gè)89C51最小系統(tǒng)(只有復(fù)位、晶振線路),成本不過(guò)6塊來(lái)錢,這個(gè)89C51也是好多年前買的,板子還沒(méi)焊,因?yàn)榉抡嫫鬟沒(méi)到貨,程序測(cè)試是在XL1000開(kāi)發(fā)板上做的,因?yàn)橛布䦟?shí)在太簡(jiǎn)單了,而且這個(gè)開(kāi)發(fā)板還支持USB串口,這樣就省得來(lái)回拔串口插頭了。
    程序測(cè)試不是很順利,在排除了硬件上的問(wèn)題后,初步測(cè)試了串口的功能,可以正常的從接收器上接收數(shù)據(jù)了,因?yàn)榇诮邮帐遣捎弥袛喾绞降,不是軟件查詢,所以需要設(shè)置不少的標(biāo)志變量,而且程序的流程也變得不可捉摸起來(lái),到11點(diǎn)的時(shí)候,已經(jīng)可以處理緯度數(shù)據(jù)了,只是相同的數(shù)據(jù),相同的程序,經(jīng)度數(shù)據(jù)怎么也顯示不出來(lái),看到的只是一堆亂碼。
    今天早上很早就起來(lái),仍然想著要搞清楚昨晚的問(wèn)題,搞了很久還是不行,只好先接收個(gè)緯度半球表示(即N或者S)試試,沒(méi)想到經(jīng)度數(shù)據(jù)竟然可以顯示出來(lái)了。到下午午覺(jué)醒來(lái)的時(shí)候,整理了一下程序,添加了“度”符號(hào)顯示功能,可用衛(wèi)星數(shù)目、信號(hào)質(zhì)量顯示功能。到寫這篇日志為止只有一個(gè)問(wèn)題沒(méi)搞清楚,其實(shí)是和經(jīng)度顯示問(wèn)題相似的,就是經(jīng)度半球標(biāo)識(shí)顯示不正常,老是顯示個(gè)亂碼或者“E”(正常情況下應(yīng)該顯示E的)或者一個(gè)“,”(這是GPS數(shù)據(jù)的分隔符),程序里怎么也看不出問(wèn)題來(lái),因?yàn)榫暥劝肭驑?biāo)識(shí)顯示是正常的。
    到目前為止程序只耗費(fèi)了700來(lái)字節(jié),其中LCM驅(qū)動(dòng)就花了300多字節(jié),程序空間還綽綽有余,RAM空間已經(jīng)用了48字節(jié),倒有點(diǎn)讓人擔(dān)心,畢竟89C51只有128字節(jié)的RAM。
回復(fù)

使用道具 舉報(bào)

ID:71235 發(fā)表于 2014-12-28 00:40 | 顯示全部樓層


    其實(shí)星期五就送到了,一直就躺在辦公室里,下午去的時(shí)候還向賣給我的人要快遞單號(hào)。
    包裝盒有點(diǎn)舊,在人家手里已經(jīng)1年了,也難怪了。打開(kāi)包裝,說(shuō)明書,軟件光盤、裝箱單躺在最上面,下面發(fā)泡盒子里則有仿真器主機(jī),電源、一個(gè)標(biāo)準(zhǔn)51仿真頭,最讓人高興的是有一個(gè)51轉(zhuǎn)2051的轉(zhuǎn)換頭,這下省得去網(wǎng)上去買了,仿真頭上套著個(gè)針腳保護(hù)器。盒子底層是一長(zhǎng)一短的排線和一條串口連接線。
    定了定神,開(kāi)始拆包裝準(zhǔn)備試機(jī)。先試試能不能用在XL1000開(kāi)發(fā)板上,取下開(kāi)發(fā)板上的89s52,插上仿真頭,連接仿真器,打開(kāi)仿真器電源,開(kāi)發(fā)板電源,仿真頭上紅燈亮起,沒(méi)聞到異味,這起碼說(shuō)明了仿真器電源和開(kāi)發(fā)板電源并不沖突。接著插上串口電纜,打開(kāi)PC上的TKStudio仿真軟件,新建一個(gè)工程,設(shè)置正確后點(diǎn)DEBUG鍵,通訊失。∮执蜷_(kāi)KEILC,按照說(shuō)明書安裝后驅(qū)動(dòng),再聯(lián)機(jī)還是失敗,啟動(dòng)串口調(diào)試助手軟件,可用正常打開(kāi)COM1端口,看來(lái)不是串口硬件的原因。抱著試試看的心情,從樓下取來(lái)筆記本電腦,這是一臺(tái)舊筆記本,還有一個(gè)串口可用的,安裝好仿真軟件,聯(lián)機(jī)成功!突然明白了一個(gè)問(wèn)題,原來(lái)PC上自制的的串口延長(zhǎng)線只有2,3,5三根線,而這三根線用在單片機(jī)上是足夠了,但是用在速度、穩(wěn)定性要求高得多的仿真器上顯然是不行的,于是換下自制的線換上標(biāo)準(zhǔn)的線,再次聯(lián)機(jī),這回馬上成功了,接下來(lái)試了試全速運(yùn)行,單步運(yùn)行,斷點(diǎn),都行的,這也就放心了。
    這次試機(jī)弄清楚了三個(gè)問(wèn)題,一是仿真器硬件是好的,二是仿真器串口用的是標(biāo)準(zhǔn)的9線制,三是開(kāi)發(fā)板可以用作目標(biāo)板,這樣一般的小項(xiàng)目就可以不用立刻做實(shí)驗(yàn)板了。
回復(fù)

使用道具 舉報(bào)

ID:71235 發(fā)表于 2014-12-28 00:41 | 顯示全部樓層
    前天拿到的仿真器,當(dāng)天就有了用武之地,在單步仿真的時(shí)候,發(fā)現(xiàn)了程序中的一個(gè)漏洞,一個(gè)計(jì)數(shù)用變量沒(méi)有被及時(shí)清零,顯示數(shù)據(jù)的時(shí)候總是只有緯度值是正確的(因?yàn)樗堑谝粋(gè)被解析的,計(jì)數(shù)初值是零,不像以后的計(jì)數(shù)值因沒(méi)清零所以被累積起來(lái)了),而其他的顯示內(nèi)容總是變幻莫測(cè),這就是給我造成困擾的原因。昨天晚上又對(duì)$GPRMC語(yǔ)句進(jìn)行了解析,現(xiàn)在可以顯示時(shí)間、日期、高度、速度了(度量變換還沒(méi)來(lái)得及做)。
    今天一整天的測(cè)試發(fā)現(xiàn)了一個(gè)比較嚴(yán)重的問(wèn)題,那就是程序只能正常運(yùn)行10來(lái)分鐘,以后顯示就會(huì)出錯(cuò),按鍵也沒(méi)了反應(yīng),用GPS實(shí)測(cè)或者用串口調(diào)試軟件模擬數(shù)據(jù)結(jié)果是相同的,懷疑是程序跑飛了,剛剛給程序加了看門狗,10幾分鐘后,問(wèn)題照舊,看來(lái)不是程序跑飛的問(wèn)題了,去群里問(wèn)了問(wèn),沒(méi)人回答。如果這個(gè)問(wèn)題不解決,這次做的這個(gè)東西就沒(méi)了實(shí)用價(jià)值!
回復(fù)

使用道具 舉報(bào)

ID:71235 發(fā)表于 2014-12-28 00:42 | 顯示全部樓層
    這次的DIY經(jīng)過(guò)了4個(gè)階段:
    1.1602液晶顯示驅(qū)動(dòng)測(cè)試;
    2.GPS模塊與單片機(jī)的通訊測(cè)試;
    3.GPS數(shù)據(jù)處理顯示程序設(shè)計(jì);
    4.硬件安裝調(diào)試.

    1602液晶顯示器的驅(qū)動(dòng)調(diào)試經(jīng)歷一點(diǎn)點(diǎn)的波折,好在網(wǎng)上共享的程序不少,費(fèi)了點(diǎn)時(shí)間也就找到適用的程序了.
而GPS模塊與單片機(jī)的串行通訊則要自己來(lái)寫了,好在N年前就寫過(guò)類似的程序,還有串口調(diào)試助手之類的軟件可以用,所以這一關(guān)也就過(guò)去了.接下來(lái)是數(shù)據(jù)處理,GPS送出的數(shù)據(jù)是ASCII字符串,每個(gè)數(shù)據(jù)字段用","隔開(kāi),若干個(gè)字段組成一個(gè)協(xié)議字符串,每個(gè)協(xié)議字符串又有一個(gè)$打頭的6個(gè)字符組成一個(gè)協(xié)議標(biāo)志,通過(guò)判讀這個(gè)標(biāo)志來(lái)區(qū)分不同的協(xié)議,這個(gè)過(guò)程看似很簡(jiǎn)單,確實(shí)如果用PC來(lái)實(shí)現(xiàn)的話是再容易不過(guò)的事情了,但是單片機(jī)不行,它沒(méi)有什么字符串處理函數(shù)可以隨意調(diào)用,而且單片機(jī)的運(yùn)算速度遠(yuǎn)不如PC,如何把發(fā)過(guò)來(lái)的字符串拆分成一個(gè)一個(gè)的字段是個(gè)很要緊的事情,好在在一本書上看到了一種思路,就是對(duì)","進(jìn)行計(jì)數(shù),通過(guò)判讀這個(gè)計(jì)數(shù)值來(lái)區(qū)分不同的字段,試驗(yàn)證明這種方法很有效,接下來(lái)的實(shí)際編程碰到了不少的問(wèn)題,最后發(fā)現(xiàn)都是程序流程的問(wèn)題,用軟件仿真或者仿真器仿真一下也就可以解決了.
     前天開(kāi)始做安裝機(jī)殼,焊接線路板,機(jī)殼是上次從江蘇買的,線路板還是3毛5分一塊的實(shí)驗(yàn)板,另外買回若干中XH2.54系列的接插件及銅柱,電源插座等等,開(kāi)液晶顯示的空花了不少時(shí)間,還廢掉了一個(gè)小切割砂輪片;等板子插座都焊接好了,才發(fā)現(xiàn)機(jī)殼內(nèi)部亂的不行,而且也就顯示器和主板的距離挨得太近,安裝比較困難,只好用砂輪打磨了一下銅柱,讓兩塊板子距離盡量的遠(yuǎn)些,好歹把所有的東西都裝進(jìn)去了,放電池盒的地方也所剩無(wú)幾了,索性不用電池供電了.通電測(cè)試,主板運(yùn)行不起來(lái),花了一天的時(shí)間思考這個(gè)問(wèn)題,老是懷疑是晶振電路不起振,把個(gè)晶振拆了裝,裝了拆,好好的線路板焊片也給燙壞了,翻書找89C51的最小系統(tǒng)電路圖,對(duì)比自己的電路似乎沒(méi)有問(wèn)題,但是同樣的程序在開(kāi)發(fā)板上是能正常運(yùn)行的,問(wèn)題還是出在電路上,后來(lái)看一個(gè)BLOG找到一張最小系統(tǒng)的電路,這才看到89C51出PSEN/VPP引腳要接VCC的,趕緊焊接好,程序馬上運(yùn)行正常,原來(lái)這個(gè)引腳接正電源的時(shí)候,程序要從能不ROM開(kāi)始運(yùn)行的,否則從外部ROM運(yùn)行,我的程序全在內(nèi)部,而這只引腳又是懸空的,當(dāng)然運(yùn)行不正常了;這里要批判一下那些所謂的單片機(jī)入門書工具書,電路圖是N年前8031時(shí)代的書上抄的,程序又是運(yùn)行89c51系統(tǒng)上的,整個(gè)書上沒(méi)一點(diǎn)說(shuō)明,真是害人不淺.
    昨天下午坐上老婆的車出去測(cè)試了一下,基本正常,今天早上又換成了24M的晶體,顯示器背光加了限流電阻,整機(jī)的耗電量因此下降了2/3,運(yùn)行速度明顯加快,至于換了晶振以后的問(wèn)題就暫且不去理會(huì)了,畢竟不是很大的問(wèn)題,再說(shuō)這個(gè)DIY說(shuō)到底還是拿來(lái)練練手的,離實(shí)用還有不少距離,那些問(wèn)題就留在以后有心情的時(shí)候再解決吧.
    以下是實(shí)物照片,紀(jì)念一下:

雜亂的工作臺(tái)


外面


內(nèi)部


回復(fù)

使用道具 舉報(bào)

ID:71235 發(fā)表于 2014-12-28 00:42 | 顯示全部樓層
    GPS接收終端安裝好這么多天,運(yùn)行一直比較正常,唯一感到遺憾的是液晶顯示器初始化不正常,經(jīng)常在上電或者復(fù)位的時(shí)候顯示空白,而主程序運(yùn)行是正常的,就是顯示不出字符,需要反復(fù)復(fù)位才會(huì)成功一次,調(diào)整參數(shù)數(shù)次還是不行。昨晚偶爾看一篇博客,講到1602顯示器初始化容易失敗的問(wèn)題,作者認(rèn)為應(yīng)該給初始化語(yǔ)句以足夠的延時(shí),千萬(wàn)不可為圖顯示快些而減少延時(shí)。我的CPU晶振原來(lái)用的是12m的,沒(méi)發(fā)現(xiàn)這個(gè)問(wèn)題,現(xiàn)在換成24m的問(wèn)題就出現(xiàn)了,看來(lái)問(wèn)題就是出在這里,其實(shí)以前也已經(jīng)認(rèn)識(shí)到這個(gè)問(wèn)題,只是沒(méi)下狠心加大延時(shí)。早上又一次打開(kāi)機(jī)殼,安裝上修改后的程序,現(xiàn)在無(wú)論怎么上電或者復(fù)位,顯示器都能正常顯示了!
回復(fù)

使用道具 舉報(bào)

ID:73962 發(fā)表于 2015-3-1 21:14 | 顯示全部樓層
願(yuàn)聞其詳……
回復(fù)

使用道具 舉報(bào)

ID:28571 發(fā)表于 2015-4-17 22:48 | 顯示全部樓層
好東西,學(xué)習(xí)一下,謝謝!
回復(fù)

使用道具 舉報(bào)

ID:78060 發(fā)表于 2015-4-26 23:32 | 顯示全部樓層
謝謝分享!學(xué)習(xí)收藏
回復(fù)

使用道具 舉報(bào)

ID:82930 發(fā)表于 2015-6-14 10:12 | 顯示全部樓層
您有 GPS  89C52 用1602顯示的程序么
回復(fù)

使用道具 舉報(bào)

ID:82930 發(fā)表于 2015-6-14 10:13 | 顯示全部樓層
        if(tmp == '$')//起始標(biāo)志
    {
        Command = 0;
        ReceivingF = 1;
        Bytes_counter = 0;
        Segment = 0;               //清空語(yǔ)句段計(jì)數(shù)器
        return;
    } 下的一個(gè)程序 這里 好像就進(jìn)不去了
回復(fù)

使用道具 舉報(bào)

ID:82930 發(fā)表于 2015-6-14 10:14 | 顯示全部樓層
哪位大師 能夠 幫助一下啊
回復(fù)

使用道具 舉報(bào)

ID:110866 發(fā)表于 2016-4-18 09:15 | 顯示全部樓層
資料沒(méi)上傳
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表