Re: I2C SCL 訊號一問
|
||||
---|---|---|---|---|
中級會員
|
很抱歉~ 我列的程式碼在其上, 下方均有 "...."
意思是有程式碼 忽略沒寫出來 上方的程式碼有 open I2C 的 function, 因為使用前一定要 open, 不然無法用, 在open 後面 即有 idle wait了 SCL 及 SDA 的動作的確怪怪的. 我還在檢查中... 註: 另外, 目前因為在 debug 中, 即使沒有 idle wait, mcu 每一次執行都是一個新的開始, 不會有 i2c task running
發表於: 2009/1/16 15:17
|
|||
|
Re: I2C SCL 訊號一問
|
||||
---|---|---|---|---|
中級會員
|
首先非常謝謝 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
|
|||
|
Re: I2C SCL 訊號一問
|
||||
---|---|---|---|---|
中級會員
|
以前我用 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
|
|||
|
Re: I2C SCL 訊號一問
|
||||
---|---|---|---|---|
中級會員
|
有 pull-up , 2.2 K ohm
發表於: 2009/1/14 10:12
|
|||
|
I2C SCL 訊號一問
|
||||
---|---|---|---|---|
中級會員
|
大家好,
我現在用 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
|
|||
|
Re: I2C baudrate 一問
|
||||
---|---|---|---|---|
中級會員
|
沒有人知道?
發表於: 2009/1/12 11:20
|
|||
|
I2C baudrate 一問
|
||||
---|---|---|---|---|
中級會員
|
我現在用 pic24fj256GB106 晶片
我想設定 I2C 但我看不懂 datasheet OSC 的那個圖 所以我想請教 I2C 的 baudrate 公式是 I2CxBRG = ( Fcy/Fscl - Fcy/10,000,000 ) - 1 所以, 當我用 main osc (12MB), 並想設定 I2C 跑在 400KHz時, 我底下這個算法是不是對的 (疑問在 K 是 1024 還是 1000) #define FOSC 12000000 // <-- 還是 12 * 1024 *1024 ? #define FCY (FOSC/2) #define FSCL (400*1000) // <-- 400 KHz 是 400 *1024? #define I2CXBRG ((FCY/FSCL - FCY/10000000 ) - 1) I2C1BRG = ((FCY/FSCL - FCY/10000000 ) - 1) ---------------- 第二個問題如附圖所示, 我看它的 Peripheral 應該是 32MB/1=32MB, 所以 I2C 所指的 Fosc 是不是該用 32MB , 而非 12MB? Attach file: (0.00 KB)
發表於: 2009/1/9 17:09
|
|||
|
Re: 如何才可以實現自動加入 build number?
|
||||
---|---|---|---|---|
中級會員
|
根據 Jason680 的建議, 我昨天不到5分鐘就弄好了, 跑得很好啊
#define VERSION 1.0 //--------------------------------------------------------------------------- void getVersionString(char *buf) { sprintf(buf, "%04.2f (%s %s)", VERSION, __DATE__, __TIME__); } //--------------------------------------------------------------------------- main() { char version[36]; ... getVersionString(version); ... }
發表於: 2009/1/9 13:02
|
|||
|
請問 MCHPUSB 和 WinUSB 有何不同?
|
||||
---|---|---|---|---|
中級會員
|
大家好
我在 PIC24F Starter Kit 1 裡面發現有二個 USB 的 example 一個是 MCHPUSB (MicroChip USB) 另一個是 WinUSB 請問這兩個 USB 有什麼不同嗎? MicroChip USB能相容於現行廣大USB 用戶規格嗎?
發表於: 2009/1/9 11:04
|
|||
|