2013-07-28 3 views
0

저는 cc2530 배터리 보드의 GPIO 핀에 납땜 된 센서에서 생성 된 값을 읽는 작업을하고 있습니다. 세 가지 유형의 센서가 솔더링되어 있습니다. 온도 (아날로그, 아웃 전압), 라이트 (아날로그, 아웃 주파수) 및 기압계 (아날로그).CC2530의 GPIO 핀에서 읽기

성공적으로 온도를 읽고 그림을 올바르게 표시 할 수 있었지만 (이 예제는 contiki에서 제공됨) 수동으로 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 비트 형식의 전체 16 진수 형식 (0xABCD)으로 인쇄합니다. 가장 높은 강도 레벨에서 얻은 결과는 0x07FF이고 가장 낮은 강도는 0x0FFE입니다. 수치는 꽤 맞지 않습니다. 누구든지 제발 어떤 제안 있나요? – json