Re: I2C EEPROM的控制@18F46J50
|
||||
---|---|---|---|---|
版主
|
RB4/PMA1/KBI0/SCK1/SCL1/RP7
RB5/PMA0/KBI1/SDI1/SDA1/RP8 SCL1 & SDA1 這兩隻腳看起來與 ADC 無關,看不出來衛何 SCL2 & SDA2 可以動作而移到 IIC 1 後就不會動作? 可能要找的示波器勾一下波型了。
發表於: 2010/1/18 14:02
|
|||
|
Re: I2C EEPROM的控制@18F46J50
|
||||
---|---|---|---|---|
中級會員
|
感謝 foxjan 原來是我搞錯了 VDD不用接電阻>_<
===================================== TRISBbits.TRISB4 = 1; TRISBbits.TRISB5 = 1; OpenI2C1(MASTER,SLEW_OFF); SSP1ADD = 0x1D; //100KHz@12MHz //FOSC/(4*(SSPADD + 1)) ODCON3 = 0x01; I2C_flag = EByteWrite1(I2C_Address,EE_Address,DATABUF); I2C_flag = EEAckPolling1(0xA0); buffer = EERandomRead1(I2C_Address,EE_Address); I2C_flag = EEAckPolling1(0xA0); 使用mssp1還是失敗,a/d的功能 ADCON0 = 0x34; //除能特殊功能ANx ADCON1 = 0; ANCON0 = 0XFF; ANCON1 = 0X1F; 我全部關了,並將它用數位輸入,我找不到PBADEN,它是什麼暫存器的?
發表於: 2010/1/15 18:44
|
|||
|
Re: I2C EEPROM的控制@18F46J50
|
||||
---|---|---|---|---|
資深會員
|
這是從資料中抓出來的圖片 除了提升電阻,還有限流電阻哩
建議要洗板子的時候要預留 大不了RS預留的地方短路即可 提升電阻好像從4.7K-1K不等 速度越快 提升電組就越小 Attach file: (0.00 KB)
發表於: 2010/1/15 9:24
|
|||
My name is jan,Jan是棒的
|
||||
|
Re: I2C EEPROM的控制@18F46J50
|
||||
---|---|---|---|---|
資深會員
|
I2C 簡介網址
I2C SPEC下載網址 I2C是飛利浦弄出來的規格 當初為了寫他的驅動程式,也辛苦了好久 現在都直接硬體驅動了 丟BUFF就好,真方便 順便呼籲一下 I2C 在下STOP之後,在開下一個START之前需要一段等待時間 而且各家的時間都不一樣 這可是使用者最大的陷阱 請多多注意
發表於: 2010/1/15 9:02
|
|||
My name is jan,Jan是棒的
|
||||
|
Re: I2C EEPROM的控制@18F46J50
|
||||
---|---|---|---|---|
中級會員
|
void StartI2C1( void )
{ SSPCON2bits.SEN = 1; // initiate bus start condition } 在單步執行 StartI2C1 並不能使 SSPCON2bits.SEN 置 1 我想問一下,BRG的計算是不是正確,我看到的公式為: 100KHz@12MHz //FOSC/(4*(SSPADD + 1)) SSP1ADD = 0x1D; //29 ===================================== 再來是VCC;聽硬體的前輩說,需要串接一個4.7K, 我在一些I2C資料裡都沒看到相關的說明,在哪裡有可以參考? ===================================== ===================================== 我成功了,但是是用ssp2成功的。 結論: 我的設定都正確 EEAckPolling(0xA0);一定需要,感謝版主提醒。 我再找找看portB是哪邊沒設定好…
發表於: 2010/1/14 16:18
Edited by wdszd on 2010年01月14日 17:21:17
|
|||
|
Re: I2C EEPROM的控制@18F46J50
|
||||
---|---|---|---|---|
版主
|
"我卡在while( SSP1STATbits.BF );"
照這 BF 位元 ( Buffer Full Status Bit) 偵測不到為 1 的狀態代表皆收有問題,懷疑是做寫入後接下來的 Delay 10mS 有問題,建議改用 Polling ACK 的方式會比較好。可以在參考一下 W401 教材裡的 Ex6-1 內的範例。
f=EEByteWrite (0xA0,EE_Addr,Rec_Data); // Write Receive Data into EEPROM
發表於: 2010/1/11 11:42
|
|||
|
I2C EEPROM的控制@18F46J50
|
||||
---|---|---|---|---|
中級會員
|
請各位幫小弟看一下
============================= #define I2C_Address 0xA0 #define EE_Address 0 ============================== //I/O設定 unsigned int buffer = 0; int i=0; OpenI2C1(MASTER,SLEW_OFF); SSP1ADD = 0x1D; //100KHz@12MHz //FOSC/(4*(SSPADD + 1)) ADCON0 =0; //除能特殊功能ANx ANCON0 =0X1F; ANCON1 =0X1F; =============================== EEByteWrite1(I2C_Address , (unsigned char)EE_Address , i); delay_ms(10); buffer = EERandomRead1(I2C_Address , (unsigned char)EE_Address); A0、A1、A2、WP接地 SCL、SDA 上拉4.7K到VCC 有用過的人提供一下要注意的地方,它不會動>_< 我卡在while( SSP1STATbits.BF );
發表於: 2010/1/9 17:40
|
|||
|