標(biāo)題: 十年來第一個(gè)單片機(jī)成果 [打印本頁]

作者: xiaoniu    時(shí)間: 2014-12-28 00:47
標(biāo)題: 十年來第一個(gè)單片機(jī)成果
這是運(yùn)行照片


這是去掉顯示器后的線路板


終結(jié):
    1:元件選擇;全部選用低功耗低電壓的串行模塊,包括一總線溫度傳感器DS18B20,串行時(shí)鐘DS1302,串行8位筆劃液晶顯示器SMS0801b(長沙太陽人公司產(chǎn)),及89C2051單片機(jī),原本要增加一個(gè)頻率輸出的濕度傳感器,因89C2051代碼空間有限而作罷.

    2:開發(fā)工具,51開發(fā)板,KEIL C51,自己用試驗(yàn)板焊的板子(開發(fā)完成,試驗(yàn)板就成了成品板了),EP51PRO編程器,XL1000主要用來測試DS18B20及重新熟悉C51程序,因開發(fā)板輸出端子接觸不牢靠,影響DS1302正常讀數(shù),故而DS1302其實(shí)是在試驗(yàn)板上用燒片的方式完成測試(沒有仿真器很苦)

    3:程序,全部用C51書寫編譯(搞習(xí)慣了高級語言.寫不來匯編了),編譯后大約占用了1.84K的代碼空間,56字節(jié)的XDATA空間,一片89C51正好裝下,程序采用模塊化設(shè)計(jì),顯示,數(shù)據(jù)寫入讀出,鍵盤處理全部是集中處理的,使用了一定的編程技巧.

    4:功能,參照本人的卡西歐手表的按鍵操作方式設(shè)計(jì)了功能模塊的顯示,調(diào)整,切換,
      按鍵一:開機(jī)復(fù)位后顯示時(shí)間界面,按一下切換到日期顯示,再按是溫度,再按是鬧鐘,再按返回時(shí)間界面,若在調(diào)整界面則用于調(diào)整項(xiàng)目的循環(huán)切換;
      按鍵二:在時(shí)間,日期,鬧鐘顯示界面下按2秒,出現(xiàn)各自的調(diào)整界面,再按2秒退出調(diào)整界面,進(jìn)入調(diào)整界面后,要調(diào)整的項(xiàng)目0.5秒間隔閃爍;
      按鍵三:調(diào)整---數(shù)字加1,或啟停鬧鐘(暫不支持連續(xù)按鍵)
      按鍵四:調(diào)整---數(shù)字減1,或啟停鬧鐘

    5:精度,時(shí)間精確到秒(具體精度由32.768K晶振決定),鬧鐘以分為單位響鬧,每次響鬧20秒,按任意鍵停止.溫度精確到0.5度,分辨率是0.1度

    6:電源問題:起初用DC-DC升壓模塊+兩節(jié)鎳氫電池供電,后測試電池輸出電流達(dá)20毫安,2400毫安時(shí)的電池5天不到就完了, 而89C2051本身只耗7毫安電流,其他模塊加起來耗電還不到1毫安,可見DC-DC升壓模塊的效率實(shí)在太低,不具備實(shí)用的價(jià)值,起碼用在電池供電電路要求長期供電的成品中是不行的,后來去掉DC-DC模塊,直接用3.7v鋰電池供電,則電流減小到3毫安,比原來足足少了6倍之多.
    采用3.7v供電后產(chǎn)生了一個(gè)問題,到現(xiàn)在還不知道原因,就是板上的模塊理論上都支持2.7v的低壓,DS1302支持2.5V,但是在實(shí)際使用中發(fā)現(xiàn)供電電源小于3.6V時(shí),DS1302讀數(shù)就出現(xiàn)混亂了,離器件手冊所說的2.5v相差很大,以至于用鋰電池供電都有一定的困難了,因?yàn)殇囯姷姆烹娊K止電壓有2.75v,用3節(jié)鎳氫供電存在同樣的問題,3節(jié)電池總電壓是1.35*3=4.05v,放電到1.2*3=3.6v就不能正常工作,但是他的終止電壓有1.1v,加起來才3.3v,除非用堿性電池,這樣問題是解決了,成本也上去了.

     7:改進(jìn),未來想更換12M的晶振為4M的,進(jìn)一步減少耗電,但是要改動(dòng)程序,因?yàn)镈S18B20對時(shí)序要求很嚴(yán)格,為了保證DS18B20的正常讀數(shù),甚至要暫時(shí)關(guān)閉中斷.還可以試驗(yàn)用讓系統(tǒng)進(jìn)入空閑方式的方法減少耗電.

