2013年9月3日 星期二

為您的DAC加裝一片七段顯示器 1

2007/10/18 14:31

引言

這只是一個耍噱頭的小製作,加了此顯示器並不會改善DAC聲音,但是卻為您的DAC增加不少可看性,而且還可讓各位跨足數位電路。以下,本文將以此顯示器之製作一步一步帶您進入邏輯電路設計的領域。

這片顯示器是由兩位數的七段LED所組成,主要功能是顯示DAC的取樣頻率,凡是採用Crystal CS8412 / CS8414接收晶片的DAC,只要加上6.144MHz的振盪線路及本顯示器即可顯示32KHz, 44.1KHz, 48KHz之取樣頻率,如果是使用CS8414還可以顯示88.2KHz, 96KHz的取樣頻率。當然CS8412和CS8414的頻率編碼方式並不相同,因此在顯示器上設有一個Jumper供使用者選擇DAC的接收晶片是CS8412或CS8414。
系統架構

本電路系統方塊圖如《圖一》,主角是一顆叫做16V8的PAL (可程式陣列邏輯閘 Programmable Array Logic) ,這是一顆20支腳的小IC,可別小看它,若規劃的好可以取代數十個TTL IC喔!因為它具有8個可程式輸出入腳, 及10個輸入腳,而每一支可程式輸出入腳可以設定為組合邏輯輸出或序向邏輯輸出,並可對任何輸入腳之信號做無限制AND term運算及七組OR term運算﹝組合邏輯時﹞或八組OR term運算﹝序向邏輯時﹞。而且每一個輸出入腳可直接內部回授以做為其它輸出函數的term;它還可以多次燒錄,萬一設計錯誤不會因此報銷。我們就是利用PAL這種強大的功能來做為DAC頻率解碼器用。

 


如上圖,由CS8412 / CS8414送出來的F0~F2這三個頻率編碼信號接到16V8,經16V8解碼後取得驅動七段LED顯示器之信號。但是七段LED顯示器有兩位數共須14個驅動信號,而16V8最多只有8組輸出,因此在此用了一點小技巧讓16V8只要用7組輸出即可。在16V8之後接了兩個TTL 74LS273,這是個8位元的D型正反器﹝D-type Flip-Flop﹞,當74LS273的Clock由Low至High時,由16V8送出來的data將被鎖住在74LS273的輸出端。利用74LS273此特點可以使我們讓16V8原本需要14個輸出縮減到7個輸出。

在此16V8設計成:當CLK為High時,16V8會送出第二位數﹝十位數﹞的七段顯示器資料,當CLK為Low時,16V8則送出第一位數﹝個位數﹞的七段顯示器資料;而兩個74LS273的Clock互為反相,在CLK由High至Low的同時,驅動十位數的74LS273因為Clock經過Inverter故其Clock為由Low至High,而16V8送出的十位數的資料再此時將結束但一定會有延遲,故74LS273利用此『殘留』的十位數的資料將之鎖住並送到七段顯示器使之顯示十位數的數值,而驅動個位數的74LS273則仍然保存先前16V8送出的個位數資料讓個位數的顯示器持續顯示原先的數值。反之CLK為Low至High時,驅動十位數的74LS273則持續顯示先前16V8送出的十位數資料,而驅動個位數的74LS273則鎖住16V8送出來新的個位數的資料並送到七段顯示器。因此16V8的七個輸出被兩個74LS273一分為二,變成了14個輸出。



到此整個系統方塊圖的動作原理簡單介紹到此,接下來將介紹16V8內部邏輯的設計。

建立真值表

16V8內部邏輯該如何設計呢?首先將8412 / 8414的F0~F2這三個頻率編碼信號列出來,並決定每一個碼所代表的意義要如何顯示而做成表一:

F2
F1
F0
8412 Function
8412 display
8414 function
8414 display
0
0
0
Out of range
EE
Out of range
EE
0
0
1
48k, 4%
48.
X
X
0
1
0
44.1K, 4%
44.
X
X
0
1
1
32k, 4%
32.
96k
96.
1
0
0
48k, 400ppm
48
88.2k
88.
1
0
1
44.1k, 400ppm
44
48k
48.
1
1
0
44.506k, 400ppm
44
44.1k
44.
1
1
1
32k, 400ppm
32
32K
32.

表一



當DAC剛開機尚未收到CD轉盤信號時,8412 / 8414送出’000’的信號,表示目前Sample rate不明,此時我們設定顯示為’EE’. 當DAC收到CD轉盤為Audio CD時,8412送出’101’的信號,而8414送出’110’的信號,表示目前Sample rate為44.1KHz, 因此我們設定顯示為’44’. 餘此類推,如表一。

接下來我們思考16V8的輸出入腳共有那些:1. F0 ~ F2一定要有, 2. 8412 / 8414的選擇Jumper pin一個, 3. 十位 / 個位數的切換Clock一個, 4.送到74LS273的七段LED顯示器輸出信號A~G;有了這些資訊就可以正式建立真值表了。因為我們的LED顯示器是使用共陽極型式,如圖三,故驅動信號為”0”時才會使LED發光,而LED的排列次序如圖四,假設當8412 / 8414送出’000’的信號時,我們希望顯示為’EE’, 因此分別為A, B, C, F, G 的LED發光,所以在表二第一列A, B, C, F, G欄位為’0’,而D, E為”1”,依照表一的定義餘此類推,就可製成表二的Truth table了。其中表二還有SEL及CLK兩項,SEL = 0 代表8412,SEL = 1代表8414;CLK=1為十位數而CLK=0代表個位數的切換Clock。


真值表 Truth table:

表二

各位可能已經發現表二的Truth table還有”H”這一項,這是因為16V8尚有一隻輸出腳,因此後來臨時決定多加一個LED用以指示8412 取樣到4% 而不是400ppm時的高誤差警示用。

再舉個例子,見表二,當SEL=0, CLK=0, F2 ~ F0為”011”時,代表接收晶片為8412且為個位數顯示,其取樣率為32KHz 4%,因此應該解出個位數字 ”2” 的數字,所以A, C, D, F, G之LED要發光,另外因誤差為4%,因此”H”這一個LED亦要發光,以警示高誤差。同理SEL=0, CLK=1, F2 ~ F0為”011”時,代表8412十位數顯示,其取樣率仍為32KHz 4%,因此應該解出十位數字 ” 3 ” 的數字,所以A, C, D, E, F之LED要發光,另外因”H”這一個LED屬於個位數顯示﹝見線路圖﹞,因此不管它 (don’t care),以 ”X” 表示,其值可為”1” 可為”0”,視化簡需要而定。就這樣我們以橫向一列一列的將表二真值表建立起來。

注意LED H只有在8412時才有意義,在8414時其真值表全為Don’t Care,故視其化簡須要而當成0或1,所以此時LED之亮熄並無意義。

好了,真值表終於完成,下一步就要依此真值表寫出布林代數式並加以化簡。
[下一頁]

沒有留言:

張貼留言