//ana1 &2로부터 전송된 아날로그 신호를 디지털 신호로 변환하여 시리얼통신으로 pc로 전송한 후 시리얼 플로터를 통해
//그림으로 확인한다.
char str[64];//message를 담기 위한 배열
unsigned int data[2];//ade변환data 저장을 위한 배열
void configure_adc();//함수 프로토타입
void setup()
{
Serial.begin(115200);
configure_adc();
}
void configure_adc()
{
pmc_enable_periph_clk(ID_ADC);//ADC에 클럭 공급
adc_disable_all_channel(ADC);//모든 ADC채널을 DISABLE함
/*
* ade.h에 다음과 같이 정의되어 있음
* the max ade sample freq definition=20000000
* the min ade .. .. .. : =1000000
* the normal ade startup time=40
* the fast ade startup time 12
*/
adc_init(ADC, SystemCoreClock, ADC_FREQ_MAX, ADC_STARTUP_FAST); //Systemcoreclock : 84MHz 인자순서: MCK(SystemCoreClock), ACD클럭(ADC_FREQ_MAX), START UP TIME(ADC_STARTUP_FAST)
adc_configure_timing(ADC, 1, ADC_SETTLING_TIME_3, 1);//track, settling, transfer에 관련한 time설정
adc_configure_timing(ADC,0,ADC_SETTLING_TIME_3,1);
adc_set_resolution(ADC, ADC_12_BITS); //분해능 : 12bit으로 설정
adc_enable_channel(ADC,ADC_CHANNEL_0);//channel 0 activate
adc_enable_channel(ADC,ADC_CHANNEL_1);//channel 1 activate
}
void loop()
{
adc_start(ADC);//soft ware 로 SOC를 줄 경우 매번 이 함수를 호줄해 주어야 함.
//변환이 끝났는지 알아보는 방법
while((ADC->ADC_ISR & ADC_ISR_EOC0) != ADC_ISR_EOC0); // ADC_ISR_EOCn = 0x1u << n. 0번 채널의 변환이 끝날때까지 기다린다.
data[0]= adc_get_channel_value(ADC,ADC_CHANNEL_0);//채널0의 변환된 결과를 배열0번에 담음
while((ADC->ADC_ISR & ADC_ISR_EOC1) != ADC_ISR_EOC1);//1번 채널의 변환이 끝날때까지 기다린다.
data[1]= adc_get_channel_value(ADC,ADC_CHANNEL_1);//채널1의 변환된 결과를 배열1번에 담음
//ADC변환결과를 시리얼 플로터로 확인하자
Serial.print(data[0]);
Serial.print(" ");
Serial.println(data[1]);
delay(20);
}
'Programming > Embedded' 카테고리의 다른 글
[아두이노] 아두이노 기반의, 레이더형 전면부 감지장치 (0) | 2022.02.19 |
---|---|
[Arduino Due]-micro periodic library test code (0) | 2022.02.19 |
[Arduino Due]-basic PWM control code (0) | 2022.02.18 |
[Arduino Due]-basic timer interrupt code (0) | 2022.02.18 |
[Arduino Due]-basic pin change interrupt code (0) | 2022.02.18 |