锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

使用单片机自带AD转换采样电位器,进行PWM调光

时间:2022-09-20 06:00:00 电位器调到零

本帖最后由 张全武5 于 2015-6-26 18:36 编辑

请问大家,AD转换结果,需要经过什么处理,,然后用if句子判断输出不同比例的空比PWM...

写这样的程序,为什么?if句子的连续判断点,,,,灯光会闪烁。。。我该怎么写?请给我一些建议。希望大家多交流。

unsigned int Average()

{

unsigned int sum=0,min,max=min=ADC_data[0];

unsigned int m;

for(m=0;m<10;m )

{

sum =ADC_data[m];

if(ADC_data[m]

if(ADC_data[m]>max) max=ADC_data[m];

}

sum=(sum-min-max)>>3;

return sum;

}

void adc_it() interrupt 5//分辨率2.44mv

{

ADC_CONTR&=~ADC_FLAG;

//if(t==0)

ADC_data=(ADC_RES*4 ADC_RESL);//adhl2=(ADC_RES*4 ADC_RESL);//读取10位通道4的AD转换结果

i ;

if(i>=10)

{ EADC=0;

i=0;

adhl2=Average();

EADC=1;

}

ADC_RES=0;ADC_RESL=0;

ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ADC_START|ch;

}

void main()

{ //P1=0x00;

//CCP0=0;

InitADC();

pwm_init();

while(1)

{

getadv=5*adhl2*12/1024;

if(getadv<=41)c=0;

if(getadv>41&&getadv<=44) c=1;

if(getadv>44&&getadv<=47) c=2;

if(getadv>47&&getadv<=50) c=3;

if(getadv>50&&getadv<=53) c=4;

if(getadv>53&&getadv<=56) c=5;

if(getadv>56) c=6;

switch(c)

{

case 0:pwm_set(PWM[0]);PCA_PWM0=0x01;break;

case 1:PCA_PWM0=0x00;pwm_set(PWM[1]);break;

case 2:PCA_PWM0=0x00;pwm_set(PWM[2]);break;

case 3:PCA_PWM0=0x00;pwm_set(PWM[3]);break;

case 4:PCA_PWM0=0x00;pwm_set(PWM[4]);break;

case 5:PCA_PWM0=0x00;pwm_set(PWM[5]);break;

case 6:PCA_PWM0=0x00;pwm_set(PWM[6]);break;

case 7:PCA_PWM0=0x00;pwm_set(PWM[7]);break;

}

}

}

本帖最后由 张全武5 于 2015-6-26 18:36 编辑

请问大家,AD转换结果需要处理什么,然后使用if句子判断输出不同比例的空比PWM...

写这样的程序,为什么?if句子的连续判断点,,,,灯光会闪烁。。。我该怎么写?请给我一些建议。希望大家多交流。

unsigned int Average()

{

unsigned int sum=0,min,max=min=ADC_data[0];

unsigned int m;

for(m=0;m<10;m )

{

sum =ADC_data[m];

if(ADC_data[m]

if(ADC_data[m]>max) max=ADC_data[m];

}

sum=(sum-min-max)>>3;

return sum;

}

void adc_it() interrupt 5//分辨率2.44mv

{

ADC_CONTR&=~ADC_FLAG;

//if(t==0)

ADC_data=(ADC_RES*4 ADC_RESL);//adhl2=(ADC_RES*4 ADC_RESL);////读取10位通道4AD转换结果

i ;

if(i>=10)

{ EADC=0;

i=0;

adhl2=Average();

EADC=1;

}

ADC_RES=0;ADC_RESL=0;

ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ADC_START|ch;

}

void main()

{ //P1=0x00;

//CCP0=0;

InitADC();

pwm_init();

while(1)

{

getadv=5*adhl2*12/1024;

if(getadv<=41)c=0;

if(getadv>41&&getadv<=44) c=1;

if(getadv>44&&getadv<=47) c=2;

if(getadv>47&&getadv<=50) c=3;

if(getadv>50&&getadv<=53) c=4;

if(getadv>53&&getadv<=56) c=5;

if(getadv>56) c=6;

switch(c)

{

case 0:pwm_set(PWM[0]);PCA_PWM0=0x01;break;

case 1:PCA_PWM0=0x00;pwm_set(PWM[1]);break;

case 2:PCA_PWM0=0x00;pwm_set(PWM[2]);break;

case 3:PCA_WM0=0x00;pwm_set(PWM[3]);break;

case 4:PCA_PWM0=0x00;pwm_set(PWM[4]);break;

case 5:PCA_PWM0=0x00;pwm_set(PWM[5]);break;

case 6:PCA_PWM0=0x00;pwm_set(PWM[6]);break;

case 7:PCA_PWM0=0x00;pwm_set(PWM[7]);break;

}

}

}

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章