📄 adcauton6100blit.h
字号:
#define channel 4
#define use_channel(locate) ADMUX&=0xf0;(ADMUX|=locate)
#define adc_channel A,channel
#define N6100BLitADC A,4
unsigned int get_ad(void)
{
unsigned int i=0;
unsigned char adl;
unsigned char adh ;
in(N6100BLitADC);
un_upres(N6100BLitADC);
ADMUX=0b11000000; //use internal ref ,,right,
use_channel(channel);
ADCSRA =0B10000100; // 16feq divi
ADCSRA|=0B01000000; //启动一次转换
i=0;
_delay_us(60);
while (( (ADCSRA & 0x10)==0) && (i<2000)) i++;// Wait for the AD conversion to complete
_delay_us(60);
ADCSRA&=0xef;//off adc
adl=ADCL;
adh=ADCH;
i=(adh*256+adl);
return i;
}
#define io_size 12
unsigned int Get_ADC(void)
{uchar i,max_id,min_id;
uint max_valu,min_valu;
uint j=0;
uint buf[io_size];
for(i=0;i<io_size;i++)
{
buf[i]=get_ad();
}
for(i=0;i<io_size;i++)
{j+=buf[i];
}
j/=io_size ; //adc average
max_id=0;min_id=0;
max_valu=j;min_valu=j;
for(i=0;i<io_size;i++)
{if(buf[i]>max_valu) {max_id=i;max_valu=buf[max_id];}
if(buf[i]<min_valu) {min_id=i;min_valu=buf[min_id];}
}
j=0;
for(i=0;i<io_size;i++)
{if((i!=max_id) && (i!=min_id)) j+=buf[i];
}
if(max_id==min_id) j/=(io_size-1);
else j/=(io_size-2);
return j;
}
#define uart_debug_adc 0
void AutoN6100BLit(void )
{
uint8 PWM=0x40;
for(uint adci=0;adci<128;adci++)
{
uint16 adc=Get_ADC();
#if uart_debug_adc==1
diruart[0]=0xDD;
CopyBytes((uint8 *)&adc,&diruart[1],2);
uart_send2(&diruart[0],3);
#endif
if(adc<=890) {if(PWM<0x80) PWM++;}
else if(adc<910) break;
else PWM--;
N6100BLitPWM=PWM;_delay_ms(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -