Re: I2C問題 想請Richard Yang大大回答
|
||||
---|---|---|---|---|
版主
|
參照:
沒檢查 ACK,這樣不太好吧! 萬一換了別顆的 Slave 那就很危險了,只能說 PSIR 運氣不錯,去簽個樂透吧!
發表於: 2009/3/30 15:14
|
|||
|
Re: I2C問題 想請Richard Yang大大回答
|
||||
---|---|---|---|---|
資深會員
|
我都是一直調整程式到可以從示波器上看到那一根奇形怪狀的 ACK 回應信號後就可以了正常存取了,所以我都沒有在檢查 ACK 信號。
發表於: 2009/3/27 13:23
|
|||
|
Re: I2C問題 想請Richard Yang大大回答
|
||||
---|---|---|---|---|
版主
|
抱歉這兩天一直在忙新竹辦公是搬家事宜,所以無法回答。
好奇的是 : 為什麼要組合語言寫呢? 可以用 C18 嗎? I2C 在 debug 時,友時動作未確實作完就中斷跳出會讓 I2C Module 的 Step Machine 錯亂而導致無法按程式來執行。這時就需要將 PIC18F452 重新 Reset 後再試。
發表於: 2009/3/25 14:35
|
|||
|
Re: I2C問題 想請Richard Yang大大回答
|
||||
---|---|---|---|---|
中級會員
|
參照:
恩恩 我找到問題點了 感謝Eigen大分享經驗也感謝Richard Yang大分享的範例
發表於: 2009/3/24 15:20
|
|||
|
Re: I2C問題 想請Richard Yang大大回答
|
||||
---|---|---|---|---|
資深會員
|
初學者在開發初期,一定會有寫錯,用 icd2 之類的工具debug 時,一定不會將 demoboard 斷電、復電,導致 i2c slave ic (ex 24lc08) 一直在錯誤的模式或錯誤的指令。
正常的操作。對 i2c 下指令,之後,會收到 ack ,沒收到 ack 表示 ic 的狀態不對,必需對 ic 下 stop command ,這個command 會讓 ic reset 回到初始的狀態。之後下下去的 command 才會被正常接收處理。 當你不明就理一直改,指令一直下,slave 端卻不會理會。 對初學者最簡單就是整個斷電,但是這樣會很難開發,所以這種問題在初學者身上就層出不窮
發表於: 2009/3/24 13:24
|
|||
|
Re: I2C問題 想請Richard Yang大大回答
|
||||
---|---|---|---|---|
中級會員
|
參照:
請問什麼是斷電reset 是要從程式改還是哪裡設定 stop 的操作是指產生stop條件嗎 謝謝
發表於: 2009/3/24 9:29
|
|||
|
Re: I2C問題 想請Richard Yang大大回答
|
||||
---|---|---|---|---|
資深會員
|
又來了
沒有 斷電reset ,一直在 i2c 當掉的情況下 操作。 怎麼做都是不會好的。 stop 的操作是很重要的(初學要先會stop ,i2c 才有機會正常)
發表於: 2009/3/24 2:24
|
|||
|
I2C問題 想請Richard Yang大大回答
|
||||
---|---|---|---|---|
中級會員
|
I2C 問題 從Richard Yang對EEPROM的範例修改
用APP001 VER 3測試 一值卡在EE_Ack_ChecK沒有ACK回應 jumper也有改過 有提升電阻 不知為何不能寫入 I2C好難寫阿 是我太弱嗎... 想請問一下 如果沒ACK大概要從哪改起 ======================== #include <p18f452.inc> CONFIG OSC=HS,BOR=OFF,BORV=42,WDT=OFF,STVR=OFF,LVP=OFF CBLOCK 0x40 CLKOE ; TABLE 1 address DIV1SRCN OSCDRIVE LOADCAP POQ CSMC1 CSMC2 CSMC3 DIV2SRCN ADDR ;---------------------------- CLKOEX ; TABLE 1 data DIV1SRCNX OSCDRIVEX LOADCAPX POQX CSMC1X CSMC2X CSMC3X DIV2SRCNX ENDC org 0x00 goto main org 0x08 retfie org 0x18 retfie org 0x030 main call i2cinitial call numinit call i2cout forever goto forever i2cinitial bcf TRISC,3 bcf TRISC,4 movlw b'00101000' ; I2C Master Mode, Clock Rate: FOSC/(4*SSPADD+1) movwf SSPCON1 ; ; movlw .38 ; This gives 100KHz I2C clock @ 4MHz movwf SSPADD ; (16MHz/4) / (38+1)= 100KHz bsf SSPSTAT,SMP,0 bcf SSPSTAT,CKE,0 return numinit movlw 0xA0 movwf ADDR movlw 0x0C movwf CLKOE movlw 0x00 movwf CLKOEX return i2cout call numinit call StartI2C bcf ADDR,0 movff ADDR,W ; Send Slave Address to I2C Bus call i2cshift ; call StartI2C ; bcf ADDR,0 ; movff ADDR,WREG ; Send Slave Address to I2C Bus ; call i2cshift movff CLKOE,W call i2cshift movff CLKOEX,W call i2cshift call StopI2C return i2cshift call Send_Byte call EE_Ack_Check return ;****** Send START condition to bus ******* ; StartI2C ; Initiate the I2C START condition. bsf SSPCON2,SEN goto I2C_Done ; ;****** Send STOP condition to bus ******* ; StopI2C bsf SSPCON2,PEN goto I2C_Done ; ;****** Send data to I2C bus from Wreg. ******* ; Send_Byte movwf SSPBUF goto I2C_Done I2C_Done btfss PIR1,SSPIF ; Poll for SSPIF goto I2C_Done bcf PIR1,SSPIF return EE_Ack_Check btfsc SSPCON2,ACKSTAT goto EE_Ack_Check return end
發表於: 2009/3/23 23:17
|
|||
|