作者: xiaoniu    時(shí)間: 2014-12-28 00:48
    從下午開始搞起一直到晚上一直在測試這個(gè)來自網(wǎng)上的驅(qū)動(dòng)程序,程序很不穩(wěn)定,按復(fù)位鍵后經(jīng)常顯示不出來,最后從網(wǎng)上找了其他的程序,比較后發(fā)現(xiàn)是液晶初始化程序有問題,大部分程序都是根據(jù)一個(gè)1602的數(shù)據(jù)手冊寫的,大致如下:
1.LCM_WriteCommand(0x38,0);
delaytime(5);
2.LCM_WriteCommand(0x38,0);
delaytime(5);
3.LCM_WriteCommand(0x38,0);
4.LCM_WriteCommand(0x38,1);
5.LCM_WriteCommand(0x08,1);
6.LCM_WriteCommand(0x01,1);
7.LCM_WriteCommand(0x06,1);
8.LCM_WriteCommand(0x0c,1);
有問題的就是第五個(gè)調(diào)用,是關(guān)閉顯示的操作!!!
作者: xiaoniu    時(shí)間: 2014-12-28 00:49
  下午禁不住手癢癢,做了一條DS18B20的探頭線,是用鼠標(biāo)線、電容鋁殼、3P接插件及熱縮管做成的,質(zhì)量還是不錯(cuò)的,就是線粗了點(diǎn)。程序重新寫了一下,加入了讀取探頭溫度的程序,編譯后了以后89C2051只剩下了80字節(jié)的空間,今后想做點(diǎn)其他功能也是沒辦法了,除非換用89C4051,不過有沒有這個(gè)必要要看自己的心情了。整個(gè)模塊完成后,到廚房冰箱那里測試了一下零下溫度顯示功能程序,基本正常。
作者: xiaoniu    時(shí)間: 2014-12-28 00:49


    當(dāng)初做好那個(gè)溫控器的時(shí)候,就已經(jīng)打算好要增加個(gè)通訊功能的,時(shí)間已經(jīng)過去一年多,可還是什么都沒做,因?yàn)樽罱贒IY上動(dòng)作挺多,不如干脆也把這個(gè)功能實(shí)現(xiàn)了吧。

    上周六,開始準(zhǔn)備工作,首先要實(shí)現(xiàn)的是單向通訊功能,單片機(jī)只定時(shí)發(fā)送溫度數(shù)據(jù)到串口,PC機(jī)接收后顯示在軟件窗口上,PC控制單片機(jī)就不打算實(shí)現(xiàn)了,沒這個(gè)必要了。這樣只需要一個(gè)單向的RS232接口就行了,剛好夏天的時(shí)候去買了一個(gè)M8電子負(fù)載的套件,其中就有這個(gè)單向的RS232接口,是用分立元件實(shí)現(xiàn)的,很簡單(3電阻,1三極管),于是把這個(gè)電路給抄了下來,在焊接線路板前,先用這個(gè)現(xiàn)成的電路測試一下。

    單片機(jī)軟件部分,比較費(fèi)勁的看了一下有關(guān)文檔,還好只需要簡單的發(fā)送功能,沒有復(fù)雜的通訊協(xié)議,這樣就先用CVAVR的代碼向?qū)闪舜趨?shù),然后加入到工程中,發(fā)送函數(shù)直接使用putchar函數(shù)發(fā)送4位溫度值,每隔500ms發(fā)送一次,

    PC程序使用c#編寫,也很簡單,用串口事件接收4個(gè)字節(jié),轉(zhuǎn)成字符串后寫入LABEL控件就可以了,不過要注意的是,要先設(shè)置串口控件的ReceivedBytesThreshold屬性為要接收數(shù)據(jù)的字節(jié)數(shù),否則不能正確區(qū)分前后發(fā)過來的數(shù)據(jù),還有就是在.net下串口控件工作在輔助線程,不能直接向主線程發(fā)送數(shù)據(jù),比如將數(shù)據(jù)寫入label控件,這是只要設(shè)置Label(類名,不是具體的控件名稱).CheckForIllegalCrossThreadCalls = false就可以了;

    費(fèi)了點(diǎn)勁兒,打通了通訊環(huán)節(jié),然后就是在線路板上搭建RS232轉(zhuǎn)換接口,經(jīng)測試完全沒問題,接下了就是安裝到服務(wù)器上測試了,串口線是用普通的電線絞成的,因?yàn)橥ㄓ嵕嚯x不太遠(yuǎn),也沒什么問題。安裝好后,程序全部正常工作,只是界面有一點(diǎn)問題,家里用的是WIN7,有微軟雅黑字體,而服務(wù)器上只有黑體,所以溫度數(shù)字顯示的有點(diǎn)別扭,重新修改了一下界面,順便加上了發(fā)送溫度上限的功能。

    至此這次改造獲得成功!





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1