• slider image 442
  • slider image 477
  • slider image 479
  • slider image 480
  • slider image 481
  • slider image 482
:::


Browsing this Thread:   1 Anonymous Users




« 1 (2)


Re: I2C SCL 訊號一問
#8
版主
版主


查看用戶資訊
參照:


StartI2C2(); // <-- 執行過這一行後就 SCL, SDA 均變 low, 這正常嗎?

IdleI2C2(); // Wait to complete


怎會是先 Start I2C 後再檢查 Bus Idle ? 應該事先檢查 Bus Idel(SCL & SDA 均為 High) 後確定沒有人占用 Bus 後才送出Start Condiction 出去。所以你的流程上有錯誤。
Start Condiction 送出後應該只有 SDA 變 Low 而已,SCL 應會再送出 Command 後才會開始變 Low 的。

發表於: 2009/1/16 11:07
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: I2C SCL 訊號一問
#7
中級會員
中級會員


查看用戶資訊
首先非常謝謝 Ryang 的回答

可是, 那個example 似乎差距較大, 要改的東西較多
於是我就到 microchip 下載以下這個 EEPRom 的 example code 完全符合我的 mcu 及 EEPRom
http://ww1.microchip.com/downloads/en ... I2C%20Master%20EEPROM.zip

硬體軟體都接好 compile 好後測試, 依然沒反應

SCL pin 量不到方波, 於是我單步 debug 發現底下的程式碼在執行到 StartI2C2 後, SCL , SDA 同時由 High 變 Low
天啊, I2C 的 start bit 不是 SCL high , SDA low 嗎? 怎麼不符合規定?

MicroChip 的 bug? (心想一定不可能)
應該是我硬體接線哪裡有要注意結果搞錯??
我的母板是用 PIC24F Starter Kit 1, MCU 是 pic24fj256gb106, 拉 PortF 的 Bit4 (SDA, pin 31), Bit5 (SCL,pin 32)到 測試板連接 EEPRom, 二個 PIN 都有 Pull-Ups

實在不知道哪裡有問題, 還請各位多多幫忙

----------------
....
i2cData[0] = (SlaveAddress << 1) | 0; //Device Address & WR111
i2cData[1] = 0x05; //eeprom high address byte
i2cData[2] = 0x40; //eeprom low address byte
i2cData[3] = 0xAC; //data to write
DataSz = 4;

StartI2C2(); // <-- 執行過這一行後就 SCL, SDA 均變 low, 這正常嗎?

IdleI2C2(); // Wait to complete
while( DataSz ) // 寫 0xAC 到 EE
{
MasterWriteI2C2( i2cData[Index++] );
IdleI2C2(); //雖然都 low, 但這裡的 MaserWrite , Idle 均可以過, 完全成功執行完, 沒被 block 住

DataSz--;

// ACKSTAT is 0 when slave acknowledge,
// if 1 then slave has not acknowledge the data.
if( I2C2STATbits.ACKSTAT )
break;
}
....

發表於: 2009/1/15 13:44
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: I2C SCL 訊號一問
#6
版主
版主


查看用戶資訊
看了一下所附的 Code Example ,  如果沒有正確的接上 Slave 該程式就會卡在等待 ACK 的訊號,這程式相形之下過於簡單不適合實際的應用。你可以參考一下 dsPIC30F Peripheral 教育訓練裡有詳細的 I2C 對 EEPROM 的的應用可以測看看。

http://www.microchip.com.tw/modules/w ... glefile.php?cid=4&lid=229

發表於: 2009/1/14 10:45
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: I2C SCL 訊號一問
#5
中級會員
中級會員


查看用戶資訊
以前我用 8051 或其它 mcu 時都自己寫 I2C, 一個bit一個bit的shift進shift出
現在這顆則是只有三個 register , 非常簡單, 全自動化, 但也因此無從 debug 起, 連 CLK 都沒輸出, 波形量不到, 有沒在跑不知道

因此, 我想知道的是...
1. 有沒有什麼動作我漏掉的? 例如 pin 要設 output?

2. 我接上 sensor , 但沒 pull-ups 時 CLK 有出來, 但訊號很奇怪, 是類似三角波(奇怪, 這顆 MCU 一定要接 slave 才有波形?)

3. 我接上 sensor , 且 pull-ups 時卻遇到進 IdleI2C2 這副程式出不來的現象, 好像一直在等什麼

4. 我現在勢必要知道的是 空接(有 pull-ups, 但沒 slave) 時, Master 一直拼命 Write 是不是至少 CLK 要出來? 為什麼它都沒有

發表於: 2009/1/14 10:25
曾經 狂奔 舞蹈 貪婪的說話, 隨著冷的 濕的 心腐化

個人的休閒小站
歡迎來參觀
http://www.elevior.com
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: I2C SCL 訊號一問
#4
中級會員
中級會員


查看用戶資訊
有 pull-up , 2.2 K ohm

發表於: 2009/1/14 10:12
曾經 狂奔 舞蹈 貪婪的說話, 隨著冷的 濕的 心腐化

個人的休閒小站
歡迎來參觀
http://www.elevior.com
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: I2C SCL 訊號一問
#3
版主
版主


查看用戶資訊
量不到訊號出來,請問你有接 10K ohm 的 Pull-Up 電阻嗎?
I2C 是 Open Drain 的架構,電阻衣錠要自己加的。

發表於: 2009/1/14 9:57
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


I2C SCL 訊號一問
#2
中級會員
中級會員


查看用戶資訊
大家好,

我現在用 PIC24FJ256GB106 MCU, 我要用 I2C 去控制某 sensor, 但目前我先空接 SCL2/SDA2 (有 pull-up)
我試著用 Microchip 的 example code 去 write 訊號出來, 但是, 我在 SCL2 上量測訊號, 示波器卻量不到東西

我的問題是, I2C 在 SCL2/SDA2 未接 slave device 時, 難道 clock 不會有輸出訊號? 一定要有對接時才行? 以下是 microchip 的程式碼

void testI2C(void)
{
unsigned int config2, config1;
unsigned char *wrptr;
unsigned char tx_data[] = {'M','I','C','R','O','C','H','I','P','\0'};

wrptr = tx_data;
/* Baud rate is set for 100 Khz */
config2 = 0x11;

/* Configure I2C for 7 bit address mode */
config1 = (I2C_ON & I2C_IDLE_CON & I2C_CLK_HLD &
I2C_IPMI_DIS & I2C_7BIT_ADD &
I2C_SLW_DIS & I2C_SM_DIS &
I2C_GCALL_DIS & I2C_STR_DIS &
I2C_NACK & I2C_ACK_DIS & I2C_RCV_DIS &
I2C_STOP_DIS & I2C_RESTART_DIS &
I2C_START_DIS);

OpenI2C2(config1,config2);
IdleI2C2();
StartI2C2();

/* Wait till Start sequence is completed */
while(I2C2CONbits.SEN );

//while(1) <-- unmark 這三行作無限輸出測試
//{ <-- unmark 這三行作無限輸出測試
/* Write Slave address and set master for transmission */
MasterWriteI2C2(0xE);

/* Wait till address is transmitted */
while(I2C2STATbits.TBF);
while(I2C2STATbits.ACKSTAT);
//} <-- unmark 這三行作無限輸出測試


/* Transmit string of data */
MasterputsI2C2(wrptr);
StopI2C2();

/* Wait till stop sequence is completed */
while(I2C2CONbits.PEN);
CloseI2C2();

}

發表於: 2009/1/13 17:15
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------