2013-07-28 84 views
0

我正在完成一項任務,以讀取焊接到cc2530電池板上GPIO引腳的傳感器產生的值。三種不同類型的傳感器焊接在它上面;溫度(模擬,輸出電壓),光(模擬,輸出頻率)和氣壓計(模擬)。CC2530上的GPIO引腳讀取

我已經能夠成功讀取溫度並正確顯示數字(該示例在contiki git repo中提供),但我無法手動配置GPIO引腳以從光電二極管讀取數據。

任何幫助,請

P0SEL &= ~0x04; /* Set as GPIO */ 
P0DIR &= ~0x04; /* Set as Input */ 
P0INP |= 0x04; /* Set as tri-state */ 
+0

OK,爲什麼不通過讀取芯片數據表和OS文檔創建自己的例子嗎? –

回答

0

發現了它。

這裏的樣本代碼從引腳CC2530閱讀:

static void ReadLightSensor(void) 
{ 
        //select pin in hex form 
     P0SEL &= ~0x10; /* Set pin (sample) as GPIO */ 
     P0DIR &= ~0x10; /* Set pin as input*/ 
     P0INP |= 0x10; /* Set as tri-state*/ 
     APCFG |= 0x10; /* configure ADC on pin*/ 

     ADCCON3 = 0x34; /*This represents the paramters passed into ADCCON3*/ 

     while (!ADCIF); 
     ADCIF = 0; 

     tv = ADCL; 
     tv |= (((unsigned short) ADCH) << 8); 
     tv >>= 4 ; 
     lv = tv; 
        PRINTF("Pin reading = 0x%04x\n\r", lv); 
+0

我在打印傳感器的值時也注意到了一個問題。 – json

+0

我在打印傳感器的值時也注意到了一個問題。變量ADCL和ADCH包含8位,表示結果的不同部分。此外,從代碼中最後4位被丟棄並被視爲噪聲(來自數據表),因此'tv >> = 4'操作。當打印出這些值時,我將它們打印成16位的完整十六進制格式(0xABCD)。我得到的最高強度等級的結果是0x07FF,而最低強度是0x0FFE。這些數字並不完全正確。有沒有人有任何建議嗎? – json