串行12位ADC與PC之間的接口電路
——
一次完整的數(shù)據(jù)傳輸需要13個外部時鐘脈沖。第一個時鐘脈沖的下降沿鎖存DOUT引腳(引腳6)的第一個數(shù)據(jù)位(MSB)。輸出數(shù)據(jù)位在下一個外部時鐘脈沖的下降沿就改變,可以讀取串行數(shù)據(jù)位,直到下一個時鐘周期的下降沿出現(xiàn)為止。模/數(shù)轉換在ADC的引腳(引腳7)變成低電平時開始進行。該引腳必須保持低電平,直到模/數(shù)轉換整個周期結束為止,隨后進行串行數(shù)據(jù)傳輸。DOUT引腳從低電平至高電平的狀態(tài)變化表示EOC(轉換結束)狀態(tài)。然后,串行的12位數(shù)據(jù)就可以進行傳輸了。MAX187的工作情況由軟件控制。該軟件應能產生成功完成轉換所需的所有控制信號,而且應能檢測EOC狀態(tài)。它還應能產生13個外部時鐘脈沖,以便讀取串行12位數(shù)據(jù)并將其轉換成并行數(shù)據(jù)。
控制MAX187工作情況的軟件是Turbo C++ 3.0版本(可從http://www.edn.com/網(wǎng)站的《設計實例》的Web版本下載)。在代碼中,Port定義與MAX187接口的PC的 Centronics端口。Write Port定義用于初始化模/數(shù)轉換和產生外部時鐘脈沖的端口。Read Port定義用于從ADC讀取EOC和串行數(shù)據(jù)的端口。在將CS引腳和SCLK引腳下拉至低電平后,EOC環(huán)路檢查EOC狀態(tài)。如果未出現(xiàn)有效的EOC,則該環(huán)路將繼續(xù)工作。有效EOC出現(xiàn),13個時鐘周期中的第一個周期就出現(xiàn),并鎖存第一個數(shù)據(jù)位(MSB)。此后,例行程序調用一個子例程(get_adc())。子例程產生剩下的外部時鐘周期,以便讀取12位串行數(shù)據(jù)。子例程還將接收到的串行數(shù)據(jù)轉換成并行數(shù)據(jù)(adc_val)。這一轉換過程為:使adc_val左移一位,由此將前一個數(shù)據(jù)乘以2,如果串行數(shù)據(jù)位的值為1,則將1加到并行數(shù)據(jù)上。一旦并行數(shù)據(jù)就緒,子例程將返回這個值并將其顯示在屏幕上。
圖1 實現(xiàn)12位串行ADC與PC之間的接口是很容易的。
評論