멀티채널 싱글(비연속) 커버전입니다.
멀티채널에서는 싱글컨버전는 비연속 모드로 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 이벤트를 해줘야 합니다.