痞酷網_PIGOO

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

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

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

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

謝謝!
查看: 9275|回復: 32

DS1820 溫度IC

  [複製鏈接]
發表於 2013-11-13 15:57:31 | 顯示全部樓層 |閱讀模式
請問有沒有大大會
         DS1820 溫度IC  可以指點一下小弟嗎

小弟最近搞好幾個月了><
發表於 2013-11-13 17:19:02 | 顯示全部樓層
是軟體(溫度轉換))還是硬體(線路連接)的問體,還是都有不明白之處?
 樓主| 發表於 2013-11-13 17:51:19 | 顯示全部樓層
本帖最後由 zuoso2006 於 2013-11-13 05:53 PM 編輯

小弟 目前寫入 與讀出都沒有反應

小弟用stc89c52rc  
晶震 12hz

用組語寫的 請大大指點

讀取 輸出測試DS18B20.rar

1.11 KB, 下載次數: 31

發表於 2013-11-14 02:06:19 | 顯示全部樓層
Datasheet通訊部份是不是沒弄對?

我看了一下Datasheet好像應該是,
1. Init應該是拉Low至少480us後,等15us,然後持續等DQ變Low,偵測到Low後,要再等480us。
2. Write 1 時,先拉Low,至少等1us,不可超過15us,馬上再拉High,然後持續60uS
3. Write 0 時,直接拉Low,至少等60uS,不可超過120us,再拉回High

那裡有問題可能要清楚描述狀況才知道問題在那喔!
發表於 2013-11-14 10:25:02 | 顯示全部樓層
本帖最後由 ysc 於 2013-11-14 10:30 AM 編輯
zuoso2006 發表於 2013-11-13 05:51 PM static/image/common/back.gif
小弟 目前寫入 與讀出都沒有反應

小弟用stc89c52rc  


程式大約看過,時序與命令碼都有些問題,設計過幾個案子剛好有用到,擷取部分程式如下請參考,請注意存取DS18B20時不能有中斷程序,必須讓MCU專心讀取:
1.jpg
2.jpg
3.jpg
PS:以上程式使用在89C4051,XTAL頻率是24MHz。



發表於 2013-11-14 11:00:33 | 顯示全部樓層
zuoso2006 發表於 2013-11-13 05:51 PM static/image/common/back.gif
小弟 目前寫入 與讀出都沒有反應

小弟用stc89c52rc  

看了一下,建議使用ysc大的模式即可
因為你的程式里,使用T0去作DELAY1的方式本身是錯誤的
計時中斷的結構和使用都不對,
加上中斷功能本身也沒有啟動,
基本上計時中斷是不會被一般程式作CALL的方式
程式大概就停在WAIT:  JB   TF0,OK    ; 等待TF0 =1 (10uS到)這里
把DELAY的地方修改成一般延遲模式大概也就能解決了
發表於 2013-11-14 11:04:58 | 顯示全部樓層
ysc 發表於 2013-11-14 10:25 AM static/image/common/back.gif
程式大約看過,時序與命令碼都有些問題,設計過幾個案子剛好有用到,擷取部分程式如下請參考,請注意存取 ...


習慣用C語言寫後,發現用組語寫的人都很厲害,只有一個A然後轉來轉去...
尤其是call delay,R1~R5在那邊轉來轉去...
發現還是C語言好用...
發表於 2013-11-14 11:35:43 | 顯示全部樓層
cools0607 發表於 2013-11-14 11:04 AM static/image/common/back.gif
習慣用C語言寫後,發現用組語寫的人都很厲害,只有一個A然後轉來轉去...
尤其是call delay,R1~R5在那邊轉來 ...

呵呵~~可能每個人習慣不同,在PC上我會用C來寫,但在單晶片上用C卻寫不來,會用到單晶片都是很注重即時性,用高階語言總是有隔靴搔癢的感覺......

C對變數的掌握當然比組合語言簡單多了,但那也是拿內部記憶體與CPU資源換來的,只要捨得配置記憶體,組合語言也可以做到不必靠A或其他暫存器傳遞參數。

發表於 2013-11-14 11:44:47 | 顯示全部樓層
legion 發表於 2013-11-14 11:00 AM static/image/common/back.gif
看了一下,建議使用ysc大的模式即可
因為你的程式里,使用T0去作DELAY1的方式本身是錯誤的
計時中斷的結構 ...

是我比較保守,確保讀取DS18B20時不受其他事件干擾,其實用TIMER計時+軟體Polling是可行的,較長時間的延遲(如幾十uS以上)用中斷也是可以的,但如此下來會增加複雜度,某些狀況下也可能造成不穩定,所以對這類介面程式我都用比較保守的獨占性寫法。
發表於 2013-11-14 13:53:46 | 顯示全部樓層
ysc 發表於 2013-11-14 11:44 AM static/image/common/back.gif
是我比較保守,確保讀取DS18B20時不受其他事件干擾,其實用TIMER計時+軟體Polling是可行的,較長時間的延 ...

