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;
}
반응형