當您也想自己做溫度上下限控制器

由於有人問到溫度上下限控制器要怎做?用留言倒也回不了多少字,所以 genie 決定另外寫了這篇給有意願想自己動手做的人一些提示。礙於 genie 的板子是市售的套件,在尊重該公司著作權的前提下,genie 不便公開說明電路怎拉、也不便於提供 genie 所寫的程式,各位可以參酌 8051 的入門書,參考 LED、繼電器、按鈕、七節式 LED 的正確接法。

 

這邊 genie 是有現成的板子可以用,如果您:一、想要這樣的功能,二、還未 layout 線路,三、還沒寫程式。那麼,genie 會先建議在麵包板上把電路先確認好、確認要用哪幾根 I/O 腳?

 

以這個例子來說,三顆按鈕要三根 I/O 腳、三個 LED 要再三根、兩個繼電器要兩根、三位數七節式 LED 以掃描式顯示要 3 + 7 = 10 根,最後是溫度 IC 要一根,先把腳拉出來。

 

接腳確認後,在紙上畫出七節式 LED 所要顯示的所有字(例如 genie 實作了數字 0-9、英文 H、L 及表示錯誤的 Err,最後是表達負數的 -),並依接腳計算該 Port 所要輸出的值是多少?為了便於程式寫作,genie 會建議將 LED a-g 七根接腳佔用一組 Port(例如 P0),這樣要顯示時直接設 P0 的值為剛算出來的值,這樣程式好寫一點;共極的三根腳就隨便。

 

主程式要先決定:最外層迴圈的功能是什麼?是不斷 refresh 七節式顯示器,每個迴圈中再順便檢查有沒按鈕被按下?還是最外層迴圈負責檢查按鍵,每個迴圈中再去 refresh 七節式顯示器?(兩種都可以寫)

 

如果您跟 genie 一樣是新手上路,那不用急著一開始就先讓所有功能都動起來,可以像 genie 一樣,先從點 LED 這種簡單的開始,LED 只要 8051 的基本電路(一個震盪器、兩個 30pF 電容、一個 10uF 電容、一個 10KΩ電阻)有接,找支 I/O 腳把 LED 接上,正極或負極接 8051 都行,只是一個是設 1 點亮;另一個是設 0 點亮,就可以測試程式。程式沒問題後再加入按鍵,例如按第一顆鈕點紅燈,第二顆鈕點黃燈、第三顆鈕點綠燈之類的,熟悉後再來寫三位數七節式 LED。

 

三位數七節式 LED 的掃描式點燈,唯一注意的地方是點亮後稍微 delay 一下下,再去點下一位數,這樣看起來亮度會比較高,不然會覺得好像沒亮,先前提到的對照表要先建,然後您就可以寫個大迴圈,讓他從 0 數到 999,確認一下您建出來的表沒錯,然後確認其他像 H、L、- 都可以顯示無誤。

 

最後才寫 DS1821,1821 您得留意您使用的震盪器頻率決定了您在送信號、收訊號時,要等待幾個空指令(如果您夠熟稔,也可以用 timer,只是 DS1821 的誤差容許範圍還滿大的,所以我沒用 timer),您得先寫出 send 1 Byte和 receive 1 Byte 的 function,然後才是送出完整指令、接收資料的函式,最後才寫 DS1821 的理由是:此時您可以將要丟的值、收到的值、都透過七節式 LED 顯示出來,這樣您可以掌握程式有沒正常動作、正常讀到值,都正常後才去試著玩他的 EEPROM,看要不要把設定值存到 EEPROM。

 

如果需要用到 RS-232,那會需要加上 MAX232、ICL232 或 HIN232,將單純的 5V 轉成電腦要用的 12V,只要按照 Data Sheet 接上四顆額外的電容,再把 RX/TX 接到 8051 的 RX/TX,電路部份就算完成,賸下是依震盪器頻率和希求的鮑率算出 Timer 的正確值就行。

 

最後才將全部整合在一起。這樣的提示夠清楚了吧?Good Luck!

 

本篇發表於 單晶片玩具。將永久鏈結加入書籤。

2 則回應給 當您也想自己做溫度上下限控制器

  1. ken 說道:

    你好

    我也是和你一樣購買這套實習套件的(因為學校專題要用),我在麵包版上已經接好了,當我要測試 “設定溫度”時 我按照說明書上指示 ,設定完上限溫度 要儲存返回時 七段顯示器卻突然斷電  這是為什麼呢?       

                             麻煩解答一下  

                                                 謝謝

     

  2. 活蹦亂跳的小精靈 說道:

      我想您可能有接錯線吧,原設計中,按鈕在 P1,7節式 LED 在 P0/P2,要讓按鈕直接影響7節式 LED 是不容易。您的「斷電」之後,是被 reset 重開呢?還是只是單純 LED 不顯示,動作仍持續?我傾向建議您再次檢查電路。

     

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *