請問TCL549這顆A/D Converter的問題?? |
答題得分者是:阿信
|
cls9215
一般會員 發表:18 回覆:28 積分:9 註冊:2004-12-21 發送簡訊給我 |
各位先進大家好:
最近小弟想利用TCL549這顆8BIT串列傳輸的A/D CONVERTER作一 些小專題,但是目前卡在這顆A/D CONVERTER IC與8051之間溝通的問題.....我依據網路上找到的範例(是利用MSP晶片寫的)改成8051的程式....但是都沒有動作....CHECK了好久....包括IC是否故障?? 接腳接錯等問題,但是還是找不出問題點.... 我的51程式如下...希望有使用過這顆IC的前輩們,不吝賜教!!!
org 0000h dataout reg p1.0 ;TLC549資料輸出 clk reg p1.1 ;TLC549 I/0 CLOCK cs reg p1.2 ;TLC549 晶片選擇 ;========================================= org 30h initial mov p1,#01100000b ;規劃輸出入埠 clr c clr dataout ;清除TLC549 dataout資料 clr clk ;清除TLC549 I/O CLOCK資料 setb cs ;使TLC549 DISABLE main call adc_trans ajmp main ;========================================= adc_trans mov r1,#8 ;欲接收8bit的資料 clr dataout clr a clr cs ;TLC549致能 adc mov c,dataout ;把TLC549 DATAOUT資料讀入至CARRY中 call delay setb clk ;產生一次clock訊號 call delay clr clk call delay rlc a djnz r1,adc setb cs mov p2,a ;資料由port2輸出 ret delay ;延遲2ms mov r6,#5 dl1 mov r7,#200 dl2 djnz r7,dl2 djnz r6,dl1 ret end電路接法類似下圖(網路上抓到的(MSP晶片)): |
mymj
版主 發表:132 回覆:486 積分:608 註冊:2002-10-25 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
您好,請參考datasheet 給您個觀念,您再試試看
1>CS 先Low =>Enable TCL549
2>SETB clk =>設定完第一個clock後便可以去抓bit 7的資料了
3>CLR clk
4>call delay
5>SETB clk =>抓bit 6的資料 以此類推,直到抓完8 個bit資料,CS再disable
而存8bit 資料的方法
==>第7bit *128
==>第6bit *64
....
==>第1bit *2
==>第0bit *1 通通相加在一起便是一完整8bit資料
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
cls9215
一般會員 發表:18 回覆:28 積分:9 註冊:2004-12-21 發送簡訊給我 |
謝謝前輩的指導....其實前輩所提供的觀念與網站資料(包括data sheet)我都已經看過了,今天我用示波器check我的電路,發現訊號的輸出(clock與cs)都對,唯獨dataout接腳訊號準位太低(100mv),後來我將dataout連接至8051的線拉掉,只看TLC549的輸出......發現居然是對的(TTL準位)(證實TLC549正常工作)......查了好久總算查到是PULL HIGH的問題(內部程式)....將這個問題解決後....電路就可以正常工作了!!! 不過還是感謝前輩的指導!!! 另外請教一下A/D CONVERTER可不可以顯示小數點....如果可以的話,架構大概
是怎樣的??
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
org 0000h dataout reg p1.0 ;TLC549資料輸出 clk reg p1.1 ;TLC549 I/0 CLOCK cs reg p1.2 ;TLC549 晶片選擇 ;========================================= org 30h initial mov p1,#01100001b ;規劃輸出入埠 clr c clr dataout ;清除TLC549 dataout資料 clr clk ;清除TLC549 I/O CLOCK資料 setb cs ;使TLC549 DISABLE main call adc_trans ajmp main ;========================================= adc_trans mov r1,#8 ;欲接收8bit的資料 clr a clr cs ;TLC549致能 adc mov c,dataout ;把TLC549 DATAOUT資料讀入至CARRY中 call delay setb clk ;產生一次clock訊號 call delay clr clk call delay rlc a djnz r1,adc setb cs mov p2,a ;資料由port2輸出 ret delay ;延遲2ms mov r6,#5 dl1 mov r7,#200 dl2 djnz r7,dl2 djnz r6,dl1 ret end您的程式改為這樣應該問題就解決了!
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言: 另外請教一下A/D CONVERTER可不可以顯示小數點....如果可以的話,架構大概 是怎樣的??不懂你的意思ㄟ...A/D CONVERTER顯示小數點???他是數位的ㄟ... 小數要你自己去規劃,再由程式轉換 Ex. A/D轉換5V, full range 255,則 1階代表0.0196V 假設你得到的轉換值為100,則代表類比端實際值為1.96V
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
|
cls9215
一般會員 發表:18 回覆:28 積分:9 註冊:2004-12-21 發送簡訊給我 |
謝謝各位前輩先進的指導....我已經做出來了....不過我還有一個問題就是我如何將A/D CONVERTER轉換後的結果00000000~11111111(0~255)用七段顯示器使用掃描的方式顯示出來....我有試了一些方式,但是結果都不對....請問各位前輩是否可以指點小弟一些關鍵的技巧?? 我的轉換方式部分程式如下....請問各位這樣的寫法為何顯示的結果不正確??
註: a存的是00000000~11111111的資料.
;=====================================資料處理與顯示 da a ;資料轉成十進制 mov b,#10 ;除十 div ab mov r2,a ;十位與百位值 mov r3,b ;個位數值 mov a,r2 mov b,#10 div ab mov r4,a ;百位數 mov r5,b ;十位數 clr p2.0 ;個位數掃描線 mov p3,r4 ;顯示個位數值 call delay setb p2.0 clr p2.1 ;十位數掃描線 mov p3,r5 ;顯示十位數值 call delay setb p2.1 clr p2.2 ;百位數掃描線 mov p3,r4 ;顯示個位數值 call delay setb p2.2再次感謝前輩的指點...... ps:請問阿信前輩您說的小數點表示方式....小弟實在看不懂....是否可以再說明一下??!! |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言: 謝謝各位前輩先進的指導....我已經做出來了....不過我還有一個問題就是我如何將A/D CONVERTER轉換後的結果00000000~11111111(0~255)用七段顯示器使用掃描的方式顯示出來....我有試了一些方式,但是結果都不對....請問各位前輩是否可以指點小弟一些關鍵的技巧?? 我的轉換方式部分程式如下....請問各位這樣的寫法為何顯示的結果不正確?? 註: a存的是00000000~11111111的資料.請參考51書籍 DA指令無法直接將Acc的16進制值轉換成BCD碼,必須配合ADD使用 阿信所說的應該是: 假設你A/D的值為100,先將其乘196再除100==>196 利用除法,可得到百.十.個位數,再送去LED顯示 顯示1.96(只須將第一位數LED小數點永遠顯示即可)
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
你要顯示0~255 還是0~5V?
如果只要0~255就簡單了
;-- a=0~255 ;R5:放百位數 R4:十位數 R3:個位數 ;--- 轉換 --- mov b,#10 div ab mov R3,b ;R3:個位數 mov b,#10 div ab mov R4,b ;R4:十位數 mov R5,a ;R5:百位數 ;--- 顯示 --- clr P2.0 ;個位數 mov P3,R3 call Delay set P2.0 clr P2.1 ;十位數 mov P3,R4 call Delay set P2.1 clr P2.2 ;百位數 mov P3,R5 call Delay set P2.2 |
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
顯示0~5V A*1.96
=A+A*0.96
=A+(A*246)>>8
◎加號無法顯示
;-- a=0~255 ;R5:放百位數 R4:十位數 R3:個位數 ;--- 轉換 --- mov R3,a ;備份 mov R4,#0 mov R5,#0 mov b,#246 ;乘0.96 mul ab mov a,b add a,R3 mov R3,a jnc $ 2 inc R4 ;(R4,R3)=a*1.96 Div100: ;取百位數給R5 clr C mov a,R3 subb a,#100 mov a,R4 subb a,#0 jc Div100_Exit inc R5 clr C mov a,R3 subb a,#100 mov R3,a mov a,R4 subb a,#0 mov R4,a jmp Div100 Div100_Exit: mov a,R3 ;取十位數給R4,個位數給R3 mov b,#10 div ab mov R4,a mov R3,b ;--- 顯示 --- clr P2.0 ;個位數 mov P3,R3 call Delay set P2.0 clr P2.1 ;十位數 mov P3,R4 call Delay set P2.1 clr P2.2 ;百位數 mov P3,R5 call Delay set P2.2發表人 - 阿信 於 2005/04/18 08:58:49 |
cls9215
一般會員 發表:18 回覆:28 積分:9 註冊:2004-12-21 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
|
cls9215
一般會員 發表:18 回覆:28 積分:9 註冊:2004-12-21 發送簡訊給我 |
|
z
一般會員 發表:8 回覆:7 積分:3 註冊:2006-12-03 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |