본문 바로가기
  • SpokeHouse
Microchip

Attiny202 - 저전력 동작을 위한 ADC 코드

by SpokeHouse 2024. 12. 11.
728x90
728x90

안녕하세요 스포크하우스입니다.

1. ADC init

2.ADC read

3.disableADC 

이렇게 구현되어있습니다.

1. ADC init

void ADC0_init(void)
{
    ADC0.CTRLC = ADC_PRESC_DIV4_gc      /* CLK_PER divided by 4 */
               | ADC_REFSEL_INTREF_gc;  /* Internal reference */
    
    ADC0.CTRLA = ADC_ENABLE_bm          /* ADC Enable: enabled */
               | ADC_RESSEL_10BIT_gc;   /* 10-bit mode */
    
    /* Select ADC channel */
    ADC0.MUXPOS  = ADC_MUXPOS_AIN2_gc;
}

설정 코드입니다. 10비트로 측정하는 방식입니다. 

2.ADC read

uint16_t ADC0_read(void)
{
    ADC0.COMMAND = ADC_STCONV_bm;
    
    /* Wait until ADC conversion done */
    while ( !(ADC0.INTFLAGS & ADC_RESRDY_bm) )
    {
        ;
    }
    
    /* Clear the interrupt flag by writing 1: */
    ADC0.INTFLAGS = ADC_RESRDY_bm;
    
    return ADC0.RES;
}

ADC conversion 이 완료될때가지 대기합니다.

여러가지 기능이 빠르게 동작해야하는 제품에서는 다른 방식을 채택해야합니다.

3.disableADC 

void disableADC(void) 
{
    ADC0.CTRLA &= ~ADC_ENABLE_bm;
}

저는 이렇게 사용하고 disableADC 은 사용하지 않고 슬립모드로 들어가게 했는데 저전력 동작은 정상적으로 확인됩니다.

슬립모드를 Power down이 아닌 standby 까지만 구현되는 제품은 disableADC 해주시면 될듯합니다.

void enableADC(void)
{
	ADC0.CTRLA = ADC_ENABLE_bm;
}

그런다음에 사용하기 전에 enable해주면 되겠지요...

그럼 오늘도 대단히 수고하세요

감사합니다.

 

728x90
728x90

댓글