| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
有哪位用過AD7799? | 
  
| 作者:lau9527 欄目:測控之家 | 
剛參加工作,第一個課題就讓我郁悶了! 拜托各位大哥大姐,救救我! 我用的是AD7799BRUZ芯片,打算應(yīng)用于靜態(tài)應(yīng)變儀。 電路連接參照數(shù)據(jù)手冊(Rev.0) 27頁的那個電路, 我只用了AIN1一個通道,其余未用。 出現(xiàn)的問題是:采不出數(shù)據(jù)。 不管AIN1兩端加不加電壓, 讀出的數(shù)據(jù)基本上都在零點附近(80xxxxxx或7fxxxxxx)。 但是,可以讀出其狀態(tài)信息,而且感覺應(yīng)該是正確的。 另附上我的程序,看看問題出在哪里 ;;;;;;;;;;;;;;;;;;;;;;;;;;; 程序從這里開始 ;;;;;;;;;;;;;;;;;;;;;;;;; CS EQU P1.7 ;AD7799使能端 SCLK EQU P3.5 ;串行時鐘信號(應(yīng)該是下降沿有效吧) DIN EQU P3.4 ;數(shù)據(jù)輸入端 DOUT EQU P3.2 ;數(shù)據(jù)輸出端 ORG 0000H AJMP START ORG 0050H START: CLR CS ;使能AD7799 MOV A, #00010000B ;0 0 010 000 : 表明下一個操作是寫 “配置寄存器” ACALL WriteAByte MOV A, #00000111B ;00 0 0 0 111 :BO=0,雙極性輸入, 增益=128 ACALL WriteAByte MOV A, #00110000B ;00 1 1 0 000 :監(jiān)測參考電壓,緩沖 方式,模擬輸入通道是 AIN(+)-AIN(-) ACALL WriteAByte MOV A, #00001000B ;0 0 001 000 :表明下一個操作是寫 “模式寄存器” ACALL WriteAByte MOV A, #00010000B ;001 1 0000 :單次轉(zhuǎn)換模式,打開 PSW開關(guān) ACALL WriteAByte MOV A, #00001001B ;0000 1001 :數(shù)據(jù)更新頻率 = 16.7Hz ACALL WriteAByte MOV A, #01000000B ;0 1 000 000 :表明下一個操作是讀 “狀態(tài)寄存器” ACALL WriteAByte ACALL ReadAByte MOV 30H, A ;將讀出的8位狀態(tài)字寫入30H MOV A, #01011000B ;0 1 011 000 :表明下一個操作是 讀“數(shù)據(jù)寄存器” ACALL WriteAByte ACALL ReadAByte MOV 31H, A ;讀出第一個8位,寫入31H處 ACALL ReadAByte MOV 32H, A ;讀出第二個8位,寫入32H處 ACALL ReadAByte MOV 33H, A ;讀出第三個8位,寫入33H處 JMP $ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;字程序:ReadAByte ;功能:從AD7799讀出8位數(shù)據(jù)(一個字節(jié)) ;輸入:無 ;輸出:寄存器A, 存放著讀出的8位數(shù)據(jù) ReadAByte: CLR A ;A清零,用來保存數(shù)據(jù) MOV R6, A ;R6清零,用來為8次循環(huán)計數(shù) C001: SETB SCLK ; CLR SCLK ;這兩條指令產(chǎn)生一個下降沿 MOV C, DOUT ;將數(shù)據(jù)位存入C中 RLC A ;再將其移入到A中 INC R6 CJNE R6, #08H, C001 ;循環(huán)8次 RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;字程序:WriteAByte ;功能:向AD7799寫入8位數(shù)據(jù)(一個字節(jié)) ;輸入:A,要寫入的8位數(shù)據(jù) ;輸出:無 WriteAByte: MOV R6, #0 ;R6清零,用來為8次循環(huán)計數(shù) C002: SETB SCLK ;SCLK置1,為產(chǎn)生下降沿做準(zhǔn)備 RLC A ;將要寫入的數(shù)據(jù)按位移出到C中 MOV DIN, C ;將C中的數(shù)據(jù)送到DIN線上 CLR SCLK ;產(chǎn)生下降沿,把數(shù)據(jù)送入AD7799 INC R6 CJNE R6, #08H, C002 ;循環(huán)8次 RET END START ;;;;;;;;;;;;;;;;;;;;;;;;;;; 程序到此結(jié)束 ;;;;;;;;;;;;;;;;;;;;;;;;; 請各位高手哥哥姐姐不吝賜教。!  | 
  
| 2樓: | >>參與討論 | 
| 作者: syz528555 于 2006/8/6 9:26:00 發(fā)布:
         有問題。 有三點: 1,寫完mode register 后,要查詢RDY Pin 變低,或讀status Register 的RDY 為高,然后才能讀到Data Register. 2,測試時,最好改為連續(xù)轉(zhuǎn)換。 3。在寫Mode register 連續(xù)轉(zhuǎn)換之前,要校一下zero_scale,F(xiàn)ull_scale 的吧。  | 
  |
| 3樓: | >>參與討論 | 
| 作者: zhu04303663 于 2009/2/6 10:37:07 發(fā)布:
         我用過AD7799,在我的網(wǎng)站里免已經(jīng)提供了C程序的源代碼,希望能與大家交流  | 
  |
  | 
    
 
  | 
  
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 | 
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號  |