因為18B20只是一個獨立的SENSOR,
TIMER計時+軟體Polling都是可行的
只要個人能順手穩定,方法就是人人可行的
大部份都是每個人的習性不同寫法也都不同的
 樓主| 發表於 2013-11-15 01:18:46 | 顯示全部樓層
感謝各位大大指導 小弟吸收一下  謝謝大大
發表於 2013-11-15 12:03:34 | 顯示全部樓層
我也只會用 c 來寫!! 案例上有可以參考!! 我的經驗是 硬體的電阻不要接錯,程式上面偶發會讀不到,應該是中斷沒有喬好!!  最近使用 A/D晶片 就沒有使用 1820了 因為 1820價錢跟一個 STC15C204EA 差不了多少,使用一個 通道就可以讀取到 熱敏電阻的變數也還算是方便,況且熱敏電阻好"安裝"在待測物上面...
 樓主| 發表於 2013-11-16 14:26:21 | 顯示全部樓層
哀~ 看沒
有沒有大大可以提供範例一下  謝謝 感恩
發表於 2013-11-16 14:30:49 | 顯示全部樓層
zuoso2006 發表於 2013-11-16 02:26 PM static/image/common/back.gif
哀~ 看沒
有沒有大大可以提供範例一下  謝謝 感恩

我在#5貼的不就是範例嗎?若還是沒看懂,那可能DS18B20規格書還沒看熟。

 樓主| 發表於 2013-11-17 22:59:16 | 顯示全部樓層
本帖最後由 zuoso2006 於 2013-11-17 11:06 PM 編輯

版大
       現在是 小弟用4EH 去寫暫存器 寫完後去將暫存緝讀出用BEH  顯示在P0的位元腳位
                                                 結果 一直讀不出來


                                         但是 小弟要是改為33H讀 ROM 就可顯示數值
                                       所以也不知道是哪裡有問題啊

讀取 輸出測試2.rar (1.15 KB, 下載次數: 11)
               
發表於 2013-11-18 01:03:23 | 顯示全部樓層
zuoso2006 發表於 2013-11-17 10:59 PM static/image/common/back.gif
版大
       現在是 小弟用4EH 去寫暫存器 寫完後去將暫存緝讀出用BEH  顯示在P0的位元腳位
              ...


大約看了一下有以下問題:

1. 喚醒DS18B20之後沒有下SKIP ROM指令(0CCH)。
2. 下4EH指令之後最好連續寫入2 Byte。
3. 沒有下達開始溫度轉換指令與等待溫度轉換完成。
4. 讀入1 bit時序有點問題,在DQ為1之後延遲時間太短就讀入。
5. DELAY1:副程式先不要用TIMER延時,先全部用指令碼延時以簡化問題。
6. 指令碼執行時間請按XTAL頻率再做確認。
7. 建議DS18B20資料在熟讀幾遍,以上這些問題在文件中都能找到答案。

 樓主| 發表於 2013-11-19 01:43:09 | 顯示全部樓層
本帖最後由 zuoso2006 於 2013-11-19 01:45 AM 編輯

版大
      小弟 有將程序改為單純讀溫度,將16位元顯示在P0  P2上怎麼也是失敗阿><

有將相關資料上傳   小弟英文不好 所以學習上有點吃力請大大包含


讀溫度程序.rar (869 Bytes, 下載次數: 9) DS18B20 應用.pdf (147.46 KB, 下載次數: 18) DS18B20介紹.pdf (176.32 KB, 下載次數: 14)
發表於 2013-11-19 10:38:38 | 顯示全部樓層
zuoso2006 發表於 2013-11-19 01:43 AM static/image/common/back.gif
版大
      小弟 有將程序改為單純讀溫度,將16位元顯示在P0  P2上怎麼也是失敗阿><

1. 程式順序還是有問題,下達溫轉換指令(44h)之後必須等待轉換完成直接讀取,中間不要再插入喚醒程序。
2. 讀取副程式還是有問題,DQ升為1之後延遲時間太短就讀入。
3. 用哪種51晶片?XTAL頻率多少?

 樓主| 發表於 2013-11-19 11:04:42 | 顯示全部樓層
版大 是STC 89C52RC    XTAL頻率 12MHZ
發表於 2013-11-19 12:29:01 | 顯示全部樓層
zuoso2006 發表於 2013-11-19 11:04 AM static/image/common/back.gif
版大 是STC 89C52RC    XTAL頻率 12MHZ

STC的晶片內部可以控制時鐘除頻數,要先知道每個機械週期用了幾個CLOCK才能確認指令延時是否正確。

向網友回文時建議在網友回文下方按回覆,這樣網友才知道您回文了,若是用下方快速回文,不是一直回來看文章的人根本不知道您已回覆。
 樓主| 發表於 2013-11-19 13:10:37 | 顯示全部樓層
ysc 發表於 2013-11-19 12:29 PM static/image/common/back.gif
STC的晶片內部可以控制時鐘除頻數,要先知道每個機械週期用了幾個CLOCK才能確認指令延時是否正確。

向網 ...

版大  謝謝提醒 小弟有用市波器用過 要是nop 是2us 時間

