interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
++mcyc;
if((ms )==0) //20msec마다 adc값 check
{
adc_curr=read_adc(3); //ADC3 사용, adc 최소값: 15, 최대값: 1020,,, duty비로 변경된 최소값:117, 최대값: 7996
sum[index_adc++]=adc_curr; //출력값 10개 확보
if(index_adc>9)index_adc=0; //index 초기화, 0번부터 데이터 스택
}
for(index_sum=0; index_sum>9; index_sum++) //쌓인 데이터의 총 합
{adc_sum=adc_sum+sum[index_sum];}
pwm_avg_c=adc_sum/10; //쌓인 데이터의 평균
pwm_avg_c=pwm_avg_c*7.83; //ADC값을 PWM값으로 환산
if(pwm_avg_c>7999) //최대값 필터링
{pwm_avg_c=7999;}
if(pwm_avg_c != pwm_avg_p) //ADC값이 증가하면 LED ON
{compare=1; PORTC.0 = 1;}
else{compare=0; PORTC.0 = 0;} //ADC값이 정지하면 LED OFF
if(compare!=0) //ADC값이 증가하거나 감소할때만 PWM에 값 LOAD
{
OCR3AH = pwm_avg_c>>8;
OCR3AL = pwm_avg_c;
}
else //ADC값이 변하지 않으면 이전값 LOAD
{
OCR3AH = pwm_avg_p>>8;
OCR3AL = pwm_avg_p;
}
pwm_avg_p = pwm_avg_c; //현재값을 이전값으로 전달
}
인데 저기 쌓인 데이터의 총 합이라고 써 놓은부분이 있는데 왜 다 더하는게 안되는지 모르겠음 으아 도와주세요ㅠㅠ
댓글 0