ADC를 사용할 때 주요 인자가 2가지가 있다.
reference 전압과 resolution 이다. mica 시리즈에서 사용되는 atmega128L의 경우 보통 reference 2.56V, resolution은 10bit를 사용하는데, telos 계열에 사용되는 msp430의 경우 reference 1.5 or 2.5V, resolution은 12bit를 사용한다. 따라서 mica 계열로 했을 때와 telos 계열로 했을 때의 ADC에서 읽히는 Raw값에 대한 전압계산식은 다르다.
다음은 ADC를 매핑하는 예이다.
ADCC 컴포넌트를 사용하여 ADCControl 인터페이스와 bindPort 커맨드를 이용한다.
========================================================================
** Test.h **
#include "MSP430ADC12.h"
enum {
TOS_ADC_TEST_PORT = unique("ADCPort"),
TOSH_ACTUAL_ADC_TEST_PORT = ASSOCIATE_ADC_CHANNEL ( INPUT_CHANNEL_A0, REFERENCE_VREFplus_AVss, REFVOLT_LEVEL_2_5),};
#define MSP430ADC12_Test ADC12_SETTINGS( \ INPUT_CHANNEL_A0, REFERENCE_VREFplus_AVss, SAMPLE_HOLD_4_CYCLES, \ SHT_SOURCE_ACLK, SHT_CLOCK_DIV_1, SAMPCON_SOURCE_SMCLK, \ SAMPCON_CLOCK_DIV_1, REFVOLT_LEVEL_1_5)
** Test.nc **
configuration Test {
}
implementation {
components Main, TestM, ADCC;
Main.StdControl -> TestM;
TestM.ADC -> ADCC.ADC[TOS_ADC_TEST_PORT];
TestM.ADCControl -> ADCC;
}
** TestM.nc **
module TestM {
provides interface StdControl;
uses interface ADC;
uses interface ADCControl;
}
implementation {
command result_t StdControl.init() {
call ADCControl.init();
call ADCControl.bindPort(TOS_ADC_TEST_PORT, TOSH_ACTUAL_ADC_TEST_PORT);
return SUCCESS;
}
.....
}
댓글 없음:
댓글 쓰기