b. 임베디드/AVR

[ATtiny1616] ADC 함수 만들기

로봇쟁이 2022. 5. 2. 09:45

 

ADC 기능과 특징입니다.

기존에 사용하는 ADC들과 큰 차이는 없을 것 같습니다.

 

 

블럭 다이어그램입니다.

 

 

 

초기화 방법과 동작 방법이 친절하게 나열되어 있습니다.

이것을 그대로 따라 진행해보면 다음과 같습니다.

 

void adcInit(void)
{
	ADC0.CTRLA = ADC_RESSEL_10BIT_gc | ADC_ENABLE_bm;         // 10bit 동작
	ADC0.CTRLC = ADC_PRESC_DIV256_gc | ADC_REFSEL_VDDREF_gc;  // ADC_PRESC_DIV256_gc
}


uint16_t adcRead(uint8_t ch)
{
	uint16_t ret;
	
	switch(ch)
	{
		case  1:		ADC0.MUXPOS	= ADC_MUXPOS_AIN1_gc;		break;
		case  2:		ADC0.MUXPOS	= ADC_MUXPOS_AIN2_gc;		break;
		case  3:		ADC0.MUXPOS	= ADC_MUXPOS_AIN3_gc;		break;
		case  4:		ADC0.MUXPOS	= ADC_MUXPOS_AIN4_gc;		break;
		case  5:		ADC0.MUXPOS	= ADC_MUXPOS_AIN5_gc;		break;
		case  6:		ADC0.MUXPOS	= ADC_MUXPOS_AIN6_gc;		break;
		case  7:		ADC0.MUXPOS	= ADC_MUXPOS_AIN7_gc;		break;
		case  8:		ADC0.MUXPOS	= ADC_MUXPOS_AIN8_gc;		break;
		case  9:		ADC0.MUXPOS	= ADC_MUXPOS_AIN9_gc;		break;
		case 10:		ADC0.MUXPOS	= ADC_MUXPOS_AIN10_gc;		break;
		case 11:		ADC0.MUXPOS	= ADC_MUXPOS_AIN11_gc;		break;
	}
	ADC0.COMMAND = ADC_STCONV_bm;
	while(!(ADC0.INTFLAGS & ADC_RESRDY_bm));
	ret = ADC0.RES;
	
	ADC0.INTFLAGS = ADC_RESRDY_bm;
	
	return ret;
}

 

 

반응형