microsystems on silicon

DOCI 介面

DOCI™ 介面是一個在MOS零組件與任何微控制器之間的單線介面。DOCI™ 是Data Out Clock In (數據輸出時鐘輸入)的英文縮寫。.

此零組件和微控制器之間的串型數據傳輸是專門由DOCI 接腳執行。DOCI 接腳結合了時鐘輸入端以及限流輸出驅動器的功能。MOS零組件下拉DOCI接腳至VDD來表示成功的採樣。 當要讀取一個數據位元時,微控制器產成一個零到壹的轉換以及釋放DOCI線。依照數據位元值,MOS零組件會將DOCI接腳保持高的狀態或是由它的輸出驅動器將接腳拉低。 穩定時間是根據DOCI接腳的總容性負載, 通常是1µs。 微控制器會將數值進行採樣以及產成(驅動)一個新的零到壹的轉換。這個過程會一直重複直到所有的數據位元都已經時鐘輸出。第一個位元的讀取是最有意義的位元。在最後的位元被讀取後, 微控制器就會將DOCI設定成零以及釋放它,讓MOS零組件標記準備時鐘輸出下一個採樣。

當MOS零組件指示一個新的採樣就緒時,微控制器必須在讀取步驟開始前等待至少一個內部時鐘周期,此時鐘周期是由零組件的振盪器(1/FCLK)所產生

如果讀取過程被干擾超過tREP的時間並且DOCI是零的狀態,這個串型數據暫存器將會更新一個新的採樣。

這個DOCI接腳可以在微控制器上被用為干擾的功能,這樣表示數據已經就緒並可由零組件進行時鐘輸出。

doci schematic image

採樣源代碼

以下的C函式是從M2012A以及一個PIC微控制器來讀取暫存數值(15位元) 。

//========================================================== // 從M2012A的過濾器讀取 // DOCI是一個輸出入(IO)接腳 // DOCI_BID 是一個位元式樣,其功能是可以設定或清除處理器的輸出入墊的方向。 //========================================================== unsigned int dpir_filt_rd(void) { unsigned char n; // 在裝載前必須等待至少一個在感應器上的器件周期 NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); NOP(); pir_data=0; for(n=0;n<15;n++) // 感應器擁有15位元的數據 { DOCI=0; // 清除DOCI接腳 TRISB&=~DOCI_BID; // DOCI接腳輸出 NOP(); // 等待一個位元 DOCI=1 ; // 設定DOCI接腳 TRISB|=DOCI_BID; // DOCI接腳輸入 pir_data<<=1; // 製造空間給第一個位元 NOP(); NOP(); // 在採樣DOCI接腳之前必須等待 if(DOCI) // 測試DOCI接腳 pir_data++; // 設定 LSB } return pir_data; // pir_data 持有感應器的資料 }

這個暫存數值必須通過一個高通濾波器進行過濾,這樣才能從暫存數值來提取正確的數 據移動。 以下是一階高通濾波器的一個採樣。這個因子(k)需要被調整成正確的時間常 數。

unsigned int hp(unsigned int val) { static unsigned int sum; // 總數停留在函式裡面 unsigned int hp; // 結果 int k =512; // 阻尼系數 hp := val - sum/k; sum+= hp; return hp; }