Re: I2C讀取溫度感測器的問題
|
||||
---|---|---|---|---|
版主
|
看你的程式,我想你還是沒有了解到 dsPIC I2C Module 的動作需求,I2C 的軟體動作沒有你所寫的那麼簡單。建議你還是先看一下 dsPIC30F Peripheral Training 裡的 I2C 教育訓練,並參考裡面的 I2C Master 的範例程式。
發表於: 2008/10/20 11:34
|
|||
|
Re: I2C讀取溫度感測器的問題
|
||||
---|---|---|---|---|
版主
|
不行的,I2C 沒有這麼簡單。你可以先參考一下 W401 C18 得教材第六章的說明。或參考dsPIC30F Peripheral Training 教育訓練裡的 I2C 章節。右上角可以搜尋到。
發表於: 2008/10/13 9:37
|
|||
|
Re: I2C讀取溫度感測器的問題
|
||||
---|---|---|---|---|
新會員
|
看了datasheet。
SDA,和SCL這兩隻腳應該是要先高電位送出 所以下面這兩隻腳設唯1應該沒錯吧~~ PORTGbits.RG3=1; PORTGbits.RG2=1; while (1) { tmp的datasheet說如果要偵測內部溫度,就只讓送出0X08就可以開啟偵測內部溫度的功能了,所以把值放在這邊應該沒錯吧? I2C1MSK=0x08; PORTGbits.RG3=0; ^^^^^讓SDA變成低電位啟動I2C if(I2C1STATbits.RBF=1) { PORTA=I2C1RCV; PORTGbits.RG3=1; ^^^^資料傳送完在讓SDA變成高電位,關閉I2C } } } 想要問一下是不是這樣就能讓I2C動作了呢?
發表於: 2008/10/13 9:07
Edited by iceborns on 2008年10月13日 09:41:01
|
|||
|
Re: I2C讀取溫度感測器的問題
|
||||
---|---|---|---|---|
新會員
|
謝謝兩位大大~
我來研究一下你們給的網頁
發表於: 2008/10/8 14:29
|
|||
|
Re: I2C讀取溫度感測器的問題
|
||||
---|---|---|---|---|
新會員
|
這有兩個I2C參考資料...先看看吧
TMP423 datasheet裡面的BUS OVERVIEW的章節也先看過一次 http://zh.wikipedia.org/wiki/I2C http://designer.mech.yzu.edu.tw/article/articles/course/file/(2005-06-06)%20PIC_SERVER%E6%95%99%E6%9D%90(14)%EF%BC%8DPIC%E5%96%AE%E6%99%B6%E7%89%87I2C%E9%80%9A%E8%A8%8A%E7%B0%A1%E4%BB%8B%E8%88%87%E5%AF%A6%E4%BE%8B.pdf
發表於: 2008/10/7 22:10
|
|||
|
Re: I2C讀取溫度感測器的問題
|
||||
---|---|---|---|---|
版主
|
1. TMP423 是 TI 的 I2C 溫度感應器,所以你必須先知道 I2C 的規範。
2. 從你的程式看來,你對 I2C 的觀念不是很清楚這樣要怎樣寫程式? 所以我會建議先下載一下 I2C 的規格 (到 NXP 網站) 先了解一下 I2C 的通訊協定吧!
發表於: 2008/10/7 8:36
Edited by Ryang on 2008年10月07日 08:54:50
|
|||
|
I2C讀取溫度感測器的問題
|
||||
---|---|---|---|---|
新會員
|
我用dsPIC33FJ256GP710寫了程式要來讀取TMP423這顆溫度感測器的溫度資料~~~但是怎麼好像也都不會動
麻煩大大幫我看一下哪裡出了問題 #define _dsPIC33FJ256GP710_ #include <p33FJ256GP710.h> int i; void main() { ODCGbits.ODCG2=1; ODCGbits.ODCG3=1; I2C1CONbits.I2CEN=1; I2C1CONbits.RCEN=1; I2C1CONbits.ACKDT=1; I2C1CONbits.ACKEN=1; I2C1CONbits.A10M=0; LATGbits.LATG3=0; LATGbits.LATG2=1; IFS0bits.IC2IF = 0; while (1) { PORTGbits.RG1=0; I2C1MSK=0x01; while(I2C1STATbits.RBF=1); { PORTA=I2C1RCV; DelayX1ms(800); } } } void DelayX1ms(unsigned int count) { unsigned int i,j; for(i=0;i<count;i++) for(j=0;j<114;j++); }
發表於: 2008/10/6 20:53
|
|||
|