如要控制 除頻數 小弟功力不夠
發表於 2013-11-19 13:39:39 | 顯示全部樓層
zuoso2006 發表於 2013-11-19 01:10 PM static/image/common/back.gif
版大  謝謝提醒 小弟有用市波器用過 要是nop 是2us 時間

如要控制 除頻數 小弟功力不夠  ...

如果nop一個指令延遲2uS,那您的延遲時間不正確,會比預期時間長。

NOP指令用掉1個機械週期,DJNZ指令2個機械週期,所以依您的情況一個DJNZ指令會佔用掉4uS,那全部延遲時間都不正確,要重新計算檢討過。

 樓主| 發表於 2013-11-19 13:48:26 | 顯示全部樓層
本帖最後由 ysc 於 2013-11-19 02:21 PM 編輯
ysc 發表於 2013-11-19 01:39 PM static/image/common/back.gif
如果nop一個指令延遲2uS,那您的延遲時間不正確,會比預期時間長。

NOP指令用掉1個機械週期,DJNZ指令2 ...


小弟用示波器 測試的狀態 計時6us.rar (392 Bytes, 下載次數: 7)
發表於 2013-11-19 14:21:47 | 顯示全部樓層
zuoso2006 發表於 2013-11-19 01:48 PM static/image/common/back.gif
小弟用示波器 測試的狀態

那您前面說錯了,nop應該是1uS,51系列標準1機械週期就是12 clock,可變更除頻數的51只會縮短機械週期不會變長,所以12M頻率下NOP不可能耗時2uS。

       SETB         P2.0 <----1uS
       MOV          R2,#2 <----1uS
DEL1:
       DJNZ         R2,DEL1 <----2 *2=4uS
       CLR           P2.0 <----跟SETB  P2.0對應,這個可以不必算

所以P2.0 為1的時間是6uS。
 樓主| 發表於 2013-11-19 22:12:11 | 顯示全部樓層
本帖最後由 zuoso2006 於 2013-11-19 10:13 PM 編輯
ysc 發表於 2013-11-19 02:21 PM static/image/common/back.gif
那您前面說錯了,nop應該是1uS,51系列標準1機械週期就是12 clock,可變更除頻數的51只會縮短機械週期不 ...


大大
      小弟有測試出來了  你看一下

程序 跳過 ROM(cch), 下溫度轉換(44h),
讀出 跳過 ROM(cch), 讀站存器(beh),讀 2byte 顯示在P0  P2 上


但是不明白的要修改 ROM 怎麼都寫不上去



讀溫度3.rar (833 Bytes, 下載次數: 12)
發表於 2013-11-19 23:35:40 | 顯示全部樓層
zuoso2006 發表於 2013-11-19 10:12 PM static/image/common/back.gif
大大
      小弟有測試出來了  你看一下

那現在顯示出來的溫度正常嗎?
將手握在18B20溫度是否會往上跳?

 樓主| 發表於 2013-11-19 23:51:46 | 顯示全部樓層
正常
是用 P0 P2判斷
發表於 2013-11-20 00:05:32 | 顯示全部樓層
zuoso2006 發表於 2013-11-19 11:51 PM static/image/common/back.gif
正常
是用 P0 P2判斷

那就OK啦,恭喜解決。

規格書最好看原廠的,所有想知道的細節裡面都有交代,您在17#貼的那兩篇我看起來反而有點亂。

原廠規格書:
http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf
 樓主| 發表於 2013-11-27 14:28:01 | 顯示全部樓層
本帖最後由 zuoso2006 於 2013-11-27 02:42 PM 編輯
ysc 發表於 2013-11-20 12:05 AM static/image/common/back.gif
那就OK啦,恭喜解決。

規格書最好看原廠的,所有想知道的細節裡面都有交代,您在17#貼的那兩篇我看起來 ...


8051組合語言乘法問題
因DS1820值需要將讀出的值去乘 0.0625
但小弟用組合語言去寫 乘的數值操過255就....


也就是當 255 乘上0.0625 數值該如何計算

所以有沒有範例支援指點一下小弟  謝謝
發表於 2013-11-27 16:23:08 | 顯示全部樓層
zuoso2006 發表於 2013-11-27 02:28 PM static/image/common/back.gif
8051組合語言乘法問題
因DS1820值需要將讀出的值去乘 0.0625
但小弟用組合語言去寫 乘的數值操過255就.. ...

寫乘法副程式啊,要不然 4 bit 計算機要如何算出10幾位數的加減乘除?

其實不必那麼麻煩,將小數點以下去掉只取整數比較簡單,而且18B20讀出來的溫度整數部分單位是度,只有小數點部分才是0.0625單位,真的要計較小數點以下數字,乾脆用查表還比較快,4 BIT也只有16種狀態而已。

我比較懶,讀出來的兩個Byte串在一起往右移4 Bit,這樣就得到整數溫度了。

單晶片不要寄望一個指令可以做好全部的算術運算,很多單晶片都沒有乘除指令,甚至還有沒減法指令的,都要靠指令技巧來克服。



您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

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

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

GMT+8, 2024-11-22 10:43 PM , Processed in 0.389963 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.