CAFE

한국직업능력교육원

[ARM 실습 85] ADC1 멀티채널 싱글(비연속) 컨버전(폴링방식)-방법1

작성자송명규|작성시간26.01.29|조회수36 목록 댓글 0

멀티채널 싱글(비연속) 커버전입니다.

멀티채널에서는 싱글컨버전는 비연속 모드로 Discontinuous 컨버전 모드를 의미합니다.

연속모드하고 비연속모드는 둘중에 하나만 사용할 수 있습니다.

둘 다 사용은 못 합니다.

그리고 멀티채널은 Scan  컨버터 모드로 기본 scan 컨버터 모드응 활성화 해야합니다.

ADC는 8채널 해 보도록 하겠습니다.

특히 DAC 2채널 출력을 ADC 입력으로 받아서 처리해보도록 하겠습니다.

멀티펑션보드 FND에도 표시해 보고요

 

int main()

{

 while(1)

{

// 실습 1 = 멀티채널 싱글 컨버전 = 방법 1 함수 사용

// 직접 출력방식 = test 용도로만 사용하세요.

Mult_ch_single_con(&hadc1);

HAL_Delay(500);

 

}

}

//--------------------------------------------------------------------------------

// 방법 1 = 멀티채널 싱글(비연속/디스커티뉴), 컨티뉴 컨버전 = 초창기 버전

//  디스풀레이 출력을 직접 한거 = 직접 출력방식 = test 용도로만 사용하세요.

// scan Channel - Single Conversion Mode == Polling

void Mult_ch_single_con(ADC_HandleTypeDef* adcHandle)

{

uint8_t *ch_msg;

 

//scan Channel - Single Single Conversion == Polling

for(int loop = 0; loop <= adc -> ad_ch_nb-1; loop++)

{

if(loop == 0) ch_msg = "Mcu Temp Sensor";

else if(loop == 1) ch_msg = "DAC 2 Data";

else if(loop == 2) ch_msg = "Joy Y Data";

else if(loop == 3) ch_msg = "CDS Data";

else if(loop == 4) ch_msg = "DAC 1 Data";

else if(loop == 5) ch_msg = "Joy X Data";

else if(loop == 6) ch_msg = "Thr Temp Data";

else if(loop == 7) ch_msg = "VR Data";

 

#if mult_single_con

HAL_ADC_Start(adcHandle);

#endif

HAL_ADC_PollForConversion(adcHandle, 100); //busy

adc -> ad_buf[loop] = HAL_ADC_GetValue(adcHandle);

 

// 직접 display 출력한거

// adc 버퍼값도 직접 출력

printf("Test_Loop = %d, %s = %d, Volt = %f\r\n", adc -> test_loop, ch_msg, adc -> ad_buf[loop], adc -> ad_buf[loop] * (3.3/4095));

HAL_Delay(500);

}

printf("\r\n");

 

adc -> test_loop++;

 

#if mult_single_con

HAL_ADC_Stop(adcHandle);

#endif

memset(adc -> ad_buf, 0, 20 *sizeof(uint16_t));

}

// Timer 6 DAC2 트리거 사용시는 tim6 UP data 이벤트를 해줘야 합니다.

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