• slider image 442
  • slider image 497
  • slider image 498
  • slider image 499
  • slider image 500
  • slider image 502
:::


Browsing this Thread:   1 Anonymous Users






Re: [大問題]麻煩各位幫忙指導一下我的I2C
#3
高級會員
高級會員


查看用戶資訊
bus一直為HIGH是正常的,只有訊號在I2C BUS傳送或接收時,BUS才會有拉LOW的情形。你可以用OSCILLSCOPE的PROBE利用TRIGGER LEVEL的方法去看看你的I2C(SCL、SDA)是否真的有動作,SLAVE的ack是再第九個CLOCK時會回應給MASTER。

發表於: 2007/6/15 15:01
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: [大問題]麻煩各位幫忙指導一下我的I2C
#2
初級會員
初級會員


查看用戶資訊
您好,我最近也在學I2C,您上面的範例應該是在讀寫EEPROM,
因為16F877A,所用的是MSSP架構對MASTER支援功能較完整,
如果您要了解這些暫存器的功能要仔細讀一下16F877A的datasheet,
或是全華出的(pic16f87x快速上手)很像中文翻譯的datasheet,
而我目前學的方式是直接用一般I/O做SDA和SCL,
範例是從(全華PIC16C7X入門應用範例)看到的,
這本書其實與上一本內容相似只是多了些範例,
當您了解I2C架構後再去看這些特殊功能暫存器會比較容易了解,
上面的程式建議您讀和寫分開來測試會比較單純些,
如果毫無動作應該是有暫存器沒設好,
因為我還沒用過16f877a的I2C功能所以沒法再程式上給您實際的幫助,
但可以注意的是一開始的
WRITE_ADDR EQU B'10100000'
READ_ADDR EQU B'10100001'
bit0的部分(0是寫)(1是讀)這我想您應該看的出來,
前面七個bit的device address是EEPROM的固定元件位址,
如果呼叫其他的元件就要依照那顆元件datasheet裡所設固定位址才能呼叫的到,
如果16F877A的範例程式還是無法了解,那就像我從一般I/O的程式開始學起吧,
一起努力祝您成功.



發表於: 2007/6/15 11:54
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


[大問題]麻煩各位幫忙指導一下我的I2C
#1
新會員
新會員


查看用戶資訊
最近開始學I2C,總覺得學的很奇怪,這個程式寫完後不知道要怎樣去看他的執行結果,拿示波器去勾SDA SCL也都是HIGH態,完全呈現一個搞混的狀態,ACK的訊息也不知道去哪裡看,真的要麻煩各位指導一下了,謝謝。以下是我的程式,是抓MICROCHIP 範例改的:
LIST P=16F877A
#INCLUDE <P16F877A.INC>
;************************** EQU ADDRESS ************************
BANK0 EQU 0X01
BANK1 EQU 0X81
BANK2 EQU 0X101
BANK3 EQU 0X181

DATA_INT EQU 0X20
DATA_OUT EQU 0X21
POLL_TEMP EQU 0X22
;************************** EQU 數值 ***************************
WRITE_ADDR EQU B'10100000'
READ_ADDR EQU B'10100001'
;***************** START PORTC為輸入 PORTD為輸出 ***************
ORG 0X00
NOP BANKSEL BANK1
MOVLW 0XFF
MOVWF TRISC
CLRF TRISD
BANKSEL BANK0
CLRF PORTD
;************************* MAIN ********************************
MAIN:
CALL CONFIGURE
CALL DATA_WRITE
CALL DATA_READ
GOTO $
;************************ 設定I2C起始條件 **********************
CONFIGURE:
BANKSEL BANK1
CLRF SSPSTAT
BSF SSPSTAT,SMP
MOVLW 0X0A
MOVWF SSPADD
CLRF SSPCON2
BANKSEL BANK0
MOVLW B'00101000'
MOVWF SSPCON
BCF PIR1,SSPIF
BCF PIR2,BCLIF
RETURN
;************************ 寫入ADDR AND DATA ********************
DATA_WRITE:
CALL B_START
BANKSEL BANK0
MOVLW WRITE_ADDR
MOVWF DATA_OUT
CALL SEND_DATA

