線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3539
推到 Plurk!
推到 Facebook!

請問TCL549這顆A/D Converter的問題??

答題得分者是:阿信
cls9215
一般會員


發表:18
回覆:28
積分:9
註冊:2004-12-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-14 20:42:25 IP:61.70.xxx.xxx 未訂閱
各位先進大家好: 最近小弟想利用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-14 22:41:55 IP:203.67.xxx.xxx 未訂閱
連到這有簡體中文資料可下載http://www.icbase.com/HotIC/html/PP-2407-29cn.htm 你可參考at24c02 93c46等串列 讀取data的方法

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-15 00:53:51 IP:59.113.xxx.xxx 未訂閱
您好,請參考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資料        
==================================== 生命的目的,在幻化出多采多姿的組合。 生活的意義,在捕捉住稍縱即逝的感動。 ====================================
發表人 - ㊣ 於 2005/04/15 00:55:24
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
cls9215
一般會員


發表:18
回覆:28
積分:9
註冊:2004-12-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-15 22:06:32 IP:61.70.xxx.xxx 未訂閱
謝謝前輩的指導....其實前輩所提供的觀念與網站資料(包括data sheet)我都已經看過了,今天我用示波器check我的電路,發現訊號的輸出(clock與cs)都對,唯獨dataout接腳訊號準位太低(100mv),後來我將dataout連接至8051的線拉掉,只看TLC549的輸出......發現居然是對的(TTL準位)(證實TLC549正常工作)......查了好久總算查到是PULL HIGH的問題(內部程式)....將這個問題解決後....電路就可以正常工作了!!! 不過還是感謝前輩的指導!!! 另外請教一下A/D CONVERTER可不可以顯示小數點....如果可以的話,架構大概 是怎樣的??

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-15 22:30:38 IP:59.113.xxx.xxx 未訂閱
          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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-15 22:53:23 IP:59.113.xxx.xxx 未訂閱
引言: 另外請教一下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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-16 11:57:17 IP:211.21.xxx.xxx 未訂閱
假設滿刻度5V 每一階為5/255=0.0196V 將取得的A/D 乘上196(0C4H) 再除100(16位元除8位元) 16進制對10進制轉換 顯示
cls9215
一般會員


發表:18
回覆:28
積分:9
註冊:2004-12-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-16 23:25:39 IP:61.70.xxx.xxx 未訂閱
謝謝各位前輩先進的指導....我已經做出來了....不過我還有一個問題就是我如何將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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-04-17 00:18:31 IP:59.113.xxx.xxx 未訂閱
引言: 謝謝各位前輩先進的指導....我已經做出來了....不過我還有一個問題就是我如何將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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-04-17 14:57:43 IP:220.228.xxx.xxx 未訂閱
你要顯示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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-04-18 08:50:48 IP:61.66.xxx.xxx 未訂閱
顯示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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-04-18 20:19:13 IP:61.70.xxx.xxx 未訂閱
請問一下前輩....如何將1byte的資料(00000000~11111111)轉成十進制的0~255數值呢?? 另外阿信說的0~5v的表示.....關於乘上0.96的部分...在51裡的數值為何要使用#246的值呢??

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-04-18 22:10:24 IP:59.113.xxx.xxx 未訂閱
引言: 請問一下前輩....如何將1byte的資料(00000000~11111111)轉成十進制的0~255數值呢??
阿信已經告訴你了.除一除要分開存百位.十位.個位.
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-04-19 09:25:20 IP:211.21.xxx.xxx 未訂閱
程式您試過了嗎 十進制的0~255是給人看的 對電腦而言#ffh 與 #255是一樣的 電腦是2進制 所以用2進制的方法 A*0.96=A*96/100=A*246/256 除100是十進制的方法 電腦要除100很麻煩(16位元/8位元) 除256是二進制的方法 要除256就簡單了 取高位元組就是了
cls9215
一般會員


發表:18
回覆:28
積分:9
註冊:2004-12-21

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-04-19 20:20:32 IP:61.70.xxx.xxx 未訂閱
謝謝前輩指導,我已經試出來了!!!
z
一般會員


發表:8
回覆:7
積分:3
註冊:2006-12-03

發送簡訊給我
#16 引用回覆 回覆 發表時間:2009-02-13 06:26:35 IP:59.113.xxx.xxx 訂閱

===================引 用 cls9215 文 章===================
TCL549這顆8BIT串列傳輸的A/D CONVERTER

請問前輩,這顆ic到那裏買?
感謝嘍。
系統時間:2024-05-03 0:38:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!