ad7746设置的问题。
程序如下,通过i2c设置ad7746。i2c程序应该没问题,因为能读出7746默认值。如果先调用下面程序后延时再读时就“noack”了,一个也读不出,如果调用下面程序后去轮询7746的rdy脚,此脚无论时间等多久都不会有下降沿出现。如果把下面程序的最后那个子程序(启动转换)屏蔽就能再次读出所改写的内容。搞了好多天,卡在这了。用过ad7746的大侠帮忙指点一下下,谢谢!
ad7746_write: ;给ad7746设定,
acall smbus_rest;ad7746复位 ,给7746写0xbf进去
acall delay ;延时5us
mov r2,#0ah
mov r3,#32h;0x0a内写入031h,capf=110更新频率,md=010单次
acall smbus_write;写# 到7746地址去
acall delay
mov r2,#0bh
mov r3,#0b7h;0x0b内写入0b7h,dac_a设置
acall smbus_write;写# 到ad7746地址去
acall delay
mov r2,#9h
mov r3,#0bh;0x09内写入0bh,第一个路电容打开
acall smbus_write;写#80h到ad7746的0x07地址去
acall delay
mov r2,#7h
mov r3,#80h;0x07内写入80h,启动转换
acall smbus_write;写#80h到ad7746的0x07地址去
ret 期待回复喽:( 晕哦,就没有一位大侠伸出援助之手吗 根据你提供的信息,也很难就知道问题的所在。
确定I2C的读写操作OK,
仔细阅读技术手册,核对参数的配置是否正确,
与厂家联系提供DEMO程序 谢谢4楼朋友回复。
小弟以为能读出默认值i2c读程序就ok了。
写0x07寄存器之外的寄存器后也都能读所写内容,是不是写法也就没问题了嘛,唯独写0x07寄存器后好象7746就死机一样!会不会7746坏了?按理来讲坏了应该读不出默认值及改写后的值嘛,难道就0x07这个寄存器坏了?看来要再买几片回来试试。 现付上全部程序(汇编的哦)。里面有io口模拟的i2c,f340的uart0。i2c程序应该没问题,也许有错,但查不出。项目搁浅了。问厂家也没下文。哎
单片机和AD都没用过,看了下I2C通信的程序
SCL和SDA的输入输出状态可能有问题 嗯,谢谢wangyy608。搞了快一个月了,晕不。最失败的一次。对那芯片还不熟悉,交叉开关应该是很好的东东,就是输入输出有些晕,不过i2c外接都有上拉电阻。明天休息一天,周一继续,一定搞出来哦。呵呵。 其实I2C很烦人的,不像SPI那么直观,软件容易出错。我的原则是,如果新上手一款单片机,没有成熟的代码,项目工期很急的话,尽可能不用I2C。
我建议去厂家找些成熟的I2C软件模块,参照着改一下,不要闭门造车,没意义。 我也遇到了同样的问题,不知道楼主现在解决了没有? 我也遇到了这样的问题,寄存器都配置对了,但是读不出数据,想问一下楼主有没有解决 注意应答与非应答的区别 我也在用AD7745,寄存器可写可读,包括0x07.程序如下,请参考:
;
;
LIST P=16F1823
INCLUDE "P16F1823.INC"
XORX EQU 74H ;异或校验码
;-----------------------------------主程序
ORG 0X00 ;
NOP ;
GOTO MAIN
;--------------------------------------
READ6
CALL JCKX ;检测空闲
BANKSEL PIR1 ;
BCF PIR1,SSP1IF ;
BANKSEL SSP1CON2 ;
BSF SSP1CON2,SEN ;启动信号
BANKSEL PIR1 ;
BTFSS PIR1,SSP1IF ;
GOTO $-1 ;启动信号结束
;FSQJ ;发送器件+写
MOVLW 90H ;
BANKSEL SSP1BUF ;
MOVWF SSP1BUF ;
CALL JCYD ;发送器件+写,结束
;FSDZ ;发送地址
MOVLW 07H ;
BANKSEL SSP1BUF ;
MOVWF SSP1BUF ;
CALL JCYD ;发送地址结束
CALL DELAY ;延时
;RESTART
CALL JCKX ;
BANKSEL PIR1 ;
BCF PIR1,SSP1IF ;
BANKSEL SSP1CON2 ;
BSF SSP1CON2,RSEN ;重启动信号
BANKSEL PIR1 ;
BTFSS PIR1,SSP1IF ;
GOTO $-1 ;重启动信号结束
;READ1
MOVLW 91H ;发送器件+读
BANKSEL SSP1BUF ;
MOVWF SSP1BUF ;
CALL JCYD ;发送器件+读,结束
CALL JSXH ;接收数据
BANKSEL SSP1BUF ;
MOVF SSP1BUF,W ;
MOVWF 75H ;接收寄存器1
CALL FSYD ;发送应答
CALL JSXH ;
BANKSEL SSP1BUF ;
MOVF SSP1BUF,W ;
MOVWF 76H ;接收寄存器2
CALL FSYD ;
CALL JSXH ;
BANKSEL SSP1BUF ;
MOVF SSP1BUF,W ;
MOVWF 77H ;接收寄存器3
CALL FSYD ;
CALL JSXH ;
BANKSEL SSP1BUF ;
MOVF SSP1BUF,W ;
MOVWF 78H ;接收寄存器4
CALL FSYD ;
CALL JSXH ;
BANKSEL SSP1BUF ;
MOVF SSP1BUF,W ;
MOVWF 79H ;接收寄存器5
CALL FSYD ;
CALL JSXH ;
BANKSEL SSP1BUF ;
MOVF SSP1BUF,W ;
MOVWF 7AH ;接收寄存器6
BANKSEL PIR1 ;
BCF PIR1,SSP1IF ;
BANKSEL SSP1CON2 ;
BSF SSP1CON2,PEN ;停止信号
BANKSEL PIR1 ;
BTFSS PIR1,SSP1IF ;
GOTO $-1 ;停止信号完成
BCF PIR1,SSP1IF ;
RETURN
;---------------------------------------
CHSHH ;初始化
BANKSEL ANSELA ;
CLRF ANSELA ;
CLRF ANSELC ;
BANKSEL TRISC ;
BSF TRISC,0 ;SLC
BSF TRISC,1 ;SDA
BSF TRISC,5 ;RX
BCF TRISC,4 ;TX
BANKSEL APFCON ;
BCF APFCON,7 ;RC5=RX
BCF APFCON,2 ;RC4=TX
BANKSEL TRISA ;
BCF TRISA,5 ;485发送
BCF TRISA,0 ;-识别器件工作
BCF TRISA,2 ;
BANKSEL PORTA ;
BSF PORTA,0 ;
BSF PORTA,2 ;-识别器件工作
BANKSEL SSP1ADD ;
MOVLW D'9' ;
MOVWF SSP1ADD ;100K波特率
BANKSEL SSP1STAT ;
BSF SSP1STAT,7 ;100KHZ
BCF SSP1STAT,6 ;IIC
BANKSEL SSP1CON1 ;
MOVLW B'00101000' ;使能IIC通讯主模式
MOVWF SSP1CON1 ;
BANKSEL OSCCON ;
MOVLW B'1101010' ;
MOVWF OSCCON ;内部晶振4MHZ
;T3
MOVLW 03H ;BANK3
MOVWF BSR ;
MOVLW D'12' ;19.2K(4M)
MOVWF SPBRGL ;低字节
MOVLW B'10010000' ;使能串口
MOVWF RCSTA ;使能接收,
MOVLW B'00100110' ;异步,高波特率
MOVWF TXSTA ;使能发送,
RETURN
;---------------------------------
JCYD ;检测应答
BANKSEL PIR1 ;
BCF PIR1,SSP1IF ;
BTFSS PIR1,SSP1IF ;
GOTO $-1 ;
RETURN
;----------------------------------
JCKX ;检测空闲
BANKSEL SSP1STAT ;
BTFSC SSP1STAT,2 ;正在发送?
GOTO $-1 ;
BANKSEL SSP1CON2 ;
MOVF SSP1CON2,W ;
ANDLW 1FH ;
BTFSS STATUS,Z ;空闲?
GOTO $-3 ;
RETURN
;----------------------------------------
FSYD
BANKSEL PIR1 ;
BCF PIR1,SSP1IF ;
BANKSEL SSP1CON2 ;
BCF SSP1CON2,ACKDT ;
BSF SSP1CON2,ACKEN ;发送应答信号
BANKSEL PIR1 ;
BTFSS PIR1,SSP1IF ;
GOTO $-1 ;发送应答信号完成
RETURN
;---------------------------------------------
JSXH
BANKSEL PIR1 ;
BCF PIR1,SSP1IF ;
BANKSEL SSP1CON2 ;
BSF SSP1CON2,RCEN ;接收信号
BANKSEL PIR1 ;
BCF PIR1,SSP1IF ;
BTFSS PIR1,SSP1IF ;
GOTO $-1 ;接收信号完成
RETURN
;---------------------------------------------
DELAY MOVLW D'4' ;延时3.5MS
MOVWF 70H ;
DELAY2 MOVLW 0FFH ;
MOVWF 71H ;
DELAY1 DECFSZ 71H,F ;
GOTO DELAY1 ;
DECFSZ 70H,F ;
GOTO DELAY2 ;
RETURN
;--------------发送------------------
FSPLC
BANKSEL PORTA ;
BSF PORTA,5 ;置位发送
BANKSEL TXREG ;
MOVLW B'11111100' ;起始字符
MOVWF TXREG ;发送起始字符
CLRF XORX ;异或校验码清零
CALL DELAY ;为通信延时
MOVF 75H,W ;高字节1
XORWF XORX,1 ;异或
MOVWF TXREG ;发送高字节
MOVF 76H,W ;低字节1
XORWF XORX,1 ;异或
MOVWF TXREG ;发送低字节
CALL DELAY ;为通信延时
MOVF 77H,W ;高字节2
XORWF XORX,1 ;异或
MOVWF TXREG ;发送高字节
MOVF 78H,W ;低字节2
XORWF XORX,1 ;异或
MOVWF TXREG ;发送低字节
CALL DELAY ;为通信延时
MOVF 79H,W ;高字节3
XORWF XORX,1 ;异或
MOVWF TXREG ;发送高字节
MOVF 7AH,W ;低字节3
XORWF XORX,1 ;异或
MOVWF TXREG ;发送低字节
CALL DELAY ;为通信延时
MOVLW B'1111' ;高字节4
XORWF XORX,1 ;异或
MOVWF TXREG ;发送高字节
MOVLW B'1101' ;低字节4
XORWF XORX,1 ;异或
MOVWF TXREG ;发送低字节
CALL DELAY ;延时,为发送留出时间
MOVLW B'1110' ;高字节5
XORWF XORX,1 ;异或
MOVWF TXREG ;发送高字节
MOVLW B'1111' ;低字节5
XORWF XORX,1 ;异或
MOVWF TXREG ;发送低字节
CALL DELAY ;延时,为发送留出时间
MOVF XORX,W ;异或校验码
MOVWF TXREG ;
CALL DELAY ;
MOVLW B'11111011' ;终止字符
MOVWF TXREG ;发送终止字符
CALL DELAY ;为通信延时
RETURN
;-------------------------------------
WRITE6
CALL JCKX ;检测空闲
BANKSEL PIR1 ;
BCF PIR1,SSP1IF ;
BANKSEL SSP1CON2 ;
BSF SSP1CON2,SEN ;启动信号
BANKSEL PIR1 ;
BTFSS PIR1,SSP1IF ;
GOTO $-1 ;启动信号结束
;FSQJ ;发送器件+写
MOVLW 90H ;
BANKSEL SSP1BUF ;
MOVWF SSP1BUF ;
CALL JCYD ;发送器件+写,结束
BANKSEL SSP1STAT ;
BTFSC SSP1STAT,BF ;寄存器满?
GOTO $-1 ;
;FSDZ ;发送地址
MOVLW 07H ;应为7
BANKSEL SSP1BUF ;
MOVWF SSP1BUF ;
CALL JCYD ;发送地址结束
;FSSJ ;发送数据1
MOVLW B'10000000' ;
BANKSEL SSP1BUF ;
MOVWF SSP1BUF ;
CALL JCYD ;发送数据1结束
MOVLW B'0' ;
BANKSEL SSP1BUF ;
MOVWF SSP1BUF ;
CALL JCYD ;发送数据2结束
MOVLW B'1011' ;
BANKSEL SSP1BUF ;
MOVWF SSP1BUF ;
CALL JCYD ;发送数据3结束
MOVLW B'100001' ;
BANKSEL SSP1BUF ;
MOVWF SSP1BUF ;
CALL JCYD ;发送数据4结束
MOVLW B'11111111' ;
BANKSEL SSP1BUF ;
MOVWF SSP1BUF ;
CALL JCYD ;发送数据5结束
MOVLW B'0' ;
BANKSEL SSP1BUF ;
MOVWF SSP1BUF ;
CALL JCYD ;发送数据6结束
BANKSEL PIR1 ;
BCF PIR1,SSP1IF ;
BANKSEL SSP1CON2 ;
BSF SSP1CON2,PEN ;停止信号
BANKSEL PIR1 ;
BTFSS PIR1,SSP1IF ;
GOTO $-1 ;停止信号完成
BCF PIR1,SSP1IF ;
RETURN
MAIN
CALL CHSHH
LOOP
CALL WRITE6 ;写
CALL READ6 ;读
CALL FSPLC ;
GOTO LOOP
END
页:
[1]