BANKSEL BANK0
MOVLW 0X27
MOVWF DATA_OUT
CALL SEND_DATA

BANKSEL BANK0
MOVLW 0X12
MOVWF DATA_OUT
CALL SEND_DATA

CALL B_STOP
CALL POLL_DATA
RETURN
;******************** 讀取 ADDR AND DATA ***********************
DATA_READ:
CALL B_START
BANKSEL BANK0
MOVLW WRITE_ADDR
MOVLW DATA_OUT
CALL SEND_DATA
BANKSEL BANK0
MOVLW 0X27
MOVWF DATA_OUT
CALL SEND_DATA
CALL B_RESTART
BANKSEL BANK0
MOVLW READ_ADDR
MOVWF DATA_OUT
CALL SEND_DATA
BANKSEL BANK1
BSF SSPCON2,ACKDT
CALL READ_DATA
CALL READ_DATA
CALL B_STOP
RETURN
;************************ B_START 開始傳送 *********************
B_START:
BANKSEL BANK0
BCF PIR1,SSPIF
BANKSEL BANK1
BSF SSPCON2,SEN
MOVLW B'10001100'
MOVWF SSPSTAT
BANKSEL BANK0
B_START_WAIT:
BTFSS PIR1,SSPIF
GOTO B_START_WAIT
RETURN
;******************* B_RESTART 重新確認 START ******************
B_RESTART:
BANKSEL BANK0
BCF PIR1,SSPIF
BANKSEL BANK1
BSF SSPCON2,RSEN
BANKSEL BANK0
B_RESTART_WAIT:
BTFSS PIR1,SSPIF
GOTO B_RESTART_WAIT
RETURN
;******************* SEND_DATA 傳送資料 ************************
SEND_DATA:
BANKSEL BANK0
BCF PIR1,SSPIF
MOVFW DATA_OUT
MOVWF SSPBUF
SEND_DATA_WAIT:
BTFSS PIR1,SSPIF
GOTO SEND_DATA_WAIT
RETURN
;************************ B_STOP 停止 **************************
B_STOP:
BANKSEL BANK0
BCF PIR1,SSPIF
BANKSEL BANK1
BSF SSPCON2,PEN
BANKSEL BANK0
B_STOP_WAIT:
BTFSS PIR1,SSPIF
GOTO B_STOP_WAIT
RETURN
;********************* POLL_DATA 確認寫入 **********************
POLL_DATA:
BANKSEL BANK0
MOVLW .100
MOVWF POLL_TEMP
POLLING:
CALL B_RESTART
BANKSEL BANK0
MOVLW WRITE_ADDR
MOVWF DATA_OUT
CALL SEND_DATA
BANKSEL BANK1
BTFSS SSPCON2,ACKSTAT
GOTO EXIT_POLL
BANKSEL BANK0
DECFSZ POLL_TEMP,F
GOTO POLLING
EXIT_POLL:
CALL B_STOP
RETURN
;********************* READ_DATA 讀取資料 *********************
READ_DATA:
BANKSEL BANK0
BCF PIR1,SSPIF
BANKSEL BANK1
BSF SSPCON2,RCEN
BANKSEL BANK0
READ_DATA_WAIT:
BTFSS PIR1,SSPIF
GOTO READ_DATA_WAIT
MOVFW SSPBUF
MOVWF DATA_INT
BCF PIR1,SSPIF
BANKSEL BANK1
BSF SSPCON2,ACKEN
BANKSEL BANK0
READ_DATA_WAIT_2:
BTFSS PIR1,SSPIF
GOTO READ_DATA_WAIT_2
RETURN
END

發表於: 2007/6/14 11:23
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... ]

教育訓練中心

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